首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我已经通过身份验证之后,如何在.NET核心3.1中添加/更新索赔呢?

在我已经通过身份验证之后,如何在.NET核心3.1中添加/更新索赔呢?
EN

Stack Overflow用户
提问于 2021-01-25 13:12:13
回答 1查看 569关注 0票数 0

在我的场景中,用户和企业之间有着多到多的关系。因此,企业可以有许多员工,用户可以是许多企业的雇员。

在登录页面上,我只想显示电子邮件和密码文本框。一旦他们成功地验证了身份,我想把他们重定向到一个页面,这个页面上有他们受雇的业务的下拉列表。

由于他们已经确认了身份,他们的索赔已经被填充。之后我如何添加另一个索赔(他们的BusinessID)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-26 09:38:17

答案是指何时对您进行身份验证,并从OAUTH服务器获得声明。我们不知道您是否在使用本地标识表,或者OAUTH,但无论如何。

当用户选择业务类型. implementation

  • Register时,
  1. 将您自己的UserClaimsPrincipalFactory类定义为启动 GenerateClaimsAsync方法中的服务

我包括一些旧代码(最后我们以另一种方式实现),但也许可以帮助您。

  1. 定义了您自己的UserClaimsPrincipalFactory。为此,我定制了用户类,并添加了一个新的工厂

代码语言:javascript
复制
    using System;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Security.Claims;
    using System.Text.Json.Serialization;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Identity;
    using Microsoft.Extensions.Options;
    
    namespace Common.Models.Identity {
        public class User : IdentityUser<int> {
    
    
            public bool SendAlertByEmail { get; set; }
            public int ClientId { get; set; } = Client.DefaultClientId;
            [JsonIgnore, ForeignKey("ClientId")]
            public virtual Client Client { get; set; } = null!;
        }
    
        public class ApplicationUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<User> {
            public ApplicationUserClaimsPrincipalFactory(
                            UserManager<User> userManager,
                            IOptions<IdentityOptions> optionsAccessor)
                            : base(userManager, optionsAccessor) {
            }
    
            protected override async Task<ClaimsIdentity> GenerateClaimsAsync(User user) {
                ClaimsIdentity identity;
    
                identity = await base.GenerateClaimsAsync(user);
                identity.AddClaim(new Claim("ClientId", user.ClientId.ToString()));
                identity.AddClaim(new Claim("ClientDescription", user.Client.Description));
                return identity;
            }
        }
    }

  1. 在您的ConfigureServices中,配置如下

#region配置标识服务.AddDefaultIdentity(选项=> { options.SignIn.RequireConfirmedAccount = true;options.Stores.MaxLengthForKeys = 256;//最大键长度)。如果更改此}) .AddEntityFrameworkStores() .AddDefaultUI() .AddDefaultTokenProviders() .AddClaimsPrincipalFactory();services.Configure(options => { //密码设置),则重新生成迁移。options.Password.RequireDigit = true;options.Password.RequireLowercase = true;options.Password.RequireNonAlphanumeric = true;options.Password.RequireUppercase = true;options.Password.RequiredLength = 6;options.Password.RequiredUniqueChars = 1;//锁定设置。options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);options.Lockout.MaxFailedAccessAttempts = 5;options.Lockout.AllowedForNewUsers = true;// User设置。"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";options.User.RequireUniqueEmail = false;};services.ConfigureApplicationCookie(options => { // Cookie设置options.Cookie.HttpOnly = true;options.ExpireTimeSpan = TimeSpan.FromMinutes(5);options.LoginPath = "/Identity/Account/Login";options.AccessDeniedPath = "/Identity/Account/AccessDenied";options.SlidingExpiration = true;});#endregion配置标识

  1. 使用IoC将您的ApplicationUserClaimsPrincipalFactory传递给您的"Select /client“请求,并将其用于添加索赔
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65885452

复制
相关文章

相似问题

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