我的应用程序在本地用户帐户中使用Asp.net核心标识。我已经添加了与OIDC和认证工作的身份验证-我得到了索赔,一切都是好的。
我现在的计划是将响应映射到用户帐户,然后登录用户,以便所有当前视图都能像现在一样使用角色。
他说:我是不是走对了路?
他说:如果是的话--我怎样才能完成这个标志呢?我在一个blazor组件中--在这里,我可以映射用户并访问SignInManager,但是由于我没有HttpContext,所以我不能只调用SignInManager.SignInAsync(.),那么如何实际完成签名呢?
发布于 2022-08-19 08:18:20
是的,我设法解决了这个问题。在_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;
}它提取出我需要从数据库中获取用户的索赔值(在我的例子中是一个社会保险号码),然后登录用户。就像一种魅力!
https://stackoverflow.com/questions/66385503
复制相似问题