asp.net mvc API外部登录



我创建了一个应用程序与asp.net mvc api与用户,遵循本教程。一切都很顺利。

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

所以我有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错误请求。
我现在的问题是我怎么能解决这个问题,并使登录?

您需要将结果访问令牌添加到授权头(使用postman进行测试)中,并使用它来调用RegisterExternal web调用,如下所示:

授权承载访问令牌在这里

在注册外部网络呼叫,你需要提供一个电子邮件,我猜它与facebook登录相关联。

那么你需要再次执行外部登录调用,就像你第一次做的(链接来自get外部登录)

这次返回的访问令牌将是本地访问令牌,而不是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);

最新更新