Как реализовать предоставление кода авторизации OAuth 2.0 из одностраничного приложения? - PullRequest
0 голосов
/ 01 февраля 2019

У нас есть Angular SPA, поддерживаемый веб-API ASP.NET, который использует OAuth 2.0 Предоставление учетных данных пароля владельца ресурса с токеном на предъявителя для авторизации.API использует Microsoft.Owin.Security.OAuth для реализации OAuth.

Мы пытаемся интегрироваться со сторонним приложением, которое будет использовать Предоставление кода авторизации , чтобы пользователи могли его авторизовать.чтобы получить доступ к нашему приложению от их имени.

Мы хотим, чтобы страница авторизации была частью SPA, но у меня возникают проблемы с выяснением того, как отправить запрос авторизации от SPA в API и получить его.перенаправить обратно в стороннее приложение.

Я пытался использовать как AJAX (как и все другие запросы API в SPA), так и обычную HTML-форму (чтобы перенаправлять ответы перенаправляли страницу).

Первоначально мы отправляли ответ JSON от API и позволяли SPA выполнить само перенаправление, но OWIN автоматически отправит ответ о перенаправлении, если возникнет какая-либо ошибка;так что, похоже, нет никакого способа избежать ответов на перенаправление.

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

Если я использую обычную HTML-форму для отправки запроса, похоже, нет никакого способа отправить требуемый заголовок Authorization с токеном на предъявителя.

1 Ответ

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

Я закончил тем, что использовал форму HTML и отправил текущий токен доступа в теле формы.Я создал скрытый ввод в форме для токена доступа и установил его значение только при отправке формы (чтобы уменьшить вероятность того, что пользователь увидит ее или вредоносный скрипт / расширение).

Вкл.на стороне сервера наш код OAuth ранее только искал токен доступа в заголовке Authorization;Я изменил его, чтобы также искать в форме запроса (IOwinRequest.ReadFormAsync) запросы кода авторизации.

Код OAuth теперь отправляет ответ перенаправления на успешный запрос кода авторизации вместо отправки ответа JSON с URI перенаправления.

...