如何将Asp.net核心身份用户连接到IdentityServer4用户

问题描述 投票:0回答:1

我有一个IdentityServer4部署了后备SQL Server数据库。我还部署了Asp.NET Core WebAppi服务,并且使用IdentityServer4作为授权。然后,我有一个Typescrip SPA客户端,该客户端使用(现在)IdenityServer4登录并获取JWTToken以连接到WebAPI。

如何在WebApi上使用Microsoft身份管理授权。我的意思是,现在,当我对IdentityServer进行身份验证时,我在WebApi控制器中得到了一个User对象。该用户与IdentityServer4绑定,并拥有其所有权。我想将此用户从我的WebApi连接到本地Asp.NEt身份用户,因此我可以管理它的角色,并专门为此WebApi声明所有权。

在WebApi上,我想使用Microsoft asp.net身份存储本地用户,用户角色,特定于该webApi的用户声明,并且仅使用IdentityServer4进行身份验证。如何将IS4用户映射到我的Asp.NEt Core身份用户?

asp.net-core authorization asp.net-core-webapi identityserver4
1个回答
0
投票

尽管您可以从IdentityServer的UserInfo终结点获取用户的角色,并执行与Asp.Net Identity相同的操作。

所有令牌的验证操作完成后,您必须检查用户是否存在于数据库中。如果不存在,则将用户添加到数据库中。

        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

        }).AddJwtBearer(options =>
        {
            options.Authority = "";
            options.RequireHttpsMetadata = false;
            options.Audience = "";
            options.Events.OnTokenValidated = async (context) =>
            {
                var usermanager = services.BuildServiceProvider().GetService<UserManager<ApplicationUser>>();
                var user = await usermanager.FindByNameAsync(context.HttpContext.User.Identity.Name);

                if (user == null)
                {
                    user = new ApplicationUser();
                    user.UserName = context.HttpContext.User.Identity.Name;
                    //...

                    await usermanager.CreateAsync(user);
                }
            };
        });
© www.soinside.com 2019 - 2024. All rights reserved.