我使用Web API模板。我的目标是使用Facebook,Twitter和Google注册和授权的REST服务。
我可以使用社交网络创建帐户,但无法向现有帐户添加其他社交网络登录信息。
具体来说,问题出现在这种方法中:
// POST api/Account/AddExternalLogin
[Route("AddExternalLogin")]
public async Task<IHttpActionResult> AddExternalLogin(AddExternalLoginBindingModel model)
更具体地说,此调用返回的值为null
,
AuthenticationTicket ticket = AccessTokenFormat.Unprotect(model.ExternalAccessToken);
明确导致API返回BadRequest("External login failure.");
。
AddExternalLoginBindingModel
中唯一的成员是ExternalAccessToken
,我填写的是社交网络访问令牌。
如何在现有帐户中添加外部登录信息?我应该向AddExternalLogin
方法发送哪些信息?
答案 0 :(得分:3)
不知道我做的事情是否在概念上是错误的,但我只是通过避免使用AccessTokenFormat来解决这个问题。 基本上与第一次登录时的流程相同。但是当你获得身份验证令牌时,你必须设置授权标题(&#34; Bearer&#34; +)并调用调整后的api:
[OverrideAuthentication]
[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
[Route("AddExternalLogin")]
public async Task<IHttpActionResult> AddExternalLogin() {
var info = await Authentication.GetExternalLoginInfoAsync();
if (info == null) {
return InternalServerError();
}
IdentityResult result = await UserManager.AddLoginAsync(User.Identity.GetUserId(), new UserLoginInfo(info.Login.LoginProvider, info.Login.ProviderKey));
Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
if (!result.Succeeded) {
return GetErrorResult(result);
}
return Ok();
}