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.跨域 ...
随机推荐
- NESTED最终与外部事务合并在一起提交
NESTED最终与外部事务合并在一起提交
- SpringBoot设置事务隔离等级
"If you're gonna play the game, boy, ya gotta learn to play it right" Spring Boot 使用事务非常简单 ...
- bzoj1047&bzoj1012
Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. Input 第一行为3个整数,分别表示a,b,n的值第二行至第 ...
- 洛谷 P2051 [AHOI2009]中国象棋 解题报告
P2051 [AHOI2009]中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法. ...
- POJ 2135 Farm Tour (网络流,最小费用最大流)
POJ 2135 Farm Tour (网络流,最小费用最大流) Description When FJ's friends visit him on the farm, he likes to sh ...
- Django通过中间件实现登录验证demo
前提:中间件版的登录验证需要依靠session,所以数据库中要有django_session表. from django.conf.urls import url from django.contri ...
- MyEclipse创建WebService服务端和客户端
1.新建立一个javaWeb项目,一个java类,如图: 2.接下来我们就要将项目中的TestService的这个类生成WebService服务端,选择new Web Service,如图: Next ...
- 1.Unix,Linux起源与编译原理
一.UNIX操作系统 作者:丹尼斯.里奇,肯.汤普逊 版权:贝尔实验室 时间:1971 特点:多用户,多任务(多进程),多CPU(多种CPU架构),高安全,高可靠,高性能,高稳定 应用:构 ...
- Spark记录-Scala变量/访问修饰符/运算符
变量是保存存储值的内存位置的名称.这意味着当创建变量时,可以在内存中保留一些空间. 根据变量的数据类型,编译器分配内存并决定可以存储在预留内存中的内容.因此,通过为变量分配不同的数据类型,可以在这些变 ...
- bzoj千题计划255:bzoj3572: [Hnoi2014]世界树
http://www.lydsy.com/JudgeOnline/problem.php?id=3572 明显需要构造虚树 点属于谁管理分三种情况: 1.属于虚树的点 2.在虚树上的边上的点 3.既不 ...