C# 如何从单页应用程序实现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请求而不是重定向页面来自动跟踪服务器发送的重定向响应C# 如何从单页应用程序实现OAuth 2.0授权码授予?,c#,asp.net,angular,oauth-2.0,owin,C#,Asp.net,Angular,Oauth 2.0,Owin,我们有一个由ASP.NET Web API支持的Angular SPA,该API使用OAuth 2.0和承载令牌进行授权。API使用Microsoft.Owin.Security.OAuth来实现OAuth 我们正在尝试与将使用的第三方应用程序集成,以便用户可以授权它代表他们访问我们的应用程序 我们希望授权页面成为SPA的一部分,但我无法确定如何将SPA的授权请求提交给API,并将其重定向回第三方应用程序 我尝试使用AJAX(与SPA中的所有其他API请求一样)和常规HTML表单(这样重定向响应
如果我使用常规HTML表单发送请求,似乎没有任何方法可以使用承载令牌发送所需的
授权头。我最终使用HTML表单并在表单正文中发送当前访问令牌。我在表单中为访问令牌创建了一个隐藏输入,并仅在提交表单时设置其值(以减少用户或恶意脚本/扩展看到它的机会)
在服务器端,我们的OAuth代码以前只在授权
头中查找访问令牌;我将其更改为同时在请求表单(IOwinRequest.ReadFormAsync
)中查找授权代码请求
OAuth代码现在向成功的授权代码请求发送重定向响应,而不是使用重定向URI发送JSON响应