Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从单页应用程序实现OAuth 2.0授权码授予?_C#_Asp.net_Angular_Oauth 2.0_Owin - Fatal编程技术网

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

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表单(这样重定向响应

我们有一个由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表单发送请求,似乎没有任何方法可以使用承载令牌发送所需的
授权
头。

我最终使用HTML表单并在表单正文中发送当前访问令牌。我在表单中为访问令牌创建了一个隐藏输入,并仅在提交表单时设置其值(以减少用户或恶意脚本/扩展看到它的机会)

在服务器端,我们的OAuth代码以前只在
授权
头中查找访问令牌;我将其更改为同时在请求表单(
IOwinRequest.ReadFormAsync
)中查找授权代码请求

OAuth代码现在向成功的授权代码请求发送重定向响应,而不是使用重定向URI发送JSON响应