如何解决使用IdentityServer 4将外部提供用户注册到AspNetUserLogins表
我有一个应用程序,用户可以从外部提供商(例如Google和Facebook)登录。从Google / Facebook成功重定向后,它会调用回调URL。
我想直接注册用户,而无需任何用于注册的UI。
// lookup our user and external provider info
var (user,provider,providerUserId,claims) = FindUserFromExternalProvider(result);
if (user == null)
{
await _signInManager.ExternalLoginSignInAsync(provider,isPersistent: false,bypassTwoFactor: true);
//user = AutoProvisionUser(provider,claims);
}
从下面的方法中,我需要获取用户数据并返回到调用方法
private (TestUser user,string provider,string providerUserId,IEnumerable<Claim> claims) FindUserFromExternalProvider(AuthenticateResult result)
{
var externalUser = result.Principal;
// try to determine the unique id of the external user (issued by the provider)
// the most common claim type for that are the sub claim and the NameIdentifier
// depending on the external provider,some other claim type might be used
var userIdClaim = externalUser.FindFirst(JwtClaimTypes.Subject) ??
externalUser.FindFirst(ClaimTypes.NameIdentifier) ??
throw new Exception("Unknown userid");
// remove the user id claim so we don't include it as an extra claim if/when we provision the user
var claims = externalUser.Claims.ToList();
claims.Remove(userIdClaim);
var provider = result.Properties.Items["scheme"];
var providerUserId = userIdClaim.Value;
// find external user
var user = _users.FindByExternalProvider(provider,providerUserId);
return (user,claims);
}
由于此方法使用TestUserStore,因此如何使用signInManager,对此最好的过程是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。