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 = ;
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
IdentityServer4结合AspNetCore.Identity实现登录认证踩坑填坑记录的更多相关文章
- Phoenix踩坑填坑记录
Phoenix踩坑填坑记录 Phoenix建表语句 如何添加二级索引 判断某表是否存在 判断索引是否存在 Date类型日期,条件判断 杂项 记录Phoenix开发过程中的填坑记录. 部分原文地址:ph ...
- Spark踩坑填坑-聚合函数-序列化异常
Spark踩坑填坑-聚合函数-序列化异常 一.Spark聚合函数特殊场景 二.spark sql group by 三.Spark Caused by: java.io.NotSerializable ...
- Kafka踩坑填坑记录
Kafka踩坑填坑记录 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 二. 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 在虚拟机上,搭建了3台 ...
- Linux踩坑填坑记录
Linux踩坑填坑记录 yum安装失败[Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.aliyun.com'" ...
- IdentityServer4 And AspNetCore.Identity Get AccessToken 问题
结合 AspNetCore.Identity 主要就是下载 官方的IdentityServer4.AspNetIdentity 这个包 下面来看下源码 里面帮助我们处理了 IUserClaimsPr ...
- wap2app(五)-- 微信授权登录以及踩过的坑
应用场景是:用Hbuilder打包app,在app中点击微信授权登录或者某一操作,调起微信授权登录,用户授权后拿到用户信息. 一.登录插件配置 先配置微信登录参数 appid和appsecret,在m ...
- ajax简单登录(踩过的坑)
登陆页面: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...
- 自制Amiibo 踩坑/填坑 指南
去年买了台老版NS,后来得知有Amiibo这种东西的存在,但是学校附近都买不到. 再后来网上看见有人在X宝卖自制卡片,就寻思着是否能自己 DIY一套,于是掉坑里. 要想使用自制Amiibo,一共要做两 ...
- 来吧学学.Net Core之登录认证与跨域资源使用
序言 学习core登录认证与跨域资源共享是越不过的砍,所以我在学习中同样也遇到啦这两个问题,今天我们就用示例来演示下使用下这2个技术点吧. 本篇主要内容如下: 1.展示一个登录认证的简单示例 2.跨域 ...
随机推荐
- 模拟APP存储空间、内存不足情况下软件正常运行
1.进行临界测试,手机盘空间存满的条件下应用会有何表现: 方法一:adb shell dd if=/dev/zero of=/mnt/sdcard/bigfile 方法二:哆啦A工具生成文件 2.内存 ...
- 【转】如何向XML内插入一个字符串片段
转自:http://bbs.csdn.net/topics/190051229 5楼 string filepath = Server.MapPath("你的xml文件"); ...
- MT【198】连乘积放缩
(2018中科大自招最后一题)设$a_1=1,a_{n+1}=\left(1+\dfrac{1}{n}\right)^3(n+a_n)$证明:(1)$a_n=n^3\left(1+\sum\limit ...
- 【刷题】BZOJ 2134 单选错位
Description Input n很大,为了避免读入耗时太多, 输入文件只有5个整数参数n, A, B, C, a1, 由上交的程序产生数列a. 下面给出pascal/C/C++的读入语句和产生序 ...
- System.gc()与Runtime.gc()的区别
(1) GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象 ...
- aws上部署zabbix3.4
三台机器 10.0.0.149 AmazonLinux2.0 zabbix-server zabbix-agent 10.0.1.61 CentOS6.9 zabbix-agent 10.0.1.11 ...
- C++并发编程之std::async(), std::future, std::promise, std::packaged_task
c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的: void f(int n); std::thread t(f, n + 1); t.join(); 但是线程毕竟是属于比 ...
- 将句子表示为向量(下):基于监督学习的句子表示学习(sentence embedding)
1. 引言 上一篇介绍了如何用无监督方法来训练sentence embedding,本文将介绍如何利用监督学习训练句子编码器从而获取sentence embedding,包括利用释义数据库PPDB.自 ...
- Redis缓存与springboot集成
注意点:
- 数学:莫比乌斯反演-GCD计数
Luogu3455:莫比乌斯反演进行GCD计数 莫比乌斯反演就是用来解决这一类问题的,通常f函数是要求的那个,F函数是显然的 这样利用F的结果就可以推出来f的结果 在计算结果的时候整除分快儿一下就可以 ...