Idr4结合AspNetCore.Identity实现Claims认证需要一个问题:
去实现IUserClaimsPrincipalFactory接口,为什么要实现这个接口呢?
本生是能够登录的,但是过一段时间就会出现设置value值为null的错误如图
其实是Claims身份认证信息过期需要重新创建,所以我们要实现IUserClaimsPrincipalFactory接口来实现里面的CreateAsync
public class UserClaimsPrincipal : IUserClaimsPrincipalFactory<IdentityUser> ???{ ???????private readonly IUserStoreService _storeService; ???????public UserClaimsPrincipal(IUserStoreService storeService) ???????{ ???????????_storeService = storeService; ???????} ???????public async Task<ClaimsPrincipal> CreateAsync(IdentityUser user) ???????{ ???????????var claims = await _storeService.GetAllClaimsByUser(user); ???????????ClaimsIdentity claimsIdentity = new ClaimsIdentity(claims); ???????????ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(claimsIdentity); ???????????return await Task.FromResult(claimsPrincipal); ???????} ???}
处理如上,处理后一旦身份信息过期就会调用本方法重新创建身份信息
同时我们需要在服务中添加相关服务
services.AddIdentity<IdentityUser, IdentityRole>(options => ???????????{ ???????????????options.User.RequireUniqueEmail = false; ???????????????options.Password.RequiredLength = 6; ???????????????options.Password.RequireLowercase = false; ???????????????options.Password.RequireNonAlphanumeric = false; ???????????????options.Password.RequireUppercase = false; ???????????????options.Password.RequireDigit = false; ???????????}) ???????????????.AddEntityFrameworkStores<ApplicationDbContext>() ???????????????.AddDefaultTokenProviders() ???????????????.AddClaimsPrincipalFactory<UserClaimsPrincipal>();
IdentityServer4结合AspNetCore.Identity实现登录认证需要注意实现IUserClaimsPrincipalFactory
原文地址:https://www.cnblogs.com/liyouming/p/9435941.html