原文:IdentityServer Topics(2)- 定义资源

您通常在系统设计中的第一件事就是您要保护的资源。 这可能是您的用户的身份信息,如个人资料数据或电子邮件地址,或访问API。

您可以使用C#对象模型定义资源(硬编码),或从数据存储中加载它们。 IResourceStore的实现处理这些低级细节。 本文使用的是in-memory的实现。

定义身份资源

身份资源也是数据,如用户ID,姓名或用户的电子邮件地址。 身份资源具有唯一的名称,您可以为其分配任意身份信息单元(比如姓名、性别、身份证号和有效期等都是身份证的身份信息单元)类型。 这些身份信息单元将被包含在用户的身份标识(Id Token)中。 客户端将使用scope参数来请求访问身份资源。

OpenID Connect规范指定了一对标准的身份资源。 最低要求是,您提供支持为您的用户颁发一个唯一的ID - 也称为subject id(sid)。 这是通过暴露称为openid的标准身份资源完成的:

public static IEnumerable<IdentityResource> GetIdentityResources()
{return new List<IdentityResource>{new IdentityResources.OpenId()};
}

IdentityResources类支持定义规范中的所有作用域(scope)(openid,email,profile,电话和地址)。 如果您想全部支持,可以将它们添加到支持的身份资源列表中:

public static IEnumerable<IdentityResource> GetIdentityResources()
{return new List<IdentityResource>{new IdentityResources.OpenId(),new IdentityResources.Email(),new IdentityResources.Profile(),new IdentityResources.Phone(),new IdentityResources.Address()};
}

定义自定义身份资源

您还可以定义自定义身份资源。 创建一个新的IdentityResource类,为其指定一个名称和一个可选的显示名称和描述,并在请求此资源时定义哪个用户身份单元应该包含在身份令牌(Id 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};
}

定义API资源

为了允许客户请求API的访问令牌,您需要定义API资源,例如:

要访问API的令牌,还需要为其注册作用域(Scope)。 这次作用域类型是Resource类型的:

public static IEnumerable<ApiResource> GetApis()
{return new[]{// simple API with a single scope (in this case the scope name is the same as the api name)new ApiResource("api1", "Some API 1"),// expanded version if more control is needednew ApiResource{Name = "api2",// secret for using introspection endpointApiSecrets ={new Secret("secret".Sha256())},// include the following using claims in access token (in addition to subject id)UserClaims = { JwtClaimTypes.Name, JwtClaimTypes.Email },// this API defines two scopesScopes ={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"}}}};
}

装载用户身份单元资源由IProfileService实现来完成。

IdentityServer Topics(2)- 定义资源相关推荐

  1. IdentityServer Topics(1)- 启动说明

    原文:IdentityServer Topics(1)- 启动说明 启动 IdentityServer的启动是中间件和服务的组合来实现的. 所有配置都在你的启动类(Startup.cs)中完成. 配置 ...

  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. IdentityServer Topics(6)- Windows身份验证

    在Windows平台上,你可以让IdentityServer使用 Windows身份验证 对用户进行身份验证. 当你使用以下类型托管运行 IdentityServer 时, Windows身份验证功能 ...

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

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

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

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

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

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

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

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

最新文章

  1. asyncdata 获取参数_载入页面初始数据(asyncData)《 Nuxt.js:异步数据 》
  2. github搜索不能用
  3. python基础教程: os.stat() 和 stat模块详解
  4. cnblogs正式启用
  5. 【Linux开发】linux设备驱动归纳总结(九):1.platform总线的设备和驱动
  6. python setupools
  7. 2017年WorkApplication牛客网线上机试题
  8. 二叉树翻转(递归 + 非递归)
  9. 分享一次生产应用无法连接Oracle数据库故障
  10. zend framework 重定向方法(render, forward, redirect)总结
  11. 阅兵奇葩服装:美军顶鸡毛掸子 伊军扮鬼妖
  12. 在java中调用python程序
  13. guide, manual, tutorial之间的区别
  14. 部署Lync For 移动设备 一
  15. 『Hammerspoon』Mac 锁屏自动开关蓝牙
  16. dynamic动态添加属性
  17. SAP与 WebService接口的配置与调用
  18. 如何删除github上的文件夹(抖机灵方法)
  19. Unity HDRP中解决抗锯齿问题
  20. 使用Aspose.Words设置word文档多倍行距

热门文章

  1. python身份运算符的语法规则_7 Python语法入门之与用户交互、运算符
  2. c java 传参数_Java和C的方法参数传递方式的比较
  3. 循环出按钮点击按钮显示按钮上面文字 vue el-button_前端学习计划之VUE学习(一)...
  4. 服务器Linux与Windows固件,Linux与windows服务器系统的区别
  5. Markdown 编辑器的使用记录 (Typora)
  6. scala学习笔记-面向对象编程之Trait
  7. 第一节:网页概述 学习目标 怎样才能学好前端
  8. python中itertools模块介绍---03
  9. ADT,Eclipse启动时在Android SDK Content Loader0%无法编译
  10. .NET简谈组件程序设计之(异步委托)