通用架构是所谓的联合网关.在此方法中,IdentityServer充当一个或多个外部身份提供商的网关. 该架构具有以下优点: 您的应用程序只需要了解一个令牌服务(网关),并且屏蔽了有关连接到外部提供程序的所有详细信息.这也意味着您可以添加或更改这些外部提供程序,而无需更新您的应用程序. 您控制网关(而不是某些外部服务提供商) - 这意味着您可以对其进行任何更改,并保护您的应用程序免受外部提供程序可能对其自己的服务所做的更改. 大多数外部提供商仅支持一组固定的声明和声明类型 - 中间有一个网关允许…
联合注销是指用户使用外部身份提供程序登录IdentityServer,然后用户通过IdentityServer未知的工作流程注销该外部身份提供程序的情况.当用户注销时,对IdentityServer进行通知将非常有用,这样它就可以将用户从IdentityServer和使用IdentityServer的所有应用程序中签出. 并非所有外部身份提供商都支持联合注销,但那些提供的机制将提供通知客户端用户已注销的机制.此通知通常以<iframe>来自外部身份提供商的"已注销"页面的请…
第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…
IssuerUri 设置将在发现文档和已颁发的JWT令牌中显示的颁发者名称.建议不要设置此属性,该属性从客户端使用的主机名中推断颁发者名称. PublicOrigin 此服务器实例的来源,例如https://myorigin.com.如果未设置,则从请求推断出原始名称. 61.1 端点(Endpoints) 允许启用/禁用各个端点,例如令牌,授权,用户信息等. 默认情况下,所有端点都已启用,但您可以通过禁用不需要的端点来锁定服务器. 61.2 发现(Discovery) 允许启用/禁用发现文档的…
为IdentityServer中的配置和操作数据扩展点提供了基于EntityFramework的实现.EntityFramework的使用允许任何EF支持的数据库与此库一起使用. 这个库的仓库位于这里,NuGet包就在这里. 此库提供的功能分为两个主要区域:配置存储和操作存储支持.根据托管应用程序的需要,这两个不同的区域可以独立使用或一起使用. 62.1 配置存储支持客户端,资源和CORS设置 如果希望从EF支持的数据库加载客户端,标识资源,API资源或CORS数据(而不是使用内存配置),则可以…
IdentityServer通常在创建令牌或处理对userinfo或内省端点的请求时需要有关用户的身份信息.默认情况下,IdentityServer仅具有身份验证cookie中的声明,以便为此身份数据进行绘制. 将用户所需的所有可能声明放入cookie中是不切实际的,因此IdentityServer定义了一个可扩展点,允许根据用户需要动态加载声明.这个可扩展点是IProfileService开发人员通常可以实现此接口来访问包含用户身份数据的自定义数据库或API. 58.1 IProfileSer…
此类建模API资源. Enabled 指示此资源是否已启用且可以请求.默认为true. Name API的唯一名称.此值用于内省身份验证,并将添加到传出访问令牌的受众. DisplayName 该值可以在例如同意屏幕上使用. Description 该值可以在例如同意屏幕上使用. ApiSecrets API密钥用于内省端点.API可以使用API​​名称和密钥进行内省验证. UserClaims 应包含在访问令牌中的关联用户声明类型的列表. Scopes API必须至少有一个范围.每个范围可以有…
此类为身份资源建模. Enabled 指示此资源是否已启用且可以请求.默认为true. Name 标识资源的唯一名称.这是客户端将用于授权请求中的scope参数的值. DisplayName 该值将用于例如同意屏幕上. Description 该值将用于例如同意屏幕上. Required 指定用户是否可以在同意屏幕上取消选择范围(如果同意屏幕要实现此类功能).默认为false. Emphasize 指定同意屏幕是否会强调此范围(如果同意屏幕要实现此功能).将此设置用于敏感或重要范围.默认为fal…
可以在*https://baseaddress/.well-known/openid-configuration*找到发现文档.它包含有关IdentityServer的端点,密钥材料和功能的信息. 默认情况下,所有信息都包含在发现文档中,但通过使用配置选项,您可以隐藏各个部分,例如: services.AddIdentityServer(options => { options.Discovery.ShowIdentityScopes = false; options.Discovery.Sho…
访问令牌有两种形式 - 自包含或引用. 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 默认以JWT(JSON Web令牌)格式发出访问令牌. 今天的每个相关平台都支持验证JWT令牌,这里可以找到一个很好的JWT库列表.热门库例如: ASP.NET Core的JWT bearer authentication handler Katana的JWT bearer authentication middleware Katana的IdentityServer authentication middleware NodeJS的jsonwebtoken 保护基…
在授权请求期间,如果IdentityServer需要用户同意,则浏览器将被重定向到同意页面. 同意用于允许最终用户授予客户端对资源(身份或API)的访问权限.这通常仅对第三方客户端是必需的,并且可以在客户端设置上按客户端启用/禁用. 28.1 确认页 为了让用户同意,托管应用程序必须提供同意页面.该快速入门UI有一个批准页面的基本实现. 同意页面通常呈现当前用户的显示名称,请求访问的客户端的显示名称,客户端的徽标,有关客户端的更多信息的链接以及客户端请求访问的资源列表.允许用户表明他们的同意应该…
客户端表示可以从您的身份服务器请求令牌的应用程序. 详细信息各不相同,但您通常会为客户端定义以下常用设置: 唯一的客户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…
IdentityServer旨在实现可扩展性,其中一个可扩展点是用于IdentityServer所需数据的存储机制.本快速入门展示了如何配置IdentityServer以使用EntityFramework Core(EF)作为此数据的存储机制(而不是使用我们迄今为止使用的内存中实现). 注意 除了手动配置EF支持外,还有一个IdentityServer模板可用于创建具有EF支持的新项目.使用创建它.有关更多信息,请参见此处dotnet new is4ef 15.1 IdentityServer4…
OAuth 2.0资源所有者密码授权允许客户端向令牌服务发送用户名和密码,并获取代表该用户的访问令牌. 除了无法承载浏览器的旧应用程序之外,规范通常建议不要使用资源所有者密码授予.一般来说,当您要对用户进行身份验证并请求访问令牌时,使用其中一个交互式OpenID Connect流程通常要好得多. 然而,这个授权类型允许我们在 IdentityServer 快速入门中引入 用户 的概念,这是我们要展示它的原因. 10.1 添加用户 就像基于内存存储的资源(即 范围 Scopes)和客户端一样,对于…
第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…
欢迎来到IdentityServer4 欢迎IdentityServer4 IdentityServer4是ASP.NET Core 2的OpenID Connect和OAuth 2.0框架. 它可以在您的应用程序中启用以下功能: 身份验证服务 适用于所有应用程序(Web,本机,移动设备,服务)的集中登录逻辑和工作流程.IdentityServer是OpenID Connect 的官方认证实现. 单点登录/注销 在多种应用程序类型上单点登录(和退出). API的访问控制 为各种类型的客户端发出A…
规范.文档和对象模型等都使用特定的术语来表述. 2.1 IdentityServer IdentityServer是OpenID Connect提供程序 - 它实现OpenID Connect和OAuth 2.0协议. 对于相同的角色,不同的文献将使用不同的术语 -- 你可能也发现了安全令牌服务(Security Token Service),身份提供程序(Identity Provider),授权服务器(Authorization Server),IP-STS 等. 但它们完全相同:一种向客户…
第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…
提供了基于ASP.NET身份的实现,用于管理IdentityServer用户的身份数据库.此实现是IdentityServer中的扩展点,以便为用户加载身份数据以将声明发送到令牌. 这个支持的仓储位于此处,NuGet包就在这里. 要使用此库,请正常配置ASP.NET Identity.然后在调用AddIdentityServer后使用AddAspNetIdentity扩展方法: public void ConfigureServices(IServiceCollection services)…
此端点允许撤消访问令牌(仅限引用令牌)和刷新令牌.它实现了令牌撤销规范(RFC 7009). token 要撤销的令牌(必填) token_type_hint access_token或refresh_token(可选) 示例 POST /connect/revocation HTTP/1.1 Host: server.example.com Content-Type: application/x-www-form-urlencoded Authorization: Basic czZCaGRS…
第41章 CORS IdentityServer中的许多端点将通过基于JavaScript的客户端的Ajax调用进行访问.鉴于IdentityServer最有可能托管在与这些客户端不同的源上,这意味着需要配置跨源资源共享(CORS). 41.1 基于客户端的CORS配置 配置CORS的一种方法是在客户端配置上使用AllowedCorsOrigins该集合.只需将客户端的原点添加到集合中,IdentityServer中的默认配置将查询这些值以允许来自源的跨源调用. 注意 配置CORS时,请务必使用…
当用户注销 IdentityServer并且他们使用外部身份提供程序登录时,可能会将其重定向到注销外部提供程序.并非所有外部提供商都支持注销,因为它取决于它们支持的协议和功能. 要检测是否必须将用户重定向到外部身份提供程序以进行注销通常是通过使用idp在IdentityServer中发布到cookie中的声明来完成的.设置到此声明中的值是AuthenticationScheme相应的身份验证中间件.在签出时,咨询此声明以了解是否需要外部签出. 由于正常注销工作流程已经需要清理和状态管理,因此将用…
注销IdentityServer就像删除身份验证cookie一样简单,但是为了完成联合注销,我们必须考虑将用户从客户端应用程序(甚至可能是上游身份提供者)中签名. 24.1 删除认证 要删除身份验证cookie,只需使用HttpContext扩展方法SignOutAsync即可.您需要传递使用的方案(IdentityServerConstants.DefaultCookieAuthenticationScheme除非您已更改,否则提供此方案): await HttpContext.SignOut…