URI перенаправления недействителен с Outlook MAIL REST API - PullRequest
0 голосов
/ 08 февраля 2019

Я надеюсь, что кто-то может помочь с этим, я полностью застрял.


Предварительная информация

У меня есть работающее приложение Coldfusion (через Интернет) с полным процессом проверки Google Oauth2.реализованы.Это хорошо работает, и я могу получать сообщения по электронной почте и отправлять команды.Теперь я хочу сделать то же самое с Microsoft Outlook


Проблема

Когда я пытаюсь выполнить HTTP-запрос POST к URL-адресу токена, я получаю ответ, что мой URI перенаправления не являетсядопустимо, потому что это не то же самое, что я использовал для получения кода.


Что работает

Я могу получить код, выполнив запрос GET к конечной точке oauth.Я добавил URI перенаправления на портале Azure (несколько URI). Когда я вызываю этот URL, я получаю экран входа в систему из Outlook, и после этого я успешно перенаправляется обратно в свое приложение.Поэтому я предполагаю, что URI перенаправления правильный и все работает.

Когда я пытаюсь получить токен с полученным кодом, я получаю ошибку перенаправления.Я абсолютно не знаю, как получается, что эти URI не одинаковы.Я трижды проверил все, но не могу найти ничего плохого.


Ошибка

Это ошибка, которую я получаю: "error": "invalid_grant", "error_description": "AADSTS70000: предоставленное значение для 'redirect_uri' недопустимо. Значение должно точно соответствовать URI перенаправления, используемому для получения кода авторизации.

Я пробовал разные типы форматов. Тире в конце или без дефиса. Но факт остается фактом, что URL перенаправления работаетдля более раннего шага. Так почему бы не с этим?

Когда я играю с ним, я также получаю сообщения типа «Код истек», так что я знаю, что он работает правильно.Лазурный портал. Я следовал за игровой площадкой oauth2. Но все же не могу пройти мимо этого сообщения. Как я могу выяснить, что здесь происходит?

ЗАПРОС

Я пробовал разные способычтобы сделать запрос. Самый простой из них:

cfhttp(method="POST", charset="utf-8", url="https://login.microsoftonline.com/common/oauth2/v2.0/token", result="result") {
cfhttpparam(name="Content-Type", type="header", value="application/x-www-form-urlencoded");
cfhttpparam(name="grant_type", type="formfield", value="authorization_code");
cfhttpparam(name="code", type="formfield", value="M090efafb-1ce6-1d54-fda7-e48f57c33cba");
cfhttpparam(name="scope", type="formfield", value="openid offline_access profile https://outlook.office.com/mail.read https://outlook.office.com/mail.read.shared https://outlook.office.com/mail.readwrite https://outlook.office.com/mail.readwrite.shared https://outlook.office.com/mail.send https://outlook.office.com/mail.send.shared");
cfhttpparam(name="redirect_uri", type="formfield", value="#URLencode('https://bizz.bmk-is.nl/')#");
cfhttpparam(name="client_id", type="formfield", value="cdee5a0a-a409-4c41-9572-726c5bdbe93e");
cfhttpparam(name="client_secret", type="formfield", value="[HIDDEN VALUE]");
            }

## NEW EDIT ##

Я опубликую здесь дополнительную информацию. Прежде всего, это getЯ использую:

response_url = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize";
response_url = "#response_url#?response_type=code";
response_url = "#response_url#&client_id=cdee5a0a-a409-4c41-9572-726c5bdbe93e";
response_url = "#response_url#&redirect_url=#URLencode('https://bizz.bmk-is.nl/')#";
response_url = "#response_url#&scope=openid offline_access profile";
response_url = "#response_url# https://outlook.office.com/mail.read";
response_url = "#response_url# https://outlook.office.com/mail.read.shared";
response_url = "#response_url# https://outlook.office.com/mail.readwrite";
response_url = "#response_url# https://outlook.office.com/mail.readwrite.shared";
response_url = "#response_url# https://outlook.office.com/mail.send";
response_url = "#response_url# https://outlook.office.com/mail.send.shared&prompt=login";

Это ошибка, которую я получаю сейчас: «error»: «invalid_request», «error_description»: «AADSTS90102: значение« redirect_uri »должно быть действительным абсолютным Uri.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Боже мой, я нашел это!Я искал и играл с URI перенаправления, когда я заметил, что в get я назвал его «URL перенаправления» и в посте «URI перенаправления».Поменял это на ури и теперь работает!Супер приятно.Все еще странно, что я не получаю сообщение об ошибке, что URL перенаправления - ничто, но эй, я рад, что это работает.

0 голосов
/ 08 февраля 2019

Вам может понадобиться URL-кодирование вашего «redirect_uri».

Вот пример из MS Начало работы с Outlook REST page.Обратите внимание на кодировку URI:

GET https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=<CLIENT ID>&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F&response_type=code&scope=openid+Mail.Read

и затем получите AccessToken:

POST https://login.microsoftonline.com/common/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=AwABAAAA...cZZ6IgAA&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F&client_id=<CLIENT ID>&client_secret=<CLIENT SECRET>
...