我已经使用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错误 我现在的问题是如何解决这个问题,并进行登录?
答案 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);