zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java关键字instanceof
    java中equals和==的区别
    Servlet、Filter、Listener总结
    struts2 拦截器配置
    Struts2技术详解
    构建Java并发模型框架
    基于MINA框架快速开发网络应用程序
    Spring的IOC原理
    Spring AOP原理及拦截器
    JAVA三大框架SSH和MVC
  • 原文地址:https://www.cnblogs.com/liyouming/p/9435941.html
Copyright © 2011-2022 走看看