IdentityServer4【Reference】之Profile Service
Profile Service
当创建令牌或者请求像Userinfo这种端点时,IdentityServer通常会需要用户的标识信息(identity information),默认情况下,IdentityServer只能从认证(authentication)Cookie中保存的claims中获取这些信息。
将用户的所有可用的信息都保存到Cookie中很显然是不现实的,也是一种不好的实践,所以,IdentityServer定义了一个可扩展的点,这个点(接口)允许动态的加载用户的Claim,这个点(接口)就是IProfileService。开发人员通常实现此接口来访问包含用户数据(claims)的自定义数据库或API。
IProfileService APIs
GetProfileDataAsync
开发者如果实现该接口方法,这个方法应该用来加载用户的claims。这个方法需要一个ProfileDataRequestContext实例作为参数。
IsActiveAsync
开发者如果实现该接口方法,这个方法用来指示当前用户是否能够获取到token,它需要一个IsActiveContext的实例作为参数
ProfileDataRequestContext
它为用户的声明(claims)建模,是用户声明的媒介物(承载体),它包含了以下属性:
Subject
ClaimsPrincipal类型,用来表示用户。
Client
Client类型,表示客户端(第三方)。
RequestedClaimTypes
IEnumerable<string>类型,用来表示请求的Claims类型。
Caller
string类型,用来表示被请求的Claims中上下文(Context)的标识符(例如IdentityToken,AccessToken,用户端点(userinfo endpoint)),IdentityServerConstants.ProfileDataCallers这个静态类声明的常量中包含了关于这方面的信息。
IssuedClaims
List<Claim>类型,这个列表是一个公共的属性,将会被返回,由自定义的IProfileService 实现(中的方法)进行填充。
AddRequestedClaims
它作为ProfileDataRequestContext 的扩展方法,用来填充IssedClaims这个列表属性,但是会首先利用RequestedClaimTypes这个列表属性里面的值过滤一下,也就是说会根据/基于RequestedClaimTypes里面的值返回相应的值。
Requested scopes and claims mapping 请求的scopes和声明之间的映射
在客户端的Scopes中声明的关于用户的信息会被放到token中返回到客户端。GetProfileDataAsync方法负责根据ProfileDataRequestContext中的RequestedClaimTypes属性来返回用户的信息。
而RequestedClaimTypes的填充(它是一个列表)是基于Resource(它为Scope进行了建模)中定义的Claims。如果请求的Scope中包含了IdentityResource,那么RequestedClaimTypes的填充是由IdentityResource中定义的Claims进行填充,如果请求的Scope中包含的是ApiResource,那么RequestedClaimTypes的填充是由ApiResource中定义的Scope进行填充的(由于默认情况如果构造ApiResource的时候没有制定Scopes这个属性的值,那么这个ApiResource内部会利用构造函数传入的name和displayname创建一个Scope)。
IsActiveContext
它建模请求已确定当前用户是否能够被允许获得令牌(token)。它包含以下属性:
Subject
ClaimsPrincipal类型,建模了当前用户,概念同ProfileDataRequestContext中的同名属性。
Client
Client类型,概念同ProfileDataRequestContext中的同名属性
Caller
String类型,概念通ProfileDataRequestContext中的同名属性
IsActive
boolean类型,它应该在IProfileService的实现中被赋值,已确定用户是否可以被允许获得token
IdentityServer4【Reference】之Profile Service的更多相关文章
- win7提示“User Profile Service服务未能登录”
注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 最近,有个同事打电话告诉我说他的用户名无法登陆到系统,提示“User Profile Service服务未能登录,无法加载用户配置文 ...
- win8.1 user profile service 服务登录失败
在Win 8.1 上新建个用户后,不能登录. 出现 user profile service 服务登录失败. 无法加载用户配置文件. 网上大部分相同提示的问题是有关已有账号不能再次登陆的. 解决方式是 ...
- 在User Profile Service中配置AD的同步连接
转:http://www.360sps.com/Item/ConfigureSynchronizationConnections.aspx 如果要将Active Directory.LDAP 目录和业 ...
- User Profile Service服务未能登录,无法登录
不知你是否遇到这样的问题,某一天你打开PC,开机正常,可当你输入正确的密码回车,却发现Vista或Win7拒绝让你登录,提示"User Profile Service 服务未能登录.无法加载 ...
- NetBiosDomainNamesEnabled与SharePoint User Profile Service Application
本文中的内容转自参考资料中的文章. 如果域的NetBios名字跟Fully Qualified Domain Name不同的话, 那么就需要开启UPA的NetBiosDomainNamesEnab ...
- 低功耗蓝牙ATT/GATT/Profile/Service/Characteristic规格解读
什么是蓝牙service和characteristic?到底怎么理解蓝牙profile?ATT和GATT两者如何区分?什么又是attribute?attribute和characteristic的区别 ...
- User Profile Service Application 配置同步连接时,报 MOSS MA not found
最近在试着配置"我的网站",不知什么原因在配置同步连接时报:MOSS MA not found 搜索发现,需要启动Forefront Identity Manager Servic ...
- 第58章 Profile Service - Identity Server 4 中文文档(v1.0.0)
IdentityServer通常在创建令牌或处理对userinfo或内省端点的请求时需要有关用户的身份信息.默认情况下,IdentityServer仅具有身份验证cookie中的声明,以便为此身份数据 ...
- IdentityServer4系列之中文文档及实际项目经验分享
0.前言 原文:http://docs.identityserver.io/en/release/声明: 1.目录一至五章节根据IdentityServer英文文档翻译而来,有些内容会根据自己的理解来 ...
随机推荐
- aps.net core mvc中使用session
原因>>用session是想验证 前端输入的验证码和后端存入seesion的是否一致,也可以使用的是TempData[]. 铺垫>> 前端用GetValidateCode()方 ...
- JVM难学?那是因为你没认真看完这篇文章
一:虚拟机内存图解 JAVA程序运行与虚拟机之上,运行时需要内存空间.虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理. 虚拟机管理内存数据区域划分如下图: 数据区域分类: ...
- 17、字符串转换整数 (atoi)
17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...
- (二)阿里云ECS Linux服务器外网无法连接MySQL解决方法(报错2003- Can't connect MySQL Server on 'x.x.x.x'(10038))(自己亲身遇到的问题是防火墙的问题已经解决)
我的服务器买的是阿里云ECS linux系统.为了更好的操作数据库,我希望可以用navicat for mysql管理我的数据库. 当我按照正常的模式去链接mysql的时候, 报错提示: - Can' ...
- vue+axios 前端实现的常用拦截
一.路由拦截使用 首先在定义路由的时候就需要多添加一个自定义字段requireAuth,用于判断该路由的访问是否需要登录.如果用户已经登录,则顺利进入路由,否则就进入登录页面,路由配置如下: cons ...
- TS学习随笔(六)->断言
now,我们来看一看TS里面的断言,听起来很上档次啊,其实看完你就发出惊叹,这就是断言啊 类型断言 类型断言(Type Assertion)可以用来手动指定一个值的类型 语法 <类型>值 ...
- Vysor破解助手for Linux and macOS
<Vysor Pro破解助手>提供了Windows下的Vysor破解工具,为了使用Linux及macOS同学的方便,最近整理了Linux及macOS版的Vysor破解助手. Linux版V ...
- 测者的测试技术手册:自动的自动化框架EvoSuite集成Cobertura得到可视化的代码覆盖报告
EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行.得到了Google和Yourkit的支持. ...
- Dubbo开发,利用项目模拟提供者和消费者之间的调用--初学
开发工具:IDEA,虚拟机 VMware Workstation 预备工作:安装好zookeeper的虚拟机,电脑jdk更换为1.7,本地tomcat启动,能够访问以下页面即可进行开发 2.建立以下s ...
- SqlServer sa 用户登录失败的解决方法
一.控制面板->服务->MS SQL SERVER->登录-->本地系统帐户-->重新启动MS SQL SERVER用windows验证登陆查询分析器-->执行 s ...