开放式身份验证跨域重定向问题

时间:2015-12-02 07:18:28

标签: javascript ajax asp.net-mvc-4 asp.net-web-api oauth-2.0

我在mvc-web-api4中第一次尝试打开身份验证。我在services.domain.com中托管了我的服务,而前端(UI)在test.domain.com中。

在前端我将调用该服务从facebook登录。成功登录后,我将获得services.domain.com中的访问令牌。但我的代码在test.domain.com。

从Facebook重定向后

。我在service.bubblesbuy.com获取访问令牌,但我需要test.domain.com中的访问令牌。

这是我遵循的步骤

$.ajax({
    url: "services.domain.com/api/Account/ExternalLogins?returnUrl=%2F&generateState=true",
    success: function (data) { 
    //after successful 
    }

成功后,我将获得提供者,这里是输出

[     
{
"Name": "Facebook",
"Url": "/api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=services.domain.com&state=bzDUygFiUw-jOYHCYaDPT8iawAjq1ejd0hmkVPZTwjk1",
"State": "bzDUygFiUw-jOYHCYaDPT8iawAjq1ejd0hmkVPZTwjk1"
}
]

我会将Url传递给我的服务

services.domain.com//api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=services.domain.com&state=bzDUygFiUw-jOYHCYaDPT8iawAjq1ejd0hmkVPZTwjk1",
"State": "bzDUygFiUw-jOYHCYaDPT8iawAjq1ejd0hmkVPZTwjk1

我正在

中获取访问令牌
services.domain.com/#access_token= Hu2B5WmmZLy8TfJ3RqRsVnQDfDcHSiVCMliWrS554PpU-i_LQzdMggJgXClsf-ZtYXRDxxct7m3frZxYR0MKLxNWHwH1gXxi7Y-HUbWjyB9QvBJMwifFCVMnt7BOOlKjJPEAhdOY7ZgRB-vURBH-hHT6wFSXJvvpYpZ0fziX0DgKrLIqUj8&token_type=bearer&expires_in=1209600&state=24HUa-Upzo-_Xh2j0CkAx5TVPdoirvNrGktpg5H5Ifg1

但我需要访问test.domain.com中的那个令牌(前端我的所有html页面都在那里)

请帮助我如何在test.domain.com(前端)中获取该访问令牌

1 个答案:

答案 0 :(得分:1)

您需要一个授权服务器,向您的客户端(前端)发出访问令牌。 Microsoft为ASP.NET MVC提供了一个OWIN中间件。请看一下这个示例:OWIN OAuth 2.0 Authorization Server

由于Microsoft将来不再支持此中间件,您还可以使用开源IdentityServer3。该项目是.NET Foundation的一部分,提供了很好的支持和大量的样本。