可以在*https://baseaddress/.well-known/openid-configuration*找到发现文档.它包含有关IdentityServer的端点,密钥材料和功能的信息. 默认情况下,所有信息都包含在发现文档中,但通过使用配置选项,您可以隐藏各个部分,例如: services.AddIdentityServer(options => { options.Discovery.ShowIdentityScopes = false; options.Discovery.Sho…
IssuerUri 设置将在发现文档和已颁发的JWT令牌中显示的颁发者名称.建议不要设置此属性,该属性从客户端使用的主机名中推断颁发者名称. PublicOrigin 此服务器实例的来源,例如https://myorigin.com.如果未设置,则从请求推断出原始名称. 61.1 端点(Endpoints) 允许启用/禁用各个端点,例如令牌,授权,用户信息等. 默认情况下,所有端点都已启用,但您可以通过禁用不需要的端点来锁定服务器. 61.2 发现(Discovery) 允许启用/禁用发现文档的…
此类建模API资源. Enabled 指示此资源是否已启用且可以请求.默认为true. Name API的唯一名称.此值用于内省身份验证,并将添加到传出访问令牌的受众. DisplayName 该值可以在例如同意屏幕上使用. Description 该值可以在例如同意屏幕上使用. ApiSecrets API密钥用于内省端点.API可以使用API​​名称和密钥进行内省验证. UserClaims 应包含在访问令牌中的关联用户声明类型的列表. Scopes API必须至少有一个范围.每个范围可以有…
此类为身份资源建模. Enabled 指示此资源是否已启用且可以请求.默认为true. Name 标识资源的唯一名称.这是客户端将用于授权请求中的scope参数的值. DisplayName 该值将用于例如同意屏幕上. Description 该值将用于例如同意屏幕上. Required 指定用户是否可以在同意屏幕上取消选择范围(如果同意屏幕要实现此类功能).默认为false. Emphasize 指定同意屏幕是否会强调此范围(如果同意屏幕要实现此功能).将此设置用于敏感或重要范围.默认为fal…
第38章 刷新令牌 由于访问令牌的生命周期有限,因此刷新令牌允许在没有用户交互的情况下请求新的访问令牌. 以下流程支持刷新令牌:授权代码,混合和资源所有者密码凭据流.需要明确授权客户端通过设置AllowOfflineAccess来请求刷新令牌true. 38.1 其他客户端设置 AbsoluteRefreshTokenLifetime 刷新令牌的最长生命周期(秒).默认为2592000秒/ 30天.零允许刷新令牌,当仅在SlidingRefreshTokenLifetime传递后使用时过期.Re…
OAuth 2.0为令牌端点定义了标准授权类型,例如password,authorization_code和refresh_token.扩展授权是一种添加对非标准令牌颁发方案(如令牌转换,委派或自定义凭据)的支持的方法. 您可以通过实现IExtensionGrantValidator接口添加对其他授权类型的支持: public interface IExtensionGrantValidator { /// <summary> /// Handles the custom grant requ…
IdentityServer 默认以JWT(JSON Web令牌)格式发出访问令牌. 今天的每个相关平台都支持验证JWT令牌,这里可以找到一个很好的JWT库列表.热门库例如: ASP.NET Core的JWT bearer authentication handler Katana的JWT bearer authentication middleware Katana的IdentityServer authentication middleware NodeJS的jsonwebtoken 保护基…
为IdentityServer中的配置和操作数据扩展点提供了基于EntityFramework的实现.EntityFramework的使用允许任何EF支持的数据库与此库一起使用. 这个库的仓库位于这里,NuGet包就在这里. 此库提供的功能分为两个主要区域:配置存储和操作存储支持.根据托管应用程序的需要,这两个不同的区域可以独立使用或一起使用. 62.1 配置存储支持客户端,资源和CORS设置 如果希望从EF支持的数据库加载客户端,标识资源,API资源或CORS数据(而不是使用内存配置),则可以…
IdentityServer通常在创建令牌或处理对userinfo或内省端点的请求时需要有关用户的身份信息.默认情况下,IdentityServer仅具有身份验证cookie中的声明,以便为此身份数据进行绘制. 将用户所需的所有可能声明放入cookie中是不切实际的,因此IdentityServer定义了一个可扩展点,允许根据用户需要动态加载声明.这个可扩展点是IProfileService开发人员通常可以实现此接口来访问包含用户身份数据的自定义数据库或API. 58.1 IProfileSer…
访问令牌有两种形式 - 自包含或引用. JWT令牌将是一个自包含的访问令牌 - 它是一个带有声明和过期的受保护数据结构.一旦API了解了密钥材料,它就可以验证自包含的令牌,而无需与发行者进行通信.这使得JWT难以撤销.它们将一直有效,直到它们过期. 使用引用令牌时 - IdentityServer会将令牌的内容存储在数据存储中,并且只会将此令牌的唯一标识符发回给客户端.然后,接收此引用的API必须打开与IdentityServer的反向通道通信以验证令牌. 您可以使用以下设置切换客户端的令牌类型…
在某些情况下,客户端需要使用身份服务器进行身份验证,例如 在令牌端点请求令牌的机密应用程序(也称为客户端) API在内省端点验证引用令牌 为此,您可以将秘密列表分配给客户端或API资源. 秘密解析和验证是身份服务器中的可扩展点,开箱即用它支持共享机密以及通过基本身份验证头或POST主体传输共享机密. 35.1 创建共享密钥 以下代码设置散列共享密钥: var secret = new Secret("secret".Sha256()); 现在可以将此秘密分配给Client或ApiRes…
授权类型是指定客户端如何与IdentityServer交互的方式.OpenID Connect和OAuth2.0规范定义了以下授权类型: Implicit Authorization code Hybrid Client credentials Resource owner password Device flow Refresh tokens Extension grants 你可以在Client的配置中用AllowedGrantTypes 来指定授权类型. 一个客户端可以指定不止一种授权类型…
在授权请求期间,如果IdentityServer需要用户同意,则浏览器将被重定向到同意页面. 同意用于允许最终用户授予客户端对资源(身份或API)的访问权限.这通常仅对第三方客户端是必需的,并且可以在客户端设置上按客户端启用/禁用. 28.1 确认页 为了让用户同意,托管应用程序必须提供同意页面.该快速入门UI有一个批准页面的基本实现. 同意页面通常呈现当前用户的显示名称,请求访问的客户端的显示名称,客户端的徽标,有关客户端的更多信息的链接以及客户端请求访问的资源列表.允许用户表明他们的同意应该…
通用架构是所谓的联合网关.在此方法中,IdentityServer充当一个或多个外部身份提供商的网关. 该架构具有以下优点: 您的应用程序只需要了解一个令牌服务(网关),并且屏蔽了有关连接到外部提供程序的所有详细信息.这也意味着您可以添加或更改这些外部提供程序,而无需更新您的应用程序. 您控制网关(而不是某些外部服务提供商) - 这意味着您可以对其进行任何更改,并保护您的应用程序免受外部提供程序可能对其自己的服务所做的更改. 大多数外部提供商仅支持一组固定的声明和声明类型 - 中间有一个网关允许…
联合注销是指用户使用外部身份提供程序登录IdentityServer,然后用户通过IdentityServer未知的工作流程注销该外部身份提供程序的情况.当用户注销时,对IdentityServer进行通知将非常有用,这样它就可以将用户从IdentityServer和使用IdentityServer的所有应用程序中签出. 并非所有外部身份提供商都支持联合注销,但那些提供的机制将提供通知客户端用户已注销的机制.此通知通常以<iframe>来自外部身份提供商的"已注销"页面的请…
客户端表示可以从您的身份服务器请求令牌的应用程序. 详细信息各不相同,但您通常会为客户端定义以下常用设置: 唯一的客户ID 如果需要的秘密 允许与令牌服务的交互(称为授权类型) 身份和/或访问令牌发送到的网络位置(称为重定向URI) 允许客户端访问的范围列表(也称为资源) 注意 在运行时,通过实现来检索客户端IClientStore.这允许从任意数据源(如配置文件或数据库)加载它们.对于本文档,我们将使用客户端存储的内存版本.您可以通过ConfigureServices的AddInMemoryC…
您通常在系统中定义的第一件事是您要保护的资源.这可能是您的用户的身份信息,如个人资料数据或电子邮件地址,或访问API. 注意 您可以使用C#对象模型定义资源 - 或从数据存储加载它们.IResourceStore的一个实现处理这些低级细节.对于本文档,我们使用内存实现. 19.1 定义身份资源 身份资源是用户的用户ID,名称或电子邮件地址等数据.标识资源具有唯一名称,您可以为其分配任意声明类型.然后,这些声明将包含在用户的身份令牌中.客户端将使用该scope参数来请求访问标识资源. OpenID…
欢迎来到IdentityServer4 第一部分 简介 第1章 背景 第2章 术语 第3章 支持和规范 第4章 打包和构建 第5章 支持和咨询选项 第6章 演示服务器和测试 第7章 贡献 第二部分 快速入门 第8章 概述 第9章 使用客户端凭据保护API 第10章 使用密码保护API 第11章 使用OpenID Connect添加用户身份验证 第12章 添加对外部认证的支持 第13章 切换到混合流并添加API访问 第14章 添加JavaScript客户端 第15章 使用EntityFramewo…
第65章 博客帖子 65.1 团队帖子 65.1.1 2019 IdentityServer中的范围和声明设计 尝试使用IdentityServer4的设备流程 OAuth2中隐含流的状态 另一种保护SPA的方法(使用ASP.NET Core,OpenID Connect,OAuth 2.0和ProxyKit ASP.NET核心中的自动OAuth 2.0令牌管理 加密IdentityServer4中的身份令牌 65.1.2 2018 IdentityServer4更新 IdentityServe…
IdentityServer旨在实现可扩展性,其中一个可扩展点是用于IdentityServer所需数据的存储机制.本快速入门展示了如何配置IdentityServer以使用EntityFramework Core(EF)作为此数据的存储机制(而不是使用我们迄今为止使用的内存中实现). 注意 除了手动配置EF支持外,还有一个IdentityServer模板可用于创建具有EF支持的新项目.使用创建它.有关更多信息,请参见此处dotnet new is4ef 15.1 IdentityServer4…
OAuth 2.0资源所有者密码授权允许客户端向令牌服务发送用户名和密码,并获取代表该用户的访问令牌. 除了无法承载浏览器的旧应用程序之外,规范通常建议不要使用资源所有者密码授予.一般来说,当您要对用户进行身份验证并请求访问令牌时,使用其中一个交互式OpenID Connect流程通常要好得多. 然而,这个授权类型允许我们在 IdentityServer 快速入门中引入 用户 的概念,这是我们要展示它的原因. 10.1 添加用户 就像基于内存存储的资源(即 范围 Scopes)和客户端一样,对于…
IdentityServer是中间件和服务的组合.所有配置都在您的启动类中完成. 18.1 配置服务 您可以通过调用以下方法将IdentityServer服务添加到DI系统: public void ConfigureServices(IServiceCollection services) { var builder = services.AddIdentityServer(); } 您可以选择将选项传入此调用.有关选项的详细信息,请参见此 这将返回一个构建器对象,该构建器对象又有许多方便的方…
发现端点可用于检索有关IdentityServer的元数据 - 它返回发布者名称,密钥材料,支持的范围等信息.有关详细信息,请参阅规范. 发现端点可通过/.well-known/openid-configuration相对于基地址获得,例如: https://demo.identityserver.io/.well-known/openid-configuration 注意 您可以使用IdentityModel客户端库以编程方式从.NET代码访问发现端点.有关更多信息,请查看IdentityMo…
规范.文档和对象模型等都使用特定的术语来表述. 2.1 IdentityServer IdentityServer是OpenID Connect提供程序 - 它实现OpenID Connect和OAuth 2.0协议. 对于相同的角色,不同的文献将使用不同的术语 -- 你可能也发现了安全令牌服务(Security Token Service),身份提供程序(Identity Provider),授权服务器(Authorization Server),IP-STS 等. 但它们完全相同:一种向客户…
结束会话端点可用于触发单点注销(请参阅规范). 要使用结束会话端点,客户端应用程序会将用户的浏览器重定向到结束会话URL.用户在会话期间通过浏览器登录的所有应用程序都可以参与注销. 注意 终端会话端点的URL可通过发现端点(discovery endpoint)获得. 53.1 Parameters id_token_hint 当用户被重定向到端点时,系统会提示他们是否真的想要注销.发送从身份验证收到的原始id_token的客户端可以绕过此提示.这是作为查询的字符串参数传递的id_token_h…
您可以向托管IdentityServer4的应用程序添加更多API端点. 您通常希望通过它们所托管的IdentityServer实例来保护这些API.这不是问题.只需将令牌验证处理程序添加到主机(请参阅此处): public void ConfigureServices(IServiceCollection services) { services.AddMvc(); // details omitted services.AddIdentityServer(); services.AddAut…
快速入门介绍了使用IdentityServer保护API的最基本方案. 我们将定义一个API和一个想要访问它的客户端. 客户端将通过提供ClientCredentials在IdentityServer请求访问令牌,ClientCredentials充当客户端和IdentityServer都知道的秘密,并且它将使用该令牌来访问API. 9.1设置ASP.NET核心应用程序 首先为应用程序创建一个目录 - 然后使用我们的模板创建一个包含基本IdentityServer设置的ASP.NET Core应…
我们为IdentityServer提供了多种免费和商业支持和咨询选项. 5.1 免费支持 免费支持是基于社区的,并使用公共论坛 5.1.1 StackOverflow StackOverflow 社区里日益增多的 IdentityServer 用户在监视着上面的问题.如果时间允许,我们也会试着尽可能多地回答这些问题. 您可以使用此Feed订阅所有IdentityServer4相关问题: https://stackoverflow.com/questions/tagged/?tagnames=id…
第66章 视频 66.1 2019 January [NDC] - 使用ASP.NET Core 2.2和3.0保护Web应用程序和API 1月[NDC] - 为基于OpenID Connect / OAuth 2的系统构建客户端 66.2 2018 26/09 [DevConf] - 现代应用程序的授权 17/01 [NDC伦敦] - ASP.NET Core v2上的IdentityServer v2 - 一个更新 17/01 [NDC London] - 实施Web应用程序和API授权(又…
以下是一些在线,远程和课堂培训选项,以了解有关ASP.NET Core Identity和IdentityServer4的更多信息. 64.1 现代应用程序的身份和访问控制(使用ASP.NET Core 2和IdentityServer4) 这是我们为期三天的旗舰课程(包括广泛的实践实验室),我们作为会议,现场和远程的一部分提供. 可在此处找到公共培训的议程和日期,请联系我们参加私人研讨会. 64.2 PluralSight课程 PluralSight有一些关于身份,ASP.NET Core和I…