asp.net mvc API外部登录

时间:2015-09-04 09:49:40

标签: asp.net asp.net-mvc facebook

我已经使用asp.net mvc api为用户创建了一个应用程序tutorial。 一切都很好。

现在我正在尝试添加外部登录(实际上只是Facebook)。 我一直在寻找如何做到这一点,我找到了答案here

所以我将Startup.Auth.cs配置为Facebook AppId / Secret。

我打电话给GET api/Account/ExternalLogins?returnUrl=%2F&generateState=true

然后我重定向到给定的Url。然后我回到http://localhost:49728/#access_token= ... &token_type=bearer&expires_in=2592000&state= ...

之类的东西

这是我的问题。接下来我应该怎么做才能在网站上注册用户。

完成Web应用程序后,将会有一个移动原生应用程序。

修改
我将返回的URL更改为我可以询问的位置并保存用户名。 到目前为止还不错。

保存新用户后,我需要进行登录,所以我试试这个:

var state = new RegExp('[\&&]state=([^&#]*)').exec(window.location.href);
                $.get(baseurl + 'api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=' + encodeURIComponent(baseurl) + '&state=' + state[1], function (data, status) {
                    console.log(data);
                });

但是我收到了400 Bad Request错误 我现在的问题是如何解决这个问题,并进行登录?

1 个答案:

答案 0 :(得分:3)

您需要获取生成的访问令牌并使用它来调用RegisterExternal Web调用,方法是将其添加到授权标头(使用邮递员进行测试),如下所示:

授权承载访问令牌

在注册外部网络电话中,您需要提供一封电子邮件,我猜想将其与Facebook登录相关联。

然后你需要像第一次那样再次进行外部登录呼叫(来自外部登录的链接)

这次返回的访问令牌将是本地访问令牌而不是facebook外部访问令牌,您可以使用此令牌来调用您的asp.net api,方法是将其添加到http请求标头中作为"授权"和我解释的一样。

编辑: 对于你所面临的糟糕要求,试试这个: 转到ApplicationOAuthProvider类,然后转到ValidateClientRedirectUri方法,将该方法代码更改为:

 if (context.ClientId == _publicClientId)
 {
    Uri expectedRootUri = new Uri(context.Request.Uri, "/");

    if (context.RedirectUri.StartsWith(expectedRootUri.AbsoluteUri))
    {
       context.Validated();
    }
 }

 return Task.FromResult<object>(null);