如何从 Single-Page 应用程序实施 OAuth 2.0 授权码授予?
How to implement OAuth 2.0 Authorization Code Grant from Single-Page Application?
我们有一个由 ASP.NET Web API 支持的 Angular SPA,它使用 OAuth 2.0 Resource Owner Password Credentials Grant 和 Bearer Token 进行授权。 API 使用 Microsoft.Owin.Security.OAuth 实现 OAuth。
我们正在尝试与将使用 Authorization Code Grant 的 third-party 应用程序集成,以便用户可以授权它代表他们访问我们的应用程序。
我们希望授权页面成为 SPA 的一部分,但我无法弄清楚如何将授权请求从 SPA 提交到 API 并将其重定向回 third-party申请。
我试过同时使用 AJAX(与 SPA 中所有其他 API 请求一样)和常规 HTML 表单(以便重定向响应重定向页面)。
我们最初从 API 发回 JSON 响应并让 SPA 自己进行重定向,但如果出现错误,OWIN 会自动发送重定向响应;所以似乎没有任何方法可以避免重定向响应。
如果我通过 AJAX 发送请求,浏览器将自动按照服务器发送的重定向响应发送另一个 AJAX 请求,而不是重定向页面。
如果我使用常规 HTML 表单发送请求,似乎没有任何方法可以使用 Bearer Token 发送所需的 Authorization
header。
我最终使用 HTML 表单并以 body 表单发送当前访问令牌。我在表单中为访问令牌创建了一个隐藏输入,并且仅在提交表单时设置它的值(以减少它被用户或恶意 script/extension 看到的机会)。
在服务器端,我们的 OAuth 代码以前只在 Authorization
header 中查找访问令牌;我将其更改为还可以在请求表单 (IOwinRequest.ReadFormAsync
) 中查找授权代码请求。
OAuth 代码现在向成功的授权代码请求发送重定向响应,而不是发送带有重定向 URI 的 JSON 响应。
我们有一个由 ASP.NET Web API 支持的 Angular SPA,它使用 OAuth 2.0 Resource Owner Password Credentials Grant 和 Bearer Token 进行授权。 API 使用 Microsoft.Owin.Security.OAuth 实现 OAuth。
我们正在尝试与将使用 Authorization Code Grant 的 third-party 应用程序集成,以便用户可以授权它代表他们访问我们的应用程序。
我们希望授权页面成为 SPA 的一部分,但我无法弄清楚如何将授权请求从 SPA 提交到 API 并将其重定向回 third-party申请。
我试过同时使用 AJAX(与 SPA 中所有其他 API 请求一样)和常规 HTML 表单(以便重定向响应重定向页面)。
我们最初从 API 发回 JSON 响应并让 SPA 自己进行重定向,但如果出现错误,OWIN 会自动发送重定向响应;所以似乎没有任何方法可以避免重定向响应。
如果我通过 AJAX 发送请求,浏览器将自动按照服务器发送的重定向响应发送另一个 AJAX 请求,而不是重定向页面。
如果我使用常规 HTML 表单发送请求,似乎没有任何方法可以使用 Bearer Token 发送所需的 Authorization
header。
我最终使用 HTML 表单并以 body 表单发送当前访问令牌。我在表单中为访问令牌创建了一个隐藏输入,并且仅在提交表单时设置它的值(以减少它被用户或恶意 script/extension 看到的机会)。
在服务器端,我们的 OAuth 代码以前只在 Authorization
header 中查找访问令牌;我将其更改为还可以在请求表单 (IOwinRequest.ReadFormAsync
) 中查找授权代码请求。
OAuth 代码现在向成功的授权代码请求发送重定向响应,而不是发送带有重定向 URI 的 JSON 响应。