如何使用Web API模板中的添加外部登录方法

时间:2015-01-20 18:30:58

标签: asp.net-web-api asp.net-identity owin

我使用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方法发送哪些信息?

1 个答案:

答案 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();
} 
相关问题