OIDC认证后使用SignInManager登录用户



我的应用程序使用Asp.net核心身份与本地用户帐户。我已经添加了OIDC的身份验证,身份验证工作-我得到索赔,一切都很好。

我现在的计划是将响应映射到一个用户帐户,然后登录该用户,以便所有当前视图都能像今天一样使用角色。

1:我这样做对吗?

2:如果是,我该如何完成登录?我在一个blazor组件-这里我可以映射用户和访问SignInManager,但因为我没有HttpContext我不能只是调用SignInManager. signinasync(…),所以我怎么去实际完成签名?

是的,我设法解决了这个问题。在_HostAuth.cshtml.cs中,我这样做:

if (User.Identity.IsAuthenticated)
{
if (!SignInManager.IsSignedIn(User))
{
if (!await MySignInMethod())
{
Redirect("someUsefulPlace");
}
}
}

然后MySignInMethod看起来像这样:

private async Task<bool> TrySignInWithSsn()
{
var myClaim = User.Claims.FirstOrDefault(x => x.Type == "MyClaimName");
if (myClaim != null && !string.IsNullOrWhiteSpace(myClaim.Value))
{
var myClaimValue = myClaim.Value;
await SignInManager.SignOutAsync();
var user = await ApplicationUserRepository.GetUserByClaimValue(myClaimValue, new CancellationTokenSource().Token);
if (user != null)
{
await SignInManager.SignInAsync(user, true);
return true;
}
}
return false;
}

它找出从数据库中获取User所需的索赔值(在我的例子中是社会保险号),然后让用户登录。真是妙不可言!

相关内容

  • 没有找到相关文章

最新更新