博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IdentityServer4结合AspNetCore.Identity实现登录认证踩坑填坑记录
阅读量:4646 次
发布时间:2019-06-09

本文共 2025 字,大约阅读时间需要 6 分钟。

也可以自定义实现,不使用IdentityServer4.AspNetIdentity这个包,当然还要实现其他接口IResourceOwnerPasswordValidator、 IProfileService等

 

Idr4结合AspNetCore.Identity实现Claims认证需要一个问题:

额外再去去实现IUserClaimsPrincipalFactory接口,为什么要实现这个接口呢?

本生是能够登录的,但是过一段时间就会出现设置value值为null的错误如图

 

 

其实是Claims身份认证信息过期需要重新创建,所以我们要实现IUserClaimsPrincipalFactory接口来实现里面的CreateAsync

public class UserClaimsPrincipal : IUserClaimsPrincipalFactory
{ private readonly IUserStoreService _storeService; public UserClaimsPrincipal(IUserStoreService storeService) { _storeService = storeService; } public async Task
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
(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
() .AddDefaultTokenProviders() .AddClaimsPrincipalFactory
();

这里有一个很奇葩的问题 就是在用来 AspNetIdentity 这个包以后,按理说我不需要再去实现 

IResourceOwnerPasswordValidator、 IUserClaimsPrincipalFactory、IProfileService 这些了, 本机调试测试登录都没有问题 但是发布在IIS上依然会出现 Value null的问题

查看Cookie发现 OIDC 中间件的cookies根本没有生成,没办法 我又手动注入了IUserClaimsPrincipalFactory、IProfileService 这个接口及实现,发布后就OK了

 

 但是本机调试运行发现OIDC生成的中间件Cookies 居然是这样

很奇怪~

 GitHub上有简单的例子

https://github.com/woshilangdanger

转载于:https://www.cnblogs.com/liyouming/p/9435941.html

你可能感兴趣的文章
LOJ 2537 「PKUWC2018」Minimax
查看>>
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
Some configure
查看>>
流量调整和限流技术 【转载】
查看>>
正由另一进程使用,因此该进程无法访问此文件。
查看>>
1 线性空间
查看>>
VS不显示最近打开的项目
查看>>
MyEclipse安装Freemarker插件
查看>>
计算多项式的值
查看>>
DP(动态规划)
查看>>
chkconfig
查看>>
TMS320F28335项目开发记录2_CCS与JTAG仿真器连接问题汇总
查看>>
最强的篮球队和马尔可夫模型
查看>>
pyQt 每日一练习 -- 登录框
查看>>
wp 删除独立存储空间文件(多级非空文件夹删除)
查看>>
Loadrunner安装使用入门
查看>>
smartupload 上传文件时 把页面编码改成gbk 解决乱码
查看>>
EPS是什么格式
查看>>
Python的数据库操作(Sqlalchemy)
查看>>
2.抽取代码(BaseActivity)
查看>>