Asp.net web api 如何使用WebAPI模板中的AddExternalLogin方法

Asp.net web api 如何使用WebAPI模板中的AddExternalLogin方法,asp.net-web-api,asp.net-identity,owin,Asp.net Web Api,Asp.net Identity,Owin,我使用WebAPI模板。我的目标是使用Facebook、Twitter和Google注册和授权的REST服务 我可以使用社交网络创建帐户,但无法将其他社交网络登录添加到现有帐户 具体而言,该方法存在以下问题: // POST api/Account/AddExternalLogin [Route("AddExternalLogin")] public async Task<IHttpActionResult> AddExternalLogin(AddExternalLoginBind

我使用WebAPI模板。我的目标是使用Facebook、Twitter和Google注册和授权的REST服务

我可以使用社交网络创建帐户,但无法将其他社交网络登录添加到现有帐户

具体而言,该方法存在以下问题:

// POST api/Account/AddExternalLogin
[Route("AddExternalLogin")]
public async Task<IHttpActionResult> AddExternalLogin(AddExternalLoginBindingModel model)
显式导致API返回
BadRequest(“外部登录失败”)

AddExternalAlloginBindingModel
中唯一的成员是
ExternalAccessToken
,我正在用社交网络访问令牌填充它


如何将外部登录添加到现有帐户?我应该向
AddExternalLogin
方法发送哪些信息?

不知道我是否在概念上做了错误的事情,但我只是通过避免使用AccessTokenFormat解决了这个问题; 基本上与您第一次登录时的流程相同。但是,当您获得身份验证令牌时,必须设置授权头(“承载器”+),并调用以下调整后的api:

[重写身份验证]
[主机身份验证(DefaultAuthenticationTypes.ExternalBearer)]
[路线(“AddExternalLogin”)]
公共异步任务AddExternalLogin(){
var info=await Authentication.getexternallogininfosync();
if(info==null){
返回InternalServerError();
}
IdentityResult result=await UserManager.AddLoginAsync(User.Identity.GetUserId(),new UserLoginInfo(info.Login.LoginProvider,info.Login.ProviderKey));
Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
如果(!result.successed){
返回GetErrorResult(结果);
}
返回Ok();
} 

我正试图和你做同样的事情。这是正确的流程吗?1) 注册新用户2)使用新用户登录并获取asp.net身份访问令牌3)使用访问令牌调用AddExternalLogin并在绑定中发送facebook令牌contract@JoseManuelOjeda据我记忆所及,你是对的(我再也没有代码了)。登录用户>执行外部登录>获取访问令牌>调用AddExternalLogin api,授权头=承载
 AuthenticationTicket ticket = AccessTokenFormat.Unprotect(model.ExternalAccessToken);