Как я могу указать localhost loopback redirect_uri для родного приложения для поставщика Microsoft OAuth2? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть код, который авторизуется в https://login.live.com/oauth20_authorize.srf конечной точке.

Параметры вызова: "client_id =" + ClientID + "& scope =" + someScopes + "& response_type = code & redirect_uri =" +WebUtility.UrlEncode ("http://localhost:some -port / signin-microsoft ")

http://localhost:port/signin-microsoft зарегистрирован в качестве одного из URL-адресов перенаправления в моем приложении на https://apps.dev.microsoft.com (Мне пришлось использовать Add Platform -> Web, чтобы поместить туда этот redirect_url).

Я запускаю HttpListener (локальный веб-сервер в приложении), чтобы перехватить код авторизации.Затем я получаю код и передаю его этой конечной точке:

https://login.live.com/oauth20_token.srf

Параметры вызова: "client_id =" + ClientID + "& code =" + code + "& grant_type = authorization_code & redirect_uri= "+ WebUtility.UrlEncode (" http://localhost:some -port / signin-microsoft")

Сбой из-за отсутствия ClientSecret.Если я добавлю ClientSecret, он будет работать, и я получу маркер доступа и обновления.

Однако собственные приложения не должны хранить и отправлять секретные данные клиента OAuth2.ClientSecret требуется только для веб-приложений.

Теперь проблема.Портал apps.dev.microsoft.com не позволяет мне указывать localhost redirect_uri для собственных приложений.Я могу сделать это только для веб-приложений (в разделе Web / Redirect URLs).При использовании собственных приложений попытка указать любой URI всегда приводит к тому, что «ваш URI должен иметь формат {схема}: // {домен} / {путь}, не иметь параметров строки запроса и быть ограничен 255 символами».сообщение.

Мне кажется, что здесь разрешено только несколько предопределенных значений (например, https://login.live.com/oauth20_desktop.srf). Даже если я добавлю или изменим какой-либо один символ в этом значении, он больше не действителен, а портал - нет.Позвольте мне сохранить изменения. Я могу использовать эти предопределенные значения, только если у меня нет redirect_uri на основе localhost. Это означает, что мне нужно использовать сложные методы получения кода авторизации (мониторинг процессов браузера и т. д.) вместо простого HttpListener(который используется поставщиком Google OAuth2, например).

Есть ли способ использовать localhost в качестве redirect_uri и все еще не отправлять ClientSecret при работе с поставщиком Microsoft OAuth2?

И почему можноя указываю другие URL-адреса в собственных URI приложения / пользовательского перенаправления портала apps.dev.microsoft.com? Какова цель этой формы, если я в любом случае не могу добавить какие-либо значения, кроме тех, которые уже определены заранее?

Опять же, у меня нет проблем с добавлением моего настраиваемого URL-адреса в URL-адреса веб / перенаправления на том же компьютере.age (и все работает нормально, просто мне нужно иметь дело с ClientSecret, чего я не хочу).

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

ОК, URL, который можно добавить в качестве пользовательского URI перенаправления в разделе «Собственное приложение» портала apps.dev.microsoft.com, должен выглядеть следующим образом: something.not.http.or.https://something

Например:

pw.oauth2://oauth2redirect

Этот тип URI разрешен там (где pw.oauth2 - это схема URL, связанная с вашим приложением, например, для приложений UWP, Манифест пакета / Объявления / Протокол / Имя).Это не совсем локальная петля, но это позволяет браузеру запускать ваше приложение для перехвата кода авторизации.И ClientSecret не нужен.

Если нашел рабочий пример (для провайдера Google) на https://github.com/googlesamples/oauth-apps-for-windows/tree/master/OAuthUniversalApp и смог без проблем адаптировать его для провайдера Microsoft.

0 голосов
/ 17 июня 2019

вы должны зарегистрировать URL-адрес обратной петли, вызываемый браузером, например http://127.0.0.1:8000

Также ваш код должен использовать вариант PKCE потока кода авторизации - чтобы избежать секретов клиента

Я не использовал его с Azure, но уверен, что это сработает для вас

В моем блоге есть некоторые подробности: https://authguidance.com/2018/01/17/desktop-app-how-to-run-the-code-sample/

Нативные приложения и OAuth сложны, поэтомурад помочь - не стесняйтесь пинговать меня на любые последующие вопросы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...