IdentityServer4【Topic】之定义资源
Defining Resources 定义资源
你在系统中通常定义的第一件事是你想要保护的资源。这可能是你的用户的身份信息,比如个人资料数据或电子邮件地址,或者访问api。
你可以通过C#对象模型(内存中的)--或者加载数据库资源(数据库中的)来定义资源。一个IResouceStore的实现来处理这些底层的细节。对于这篇文档来说我们使用的是基于内存中的实现。
Defining identity resources 定义IdentityResource
一个用户的ID、名字、邮件地址等这些信息,都可以看成是资源,有一个更好的名字是Identity resource,还有一个api resource,后面会讲。这两种都被IdentityServer4当作了资源。一个是用户范畴的,另一个是api范畴的。一个Identity resource有一个唯一的名字作为标识符,并且你可以给一个identity resource赋予任意类型的声明(claim)类型。这些声明(claim)之后会被包含在一个Identity token(ID token)中。第三方的客户端使用”scope“这个参数来请求一个identity resource。
OpenID Connect规范中制定了一些标准的identity resource。最基本的要求是你为你的用户放出一个唯一的ID,这个ID通常也叫做subject id。这个过程是通过暴露一个叫做openid的标准identity resource来完成的。
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId()
};
}
IdentityResources类(注意是复数)涵盖了规范中(上面提到的)定义了的所有范围(openid、email、profile、telephone和address)如果想要支持他们,就在方法中进行引入:
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Email(),
new IdentityResources.Profile(),
new IdentityResources.Phone(),
new IdentityResources.Address()
};
}
Defining custom identity resources 定义自定义的Identity Resource
你当然可以定义自定义的Identity Resource。通过new创建一个IdentityResource的类实例,给它一个名字和一些其他的选项比如displayname、description等等并且当这个resource被请求时定义哪些claim可以被包含进Identity token里面。
public static IEnumerable<IdentityResource> GetIdentityResources()
{
var customProfile = new IdentityResource(
name: "custom.profile",
displayName: "Custom profile",
claimTypes: new[] { "name", "email", "status" }); return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
customProfile
};
}
通过这里查看关于IdentityResource的更多信息。
Defining API resources 定义ApiResource
如果要允许第三方客户端请求access token(访问令牌)并以此访问客户端,你需要定义ApiResource(api资源),例如:
为了获得访问api的access token(访问令牌),您还需要将它们注册为一个范围(scope)。这一次,范围类型是资源:
public static IEnumerable<ApiResource> GetApis()
{
return new[]
{
//简单的API只有一个scope(下面这个代码中的scope名称就和ApiResource的名称是一样的)
new ApiResource("api1", "Some API 1"), // 扩展版本:如果你需要更多的控制
new ApiResource
{
Name = "api2", // 使用introspection endpoint的密钥
ApiSecrets =
{
new Secret("secret".Sha256())
}, // 下面的代码会在访问令牌(access token)中增加除了subject id以外其他的用户声明(claim)
UserClaims = { JwtClaimTypes.Name, JwtClaimTypes.Email }, // 这个ApiResource定义了两个scope
Scopes =
{
new Scope()
{
Name = "api2.full_access",
DisplayName = "Full access to API 2",
},
new Scope
{
Name = "api2.read_only",
DisplayName = "Read only access to API 2"
}
}
}
};
}
点击这里查看更多关于ApiResource的信息.
注意:ApiResource中定义的UesrClaims属性可以由IProfileService这个扩展点来加载(也就是可以加载一些我们自定义的声明)。
IdentityServer4【Topic】之定义资源的更多相关文章
- IdentityServer Topics(2)- 定义资源
您通常在系统设计中的第一件事就是您要保护的资源. 这可能是您的用户的身份信息,如个人资料数据或电子邮件地址,或访问API. 您可以使用C#对象模型定义资源(硬编码),或从数据存储中加载它们. IRes ...
- 第19章 定义资源 - Identity Server 4 中文文档(v1.0.0)
您通常在系统中定义的第一件事是您要保护的资源.这可能是您的用户的身份信息,如个人资料数据或电子邮件地址,或访问API. 注意 您可以使用C#对象模型定义资源 - 或从数据存储加载它们.IResourc ...
- Spring技术内幕_IOC容器载入Bean定义资源文件
转自:http://blog.csdn.net/chjttony/article/details/6259723 1.当spring的IoC容器将Bean定义的资源文件封装为Spring的Resour ...
- (3)puppet清单定义资源的语法
1.先看两个例子: a.创建一个文件 file{"/tmp/12567.txt": content => aaaaababbau, ensure => present ...
- 基于IdentityServer4的单点登录——IdentityServer
1.新建项目并添加引用 新建一个asp .net core 2.0的项目引用IdentityServer4.AspNetIdentity 2.定义资源 新建Config.cs文件,定义Api资源与Id ...
- kubernetes系列06—kubernetes资源清单定义入门
本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...
- Kubenetes 资源清单定义入门
Kubernetes 常用资源 资源 对象 工作负载型资源对象(workload): Pod Replicaset ReplicationController Deployments Stat ...
- Kubernetes学习之路(十)之资源清单定义
一.Kubernetes常用资源 以下列举的内容都是 kubernetes 中的 Object,这些对象都可以在 yaml 文件中作为一种 API 类型来配置. 类别 名称 工作负载型资源对象 Pod ...
- 在独立的文件里定义WPF资源
一.文章概述 本演示介绍怎样在单独的文件里定义WPF资源.并在须要的地方调用相关资源文件. 相关下载(代码.屏幕录像):http://pan.baidu.com/s/1sjO7StB 在线播放:htt ...
随机推荐
- Spring的AOP基于AspectJ的注解方式开发3
上上偏博客介绍了@Aspect,@Before 上篇博客介绍了spring的AOP开发的注解通知类型:@Before,@AfterThrowing,@After,@AfterReturning,@Ar ...
- C#字节数组与字符串转换
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- .Net环境下调用ProtoBuf
一.什么是ProtoBuf protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.它是一种类似于xml.json等类似作用的交互格式.由于它是一种 ...
- 自己动手写处理器之第二阶段(1)——可编程逻辑器件与PLD电路设计流程
将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第五篇,我尽量每周四篇 通过上一章的介绍,读者应该知道CPU内部有一些主要的电路,比方:译码电路.运算电路.控 ...
- C和指针 (pointers on C)——第七章:函数(上)
第七章 函数 这一章对于有一定C的基础的人有一定优秀代码风格的人来说,并非非常虐.关于stdarg宏可能有些陌生.它负责可变參数列表的定义. 总结: 新式风格和旧式风格就不要提了.八百年前的事情. 函 ...
- UVA11400-Lighting System Design(动态规划基础)
Problem UVA11400-Lighting System Design Accept: 654 Submit: 4654Time Limit: 3000 mSec Problem Descr ...
- 转://SQLNET.EXPIRE_TIME参数
DCD: Dead Connection Detection ,可以用于检测.标记僵死而没有断开会session,再由PMON进行清理,释放资源.开启DCD,只需要在服务端的sqlnet.ora文件中 ...
- mysql 使用正则表达式查询
SELECT * FROM `qq` where qq_name!='no' and qq_gender='女' and qq_location!='no' and qq_location!='' a ...
- 010_vim和python整合开发
一.vim-go使用经验总结 Official Webset: https://github.com/fatih/vim-go-tutorial :GoFmt #格式化golang代码 二. 1. 一 ...
- undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库坏块导致
本文转自 惜纷飞 大师. 模拟基表事务未提交数据库crash,undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库 ...