IdentityServer4結合AspNetCore.Identity實現登錄認證踩坑填坑記錄


也可以自定義實現,不使用IdentityServer4.AspNetIdentity這個包,當然還要實現其他接口IResourceOwnerPasswordValidator、 IProfileService等

 

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>();

這里有一個很奇葩的問題 就是在用來 AspNetIdentity 這個包以后,按理說我不需要再去實現 

IResourceOwnerPasswordValidator、 IUserClaimsPrincipalFactory、IProfileService 這些了, 本機調試測試登錄都沒有問題 但是發布在IIS上依然會出現 Value null的問題

查看Cookie發現 OIDC 中間件的cookies根本沒有生成,沒辦法 我又手動注入了IUserClaimsPrincipalFactory、IProfileService 這個接口及實現,發布后就OK了

 

 但是本機調試運行發現OIDC生成的中間件Cookies 居然是這樣

很奇怪~

 GitHub上有簡單的例子

https://github.com/woshilangdanger


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM