结束会话端点可用于触发单点注销(请参阅规范). 要使用结束会话端点,客户端应用程序会将用户的浏览器重定向到结束会话URL.用户在会话期间通过浏览器登录的所有应用程序都可以参与注销. 注意 终端会话端点的URL可通过发现端点(discovery endpoint)获得. 53.1 Parameters id_token_hint 当用户被重定向到端点时,系统会提示他们是否真的想要注销.发送从身份验证收到的原始id_token的客户端可以绕过此提示.这是作为查询的字符串参数传递的id_token_h…
设备授权端点可用于请求设备和用户代码.此端点用于启动设备流授权过程. 注意 终端会话端点的URL可通过发现端点获得. client_id 客户标识符(必填) client_secret 客户端密钥可以在帖子正文中,也可以作为基本身份验证标头.可选的. scope 一个或多个注册范围.如果未指定,将发出所有明确允许范围的标记. 示例 POST /connect/deviceauthorization client_id=client1& client_secret=secret& scope…
授权端点可用于通过浏览器请求令牌或授权码.此过程通常涉及最终用户的身份验证和可选的同意. 注意 IdentityServer支持OpenID Connect和OAuth 2.0授权请求参数的子集.有关完整列表,请参见此处. client_id 客户的标识符(必填). scope 一个或多个注册范围(必填) redirect_uri 必须与该客户端允许的重定向URI之一完全匹配(必需) response_type id_token 请求身份令牌(仅允许身份范围) token 请求访问令牌(仅允许资…
此端点允许撤消访问令牌(仅限引用令牌)和刷新令牌.它实现了令牌撤销规范(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…
内省端点是RFC 7662的实现. 它可用于验证引用令牌(如果消费者不支持适当的JWT或加密库,则可以使用JWT).内省端点需要身份验证 - 因为内省端点的客户端是API,您可以在其上配置秘密ApiResource. 示例 POST /connect/introspect Authorization: Basic xxxyyy token=<token> 成功的响应将返回状态代码200以及活动或非活动令牌: { "active": true, "sub"…
UserInfo端点可用于检索有关用户的身份信息(请参阅规范). 调用者需要发送代表用户的有效访问令牌.根据授予的范围,UserInfo端点将返回映射的声明(至少需要openid作用域). 示例 GET /connect/userinfo Authorization: Bearer <access_token> HTTP/1.1 200 OK Content-Type: application/json { "sub": "248289761001",…
令牌端点可用于以编程方式请求令牌.它支持password,authorization_code,client_credentials,refresh_token和urn:ietf:params:oauth:grant-type:device_code的类型.此外,可以扩展令牌端点以支持扩展授权类型. 注意 IdentityServer支持OpenID Connect和OAuth 2.0令牌请​​求参数的子集.有关完整列表,请参见此处. client_id 客户标识符(必填) client_sec…
发现端点可用于检索有关IdentityServer的元数据 - 它返回发布者名称,密钥材料,支持的范围等信息.有关详细信息,请参阅规范. 发现端点可通过/.well-known/openid-configuration相对于基地址获得,例如: https://demo.identityserver.io/.well-known/openid-configuration 注意 您可以使用IdentityModel客户端库以编程方式从.NET代码访问发现端点.有关更多信息,请查看IdentityMo…
ASP.NET Core有一种灵活的方式来处理外部身份验证.这涉及几个步骤. 注意 如果您使用的是ASP.NET Identity,则会隐藏许多基础技术细节.建议您还阅读Microsoft 文档并执行ASP.NET Identity 快速入门. 22.1 为外部提供者添加身份验证处理程序 与外部提供者通信所需的协议实现封装在身份验证处理程序中.一些提供商使用专有协议(例如Facebook等社交提供商),有些提供商使用标准协议,例如OpenID Connect,WS-Federation或SAML…
IssuerUri 设置将在发现文档和已颁发的JWT令牌中显示的颁发者名称.建议不要设置此属性,该属性从客户端使用的主机名中推断颁发者名称. PublicOrigin 此服务器实例的来源,例如https://myorigin.com.如果未设置,则从请求推断出原始名称. 61.1 端点(Endpoints) 允许启用/禁用各个端点,例如令牌,授权,用户信息等. 默认情况下,所有端点都已启用,但您可以通过禁用不需要的端点来锁定服务器. 61.2 发现(Discovery) 允许启用/禁用发现文档的…
IIdentityServerInteractionService接口旨在提供用户界面用于与IdentityServer通信的服务,主要与用户交互有关.它可以从依赖注入系统获得,通常作为构造函数参数注入到IdentityServer的用户界面的MVC控制器中. 59.1 IIdentityServerInteractionService APIs GetAuthorizationContextAsync 基于传递给登录或同意页面的returnUrl返回AuthorizationRequest.…
注销IdentityServer就像删除身份验证cookie一样简单,但是为了完成联合注销,我们必须考虑将用户从客户端应用程序(甚至可能是上游身份提供者)中签名. 24.1 删除认证 要删除身份验证cookie,只需使用HttpContext扩展方法SignOutAsync即可.您需要传递使用的方案(IdentityServerConstants.DefaultCookieAuthenticationScheme除非您已更改,否则提供此方案): await HttpContext.SignOut…
第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…
第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授权(又…
授权类型是指定客户端如何与IdentityServer交互的方式.OpenID Connect和OAuth2.0规范定义了以下授权类型: Implicit Authorization code Hybrid Client credentials Resource owner password Device flow Refresh tokens Extension grants 你可以在Client的配置中用AllowedGrantTypes 来指定授权类型. 一个客户端可以指定不止一种授权类型…
IdentityServer是中间件和服务的组合.所有配置都在您的启动类中完成. 18.1 配置服务 您可以通过调用以下方法将IdentityServer服务添加到DI系统: public void ConfigureServices(IServiceCollection services) { var builder = services.AddIdentityServer(); } 您可以选择将选项传入此调用.有关选项的详细信息,请参见此 这将返回一个构建器对象,该构建器对象又有许多方便的方…
OAuth 2.0资源所有者密码授权允许客户端向令牌服务发送用户名和密码,并获取代表该用户的访问令牌. 除了无法承载浏览器的旧应用程序之外,规范通常建议不要使用资源所有者密码授予.一般来说,当您要对用户进行身份验证并请求访问令牌时,使用其中一个交互式OpenID Connect流程通常要好得多. 然而,这个授权类型允许我们在 IdentityServer 快速入门中引入 用户 的概念,这是我们要展示它的原因. 10.1 添加用户 就像基于内存存储的资源(即 范围 Scopes)和客户端一样,对于…
您可以向托管IdentityServer4的应用程序添加更多API端点. 您通常希望通过它们所托管的IdentityServer实例来保护这些API.这不是问题.只需将令牌验证处理程序添加到主机(请参阅此处): public void ConfigureServices(IServiceCollection services) { services.AddMvc(); // details omitted services.AddIdentityServer(); services.AddAut…
该Client模型的OpenID Connect或OAuth 2.0 客户端-例如,本地应用,Web应用程序或基于JS的应用程序. 56.1 Basics Enabled 指定是否启用客户端.默认为true. ClientId 客户端的唯一ID ClientSecrets 客户端机密列表 - 访问令牌端点的凭据. RequireClientSecret 指定此客户端是否需要密钥才能从令牌端点请求令牌(默认为true) AllowedGrantTypes 指定允许客户端使用的授权类型.使用Gran…
第41章 CORS IdentityServer中的许多端点将通过基于JavaScript的客户端的Ajax调用进行访问.鉴于IdentityServer最有可能托管在与这些客户端不同的源上,这意味着需要配置跨源资源共享(CORS). 41.1 基于客户端的CORS配置 配置CORS的一种方法是在客户端配置上使用AllowedCorsOrigins该集合.只需将客户端的原点添加到集合中,IdentityServer中的默认配置将查询这些值以允许来自源的跨源调用. 注意 配置CORS时,请务必使用…
为了使IdentityServer能够代表用户发出令牌,该用户必须登录IdentityServer. 21.1 Cookie身份验证 使用由ASP.NET Core中的cookie身份验证处理程序管理的cookie来跟踪身份验证. IdentityServer注册了两个cookie处理程序(一个用于身份验证会话,另一个用于临时外部cookie).默认情况下使用它们,如果要手动引用它们,可以从IdentityServerConstants类(DefaultCookieAuthenticationS…
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必须至少有一个范围.每个范围可以有…
除了对OpenID Connect和OAuth 2.0的内置支持之外,IdentityServer4还允许添加对其他协议的支持. 您可以将这些附加协议端点添加为中间件或使用例如MVC控制器.在这两种情况下,您都可以访问ASP.NET Core DI系统,该系统允许重用我们的内部服务,例如访问客户端定义或密钥材料. 可以在此处找到添加WS-Federation支持的示例. 44.1 典型认证工作流程 身份验证请求通常如下所示: 身份验证请求到达协议端点 协议端点执行输入验证 重定向到登录页面,返回…
可以在*https://baseaddress/.well-known/openid-configuration*找到发现文档.它包含有关IdentityServer的端点,密钥材料和功能的信息. 默认情况下,所有信息都包含在发现文档中,但通过使用配置选项,您可以隐藏各个部分,例如: services.AddIdentityServer(options => { options.Discovery.ShowIdentityScopes = false; options.Discovery.Sho…
访问令牌有两种形式 - 自包含或引用. JWT令牌将是一个自包含的访问令牌 - 它是一个带有声明和过期的受保护数据结构.一旦API了解了密钥材料,它就可以验证自包含的令牌,而无需与发行者进行通信.这使得JWT难以撤销.它们将一直有效,直到它们过期. 使用引用令牌时 - IdentityServer会将令牌的内容存储在数据存储中,并且只会将此令牌的唯一标识符发回给客户端.然后,接收此引用的API必须打开与IdentityServer的反向通道通信以验证令牌. 您可以使用以下设置切换客户端的令牌类型…
第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…
在某些情况下,客户端需要使用身份服务器进行身份验证,例如 在令牌端点请求令牌的机密应用程序(也称为客户端) API在内省端点验证引用令牌 为此,您可以将秘密列表分配给客户端或API资源. 秘密解析和验证是身份服务器中的可扩展点,开箱即用它支持共享机密以及通过基本身份验证头或POST主体传输共享机密. 35.1 创建共享密钥 以下代码设置散列共享密钥: var secret = new Secret("secret".Sha256()); 现在可以将此秘密分配给Client或ApiRes…
日志记录是更低级别的"printf"样式 - 事件代表有关IdentityServer中某些操作的更高级别信息.事件是结构化数据,包括事件ID,成功/失败信息,类别和详细信息.这使得查询和分析它们变得容易,并提取可用于进一步处理的有用信息. 活动适用于ELK,Seq或Splunk等活动商店. 32.1 发出事件 默认情况下不会启用事件 - 但可以在ConfigureServices方法中进行全局配置,例如: services.AddIdentityServer(options =>…