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的更多相关文章

  1. win7提示“User Profile Service服务未能登录”

    注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 最近,有个同事打电话告诉我说他的用户名无法登陆到系统,提示“User Profile Service服务未能登录,无法加载用户配置文 ...

  2. win8.1 user profile service 服务登录失败

    在Win 8.1 上新建个用户后,不能登录. 出现 user profile service 服务登录失败. 无法加载用户配置文件. 网上大部分相同提示的问题是有关已有账号不能再次登陆的. 解决方式是 ...

  3. 在User Profile Service中配置AD的同步连接

    转:http://www.360sps.com/Item/ConfigureSynchronizationConnections.aspx 如果要将Active Directory.LDAP 目录和业 ...

  4. User Profile Service服务未能登录,无法登录

    不知你是否遇到这样的问题,某一天你打开PC,开机正常,可当你输入正确的密码回车,却发现Vista或Win7拒绝让你登录,提示"User Profile Service 服务未能登录.无法加载 ...

  5. NetBiosDomainNamesEnabled与SharePoint User Profile Service Application

    本文中的内容转自参考资料中的文章.   如果域的NetBios名字跟Fully Qualified Domain Name不同的话, 那么就需要开启UPA的NetBiosDomainNamesEnab ...

  6. 低功耗蓝牙ATT/GATT/Profile/Service/Characteristic规格解读

    什么是蓝牙service和characteristic?到底怎么理解蓝牙profile?ATT和GATT两者如何区分?什么又是attribute?attribute和characteristic的区别 ...

  7. User Profile Service Application 配置同步连接时,报 MOSS MA not found

    最近在试着配置"我的网站",不知什么原因在配置同步连接时报:MOSS MA not found 搜索发现,需要启动Forefront Identity Manager Servic ...

  8. 第58章 Profile Service - Identity Server 4 中文文档(v1.0.0)

    IdentityServer通常在创建令牌或处理对userinfo或内省端点的请求时需要有关用户的身份信息.默认情况下,IdentityServer仅具有身份验证cookie中的声明,以便为此身份数据 ...

  9. IdentityServer4系列之中文文档及实际项目经验分享

    0.前言 原文:http://docs.identityserver.io/en/release/声明: 1.目录一至五章节根据IdentityServer英文文档翻译而来,有些内容会根据自己的理解来 ...

随机推荐

  1. aps.net core mvc中使用session

    原因>>用session是想验证 前端输入的验证码和后端存入seesion的是否一致,也可以使用的是TempData[]. 铺垫>> 前端用GetValidateCode()方 ...

  2. JVM难学?那是因为你没认真看完这篇文章

    一:虚拟机内存图解 JAVA程序运行与虚拟机之上,运行时需要内存空间.虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理. 虚拟机管理内存数据区域划分如下图: 数据区域分类: ...

  3. 17、字符串转换整数 (atoi)

    17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...

  4. (二)阿里云ECS Linux服务器外网无法连接MySQL解决方法(报错2003- Can't connect MySQL Server on 'x.x.x.x'(10038))(自己亲身遇到的问题是防火墙的问题已经解决)

    我的服务器买的是阿里云ECS linux系统.为了更好的操作数据库,我希望可以用navicat for mysql管理我的数据库. 当我按照正常的模式去链接mysql的时候, 报错提示: - Can' ...

  5. vue+axios 前端实现的常用拦截

    一.路由拦截使用 首先在定义路由的时候就需要多添加一个自定义字段requireAuth,用于判断该路由的访问是否需要登录.如果用户已经登录,则顺利进入路由,否则就进入登录页面,路由配置如下: cons ...

  6. TS学习随笔(六)->断言

    now,我们来看一看TS里面的断言,听起来很上档次啊,其实看完你就发出惊叹,这就是断言啊 类型断言 类型断言(Type Assertion)可以用来手动指定一个值的类型 语法 <类型>值 ...

  7. Vysor破解助手for Linux and macOS

    <Vysor Pro破解助手>提供了Windows下的Vysor破解工具,为了使用Linux及macOS同学的方便,最近整理了Linux及macOS版的Vysor破解助手. Linux版V ...

  8. 测者的测试技术手册:自动的自动化框架EvoSuite集成Cobertura得到可视化的代码覆盖报告

    EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行.得到了Google和Yourkit的支持. ...

  9. Dubbo开发,利用项目模拟提供者和消费者之间的调用--初学

    开发工具:IDEA,虚拟机 VMware Workstation 预备工作:安装好zookeeper的虚拟机,电脑jdk更换为1.7,本地tomcat启动,能够访问以下页面即可进行开发 2.建立以下s ...

  10. SqlServer sa 用户登录失败的解决方法

    一.控制面板->服务->MS SQL SERVER->登录-->本地系统帐户-->重新启动MS SQL SERVER用windows验证登陆查询分析器-->执行 s ...