我的应用程序使用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所需的索赔值(在我的例子中是社会保险号),然后让用户登录。真是妙不可言!