2015-03-04 1 views
3

Недавно я начал работать с API OneDrive, который использует поток аутентификации/авторизации OAuth 2.0.Проверка подлинности OAuth 2.0 - получение ответа на токен перенаправления маркера в приложении ASP.NET MVC

OneDrive API OAuth 2.0

Я пытаюсь следовать по Token Flow, чтобы получить маркер доступа с использованием MVC приложения ASP.NET.

Запроса я делаю что-то похожее на следующее:

GET https://login.live.com/oauth20_authorize.srf?client_id={client_id}&scope={scope}&response_type=token&redirect_uri={redirect_uri}

В случае успешной авторизации от пользователя веб-браузер будет перенаправлен на ваше перенаправление URL с дополнительными параметрами добавлены в URL.

Перенаправление URL похож на следующее: https://login.live.com/oauth20_authorize.srf#access_token={access_token}&authentication_token={authentication_token}&token_type=bearer&expires_in=3600&scope=onedrive.info%20onedrive.full&user_id={user_id}

Обратите внимание на # в указанном выше формате URL. Это соответствует спецификации стандартов протокола OAuth 2.0.

Вопрос: Если у меня есть перенаправление URL для обработки в моем приложении MVC, который имеет параметров запроса раздел, начиная с ? то он может быть обработан очень легко, используя действие контроллера с правильным отображением входных параметров в строке запроса ключа/значение ,

Как я могу обработать URL-адрес в моем приложении MVC, в котором есть строка строки запроса, начиная с # и получить из него все ключевые строки запроса/значения?

Боковое примечание: Я бы просил не предлагать использовать сторонние API/Библиотеки/Подпрограммы в этом случае. Учитывая тот факт, что я хочу сделать процесс OAuth простым и простым способом. Спасибо

ответ

3

Выбранный вами метод, который является потоком токенов, также называемый Неявным потоком грантов, намеренно использует # (фрагмент). Это в целях безопасности, чтобы избежать атаки людей в середине атаки. Ответ в этой ссылке дает некоторое описание по теме OAuth2.0 Implicit Grant flow. Why use url hash fragments?

Однако, если вы все еще хотите использовать токен потока, вы можете прочитать значения на стороне клиента в JavaScript с помощью window.location.hash, а затем обработать эти значения с помощью вероятно, Ajax отправляется на сервер.

Я предлагаю вам использовать поток кода, который предназначен для сценария, который вы объяснили в своем вопросе. Поток кода доступен на ту же ссылку https://github.com/OneDrive/onedrive-api-docs/blob/master/auth/msa_oauth.md#code-flow

Кстати, выше ссылки есть # (фрагмент) в нем тоже :)

+0

Теперь это имеет смысл для меня. Я подозревал это, но теперь я уверен. Кроме того, я узнал о более известном ключевом слове для потока Token как «Implicit Grant Flow», который помогает мне читать больше информации в этом направлении и для каких целей он используется. Спасибо @Praveen за ссылки. Добавление еще одного для его завершения: http://stackoverflow.com/questions/7522831/what-is-the-purpose-of-the-implicit-grant-authorization-type-in-oauth-2 – Jsinh

Смежные вопросы