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定义了两个scopeScopes ={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这个扩展点来加载(也就是可以加载一些我们自定义的声明)。

转载于:https://www.cnblogs.com/pangjianxin/p/9278336.html

IdentityServer4【Topic】之定义资源相关推荐

  1. IdentityServer Topics(2)- 定义资源

    原文:IdentityServer Topics(2)- 定义资源 您通常在系统设计中的第一件事就是您要保护的资源. 这可能是您的用户的身份信息,如个人资料数据或电子邮件地址,或访问API. 您可以使 ...

  2. c#自定义控件资源释放问题_定义资源

    c#自定义控件资源释放问题 在Fielding的论文中 ,资源描述为: "可以命名的任何信息"--"文档或图像,临时服务(例如,"洛杉矶今天的天气") ...

  3. Sentinel采用SphO方式定义资源,报错:The order of entry exit can‘t be paired with the order of entry

    (1)问题描述 在搭建sentinel工程的时候,采用SphO方式手动定义资源,启动工程后,访问资源,发现报错,报错内容大致如下: o.s.web.servlet.HandlerExecutionCh ...

  4. CICS定义资源-01

    CICS定义PROG和TRANS CEDA用于定义和安装CICS所用到的资源 定义需要的资源 CEDA DEF PROG(F49TEST) GROUP(TESTGP) CEDA DEF TRANS(T ...

  5. php-fpm定义成集群资源时报错解决方法

    这是我在实验中碰到的问题,我们在定义php-fpm为资源的时候,用php程序包自带的脚本会报错. 笔者花了很多时间尝试了各种办法,最后找到了一位网友写的脚本,可以解决. 脚本如下: #!/bin/sh ...

  6. Android 中定义图片的资源文件

    ---恢复内容开始--- Android中定义图片的Id数组可以在java代码中直接通过new定义,之后使用,还有一种方法是在xml资源文件中直接定义,然后再java代码中通过函数可以获取xml代码中 ...

  7. 【Android】Android 中定义图片的资源文件

    Android中定义图片的Id数组可以在java代码中直接通过new定义,之后使用,还有一种方法是在xml资源文件中直接定义,然后再java代码中通过函数可以获取xml代码中定义的资源文件.当然第二中 ...

  8. Terraform 基础 定义阿里云资源 VPC、安全组

    provider里面提供了资源,接下来就开始定义阿里云的资源了.我们将阿里云的插件也就是provider安装好了,接下来就是调用里面的资源. 在terraform里面最重要的就是资源,资源主要来自pr ...

  9. wpf资源的定义与使用(String类型)

    wpf中基本上每个标签都有一个Resource属性,这个就是资源属性 但是我们一般是在window标签里面定义资源,因为资源就可以供所有标签使用了 1.定义资源(String类型) <Windo ...

  10. Sentinel:资源与规则定义 | Spring Cloud 20

    一.Sentinel 的使用 Sentinel 的使用可以分为两个部分: 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / S ...

最新文章

  1. 非线性方程组求解Matlab实现 (多元牛顿方法、Broyden方法、Broyden方法2)
  2. 多核学习在图像分类中的应用
  3. 旅行者 问题_门槛项目:没有旅行者回到他的原籍城市。
  4. java map 值排序_使用Java8 Stream API对Map类型按照键或值进行排序
  5. 东软 软件工程1 软件危机 软件工程 软件生命周期
  6. 关于swift中的懒加载
  7. 不支持所上传的文件格式。请确认选择的文件无误。_职场人必备!如何把PDF文件转换成word文档?...
  8. Python对Excel的操作(openpyxl)
  9. Oracle 向上递归、向下递归
  10. python3内存分析_调试和分析 - tracemalloc —- 跟踪内存分配 - 《Python 3.7 标准库》 - 书栈网 · BookStack...
  11. GoDaddy域名转出教程 - 解锁、获取转移码、快速确认转出
  12. JTAG/C2 接口定义
  13. EXCEL快速提取中英文、数字的4个方法,总有一个适合你!
  14. redux的原理、工作流程及其应用
  15. ntoskrnl.exe 占用80端口 apache 无法启动
  16. 5 分钟,使用内网穿透快速实现远程手机桌面!
  17. 威斯康星大学硕士计算机科学,威斯康星大学麦迪逊分校计算机科学理学硕士研究生申请要求及申请材料要求清单...
  18. 程序员在上海税前12000的工资,真实发到手能拿到多少?
  19. Charles打开macOS proxy无法上网
  20. Orthanc的REST API — Orthanc Book文档

热门文章

  1. 剖析HotSpot的Launcher
  2. 【渝粤教育】国家开放大学2018年春季 0630-22T环境法学 参考试题
  3. 【渝粤题库】陕西师范大学500009 微机原理
  4. 【sklearn第六讲】特征提取(下)
  5. Directx教程(28) 简单的光照模型(7)
  6. 第三次作业 词频统计
  7. android:windowSoftInputMode属性;界面关闭后软键盘不隐藏的解决方法;
  8. [转]在一个工程中添加别的工程的中已创建好的对话框资源。
  9. P5444 [APIO2019]奇怪装置
  10. C#继承(初始化基类,重写,重载)