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英文文档翻译而来,有些内容会根据自己的理解来 ...
随机推荐
- Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)
Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一) 接上一篇 3. Nginx配置反向代理 3.1 cnetos 安装nginx 首先,我们需要在服务器上安装N ...
- file_get_contents('php://input') 和POST的区别
之前记得写过这2者的区别,今天看群里有个朋友也提出了怪异的问题,说是“file_get_contents('php://input')获取不到curl post请求的数据的问题”?其实这并不是所谓的& ...
- 前端面试:谈谈 JS 垃圾回收机制
摘要: 不是每个人都回答的出来... 最近看到一些面试的回顾,不少有被面试官问到谈谈JS 垃圾回收机制,说实话,面试官会问这个问题,说明他最近看到一些关于 JS 垃圾回收机制的相关的文章,为了 B 格 ...
- JavaScript 代码简洁之道
摘要: 可以说是<Clean Code>的JS代码示例了,值得参考. 原文:JavaScript 代码简洁之道 作者:缪宇 Fundebug经授权转载,版权归原作者所有. 测试代码质量的唯 ...
- CSS-蜂窝状展示区域(多个六边形)的一种实现方式
网上已经有很多关于正六边形的CSS画法,主要是利用一个矩形和前后的两个三角形组合而成. 之前在看四维图新的官网的时候,发现了一种六边形的画法,比较适合多排六边形组合成蜂窝状的展示区域(注:四维图新现在 ...
- Redis保证事务一致性,以及常用的数据结构
reids命令可以参考中文官网:http://redis.cn/commands.html 关于reids的使用,可以封装到工具类进行调用: Redis的工具类:JedisAdapter 除了数据结构 ...
- PJSUA2开发文档--第十一章 网络问题
11 网络问题 11.1 IP地址更改 请参阅wiki 处理IP地址更改.请注意,本指南使用PJSUA API作为参考. 11.2 被阻止/过滤的网络 请参阅维基百科 通过阻止或过滤的VoIP网络
- [转]QQ空间、新浪微博、腾讯微博等一键分享API链接代码
转自------ 1.新浪微博:http://service.weibo.com/share/share.php?url= count=表示是否显示当前页面被分享数量(1显示)(可选,允许为空)&am ...
- 树莓派3b+ Ubuntu 16.04 MATA系统 ssh远程登陆后修改主机名、用户密码和用户名
写在前面: 刚刚开始写博客,记录下自己的学习过程,备忘. 最近在使用树莓派做智能小车的开发,使用的是树莓派3b+,安装的是Ubuntu 16.04 MATA 系统,安装系统后需要修改主机名,登陆密码以 ...
- SQLServer修改表数据
使用SSMS数据库管理工具修改数据 修改任意一条或者多条都可以 1:打开数据库,选择数据表,右键点击->编辑所有行(如未配置,点击编辑前200行). 2.编辑需要修改的数据->编辑完成后, ...