У меня есть код, который авторизуется в 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, чего я не хочу).