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. 批量修改mac系统文件的可读写权限

    www 修改 /Users/feiwang 文件夹下的www 下的所有文件和文件的可读写权限.

  2. FaaS技术框架

    FaaS介绍 微服务(MicroService)是以专注于单一服务/功能的小型单元块为基础,利用模块化的方式组合成复杂的大型应用服务. FaaS是Function as a Service的缩写,可以 ...

  3. 用JS编写一个函数,返回数组中重复出现过的元素

    用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: , , , , , , , ]; var getRepeat = function (arr) { var obj = {}; , le ...

  4. 【代码笔记】Web-JavaScript-JavaScript JSON

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  5. 解决ViewGroup不调用onDraw()的问题

    今天在做项目的时候自定义了一个View,继承了LinearLayout,结果,里面的onDraw()方法一直无法被调用. 后来发现ViewGroup是默认不调用onDraw()方法的. 原因我们暂且不 ...

  6. Python使用Plotly绘图工具,绘制散点图、线形图

    今天在研究Plotly绘制散点图的方法 使用Python3.6 + Plotly Plotly版本2.0.0 在开始之前先说说,还需要安装库Numpy,安装方法在我的另一篇博客中有写到:https:/ ...

  7. C#基础第二天

    变量 声明的语法格式 数据类型 变量名; 常用数据类型 int  整数  值类型 double  小数  值类型 char  字符  引用类型 string 字符串 引用类型 decimal  金钱小 ...

  8. Angular的项目结构

    前面我们已经在我们想要的位置顺利的创建了Angular项目,现在我们就来看一下项目的结构吧. 下面使我们项目的整体结构,包括node的模板.src资源文件以及配置文件等. 下面是根目录文件夹内的文件用 ...

  9. HTMLCSS--案例| 超链接美化 | 模态框 | tab栏选项卡

    一.超链接美化 二.模态框 三.tab栏选项卡 -------------------------------------------- 一.超链接美化 <!DOCTYPE html> & ...

  10. jpa 联合查询方法

    public interface TaskBaseline { String getNumber(); String getTitle(); String getName(); String getP ...