如何以及何时从 AddOpenIdConnect 事件填充 ContextAccessor.HttpContext.User.Claims?

问题描述

使用 IdentityServer4 4.1.1 和 Microsoft.AspNetCore.Identity.EntityFrameworkCore 3.1.10。

使用 UserManager 时,我可以为用户添加和检索声明。他们坚持到数据库,每个人都很高兴。但是,当我查询 HttpContext.User.Claims 时,它们永远不会出现。 :s

我试图在 ConfigureServices(IServiceCollection services) => AddOpenIdConnect("oidc",options => {});在 Startup.cs 中阻止以将声明添加到 context.HttpContext.User.Claims 枚举,但它是只读的。

    options.Events.OnUserinformationReceived = async context =>
    {
        var mi = services.BuildServiceProvider().GetrequiredService<IModuleInfo>();
        mi.ClearLoggedInUsersCache();

        var userManager = services.BuildServiceProvider().GetrequiredService<UserManager<AspNetUser>>();
        var userName = context.User.RootElement.GetString("name");

        // Get the user object from the database.
        var currentUser = (
            from u in userManager.Users
            where u.normalizedUserName == userName
            select u
        ).FirstOrDefault();

        // Get the claims defined in the database.
        var userClaims = await userManager.GetClaimsAsync(currentUser);

        // =========================================
        // Can't seem to add to context.HttpContext.User.Claims
        // =========================================
    };

基本上我想知道我可以在管道中的哪个位置查询 UserManager 的声明并将它们添加到 ClaimsPrincipal 或正确配置世界,以便在用户登录时从 sql Server 的 AspNetUserClaims 表中提取所有声明.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)