如何从单页应用程序实现OAuth 2.0授权码授权?

我们有一个由 ASP.NET Web API 支持的 Angular SPA,该 API 使用 OAuth 2.0 资源所有者密码凭据授予和持有者令牌进行授权。该 API 使用 Microsoft.Owin.Security.OAuth 来实现 OAuth。

我们正在尝试与将使用授权代码授予的第三方应用程序集成,以便用户可以授权它代表他们访问我们的应用程序。

我们希望授权页面成为SPA的一部分,但我很难弄清楚如何将授权请求从SPA提交到API并将其重定向回第三方应用程序。

我尝试同时使用AJAX(就像SPA中的所有其他API请求一样)和常规HTML表单(以便重定向响应重定向页面)。

我们最初从API发回JSON响应,并让SPA自己进行重定向,但如果出现某些错误,OWIN将自动发送重定向响应;因此,似乎没有任何方法可以避免重定向响应。

如果我通过AJAX发送请求,浏览器将通过发送另一个AJAX请求而不是重定向页面来自动跟踪服务器发送的重定向响应。

如果我使用常规的HTML表单发送请求,则似乎没有任何方法可以使用持有者令牌发送所需的标头。Authorization


慕码人8056858
浏览 99回答 1
1回答

皈依舞

我最终使用了一个HTML表单,并在表单正文中发送了当前的访问令牌。我在表单中为访问令牌创建了一个隐藏输入,并且仅在提交表单时设置其值(以减少用户或恶意脚本/扩展看到表单的可能性)。在服务器端,我们的OAuth代码以前只在标头中查找访问令牌;我将其更改为在请求表单()中查找授权代码请求。AuthorizationIOwinRequest.ReadFormAsyncOAuth 代码现在向成功的授权代码请求发送重定向响应,而不是使用重定向 URI 发送 JSON 响应。
打开App,查看更多内容
随时随地看视频慕课网APP