我们有一个角SPA由使用的OAuth 2.0 Resource Owner Password Credentials Grant与承载令牌授权的ASP.NET Web API的支持。 API使用Microsoft.Owin.Security.OAuth来实现的OAuth。
我们试图用将使用Authorization Code Grant让用户可以授权其访问代表他们对我们的应用程序第三方应用程序集成。
我们希望授权页面是SPA的一部分,但我有麻烦找出如何从SPA提交授权请求API并将其重定向回的第三方应用程序。
我同时使用AJAX(像所有的SPA其他API请求)和常规的HTML表单(让重定向响应重定向页面)尝试。
我们最初被发回来自API的JSON响应,并让SPA做重定向本身,但如果有一些错误OWIN会自动发送重定向响应;所以不会出现任何的方法来避免重定向响应。
如果我通过AJAX发送请求时,浏览器会自动跟随通过发送另一个AJAX请求,而不是重定向页面服务器发送重定向响应。
如果我使用一个普通的HTML表单发送请求,似乎没有被任何方式与承载令牌发送所需Authorization
头。
我结束了使用HTML表单发送表单体当前访问令牌。我创建的形式隐藏输入的访问令牌,只有当形式提交(以减少它由用户或恶意脚本/扩展被看到的几率),将其值设置。
在服务器端,我们的OAuth代码以前只寻找在Authorization
头的访问令牌;我改成了也看在申请表(IOwinRequest.ReadFormAsync
)授权代码的请求。
所述的OAuth代码现在发送重定向响应于成功的认证码的请求,而不是发送与重定向URI的JSON响应。