首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OIDC认证后用SignInManager登录用户

OIDC认证后用SignInManager登录用户
EN

Stack Overflow用户
提问于 2021-02-26 12:03:03
回答 1查看 115关注 0票数 1

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

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

他说:我是不是走对了路?

他说:如果是的话--我怎样才能完成这个标志呢?我在一个blazor组件中--在这里,我可以映射用户并访问SignInManager,但是由于我没有HttpContext,所以我不能只调用SignInManager.SignInAsync(.),那么如何实际完成签名呢?

EN

回答 1

Stack Overflow用户

发布于 2022-08-19 08:18:20

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

代码语言:javascript
复制
        if (User.Identity.IsAuthenticated)
        {
            if (!SignInManager.IsSignedIn(User))
            {
                if (!await MySignInMethod())
                {
                    Redirect("someUsefulPlace");
                }
            }
        }

然后MySignInMethod看起来是这样的:

代码语言:javascript
复制
    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;
    }

它提取出我需要从数据库中获取用户的索赔值(在我的例子中是一个社会保险号码),然后登录用户。就像一种魅力!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66385503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档