设备授权端点可用于请求设备和用户代码.此端点用于启动设备流授权过程. 注意 终端会话端点的URL可通过发现端点获得. client_id 客户标识符(必填) client_secret 客户端密钥可以在帖子正文中,也可以作为基本身份验证标头.可选的. scope 一个或多个注册范围.如果未指定,将发出所有明确允许范围的标记. 示例 POST /connect/deviceauthorization client_id=client1& client_secret=secret& scope…
结束会话端点可用于触发单点注销(请参阅规范). 要使用结束会话端点,客户端应用程序会将用户的浏览器重定向到结束会话URL.用户在会话期间通过浏览器登录的所有应用程序都可以参与注销. 注意 终端会话端点的URL可通过发现端点(discovery endpoint)获得. 53.1 Parameters id_token_hint 当用户被重定向到端点时,系统会提示他们是否真的想要注销.发送从身份验证收到的原始id_token的客户端可以绕过此提示.这是作为查询的字符串参数传递的id_token_h…
OAuth 2.0设备流设备授权的客户端库是作为HttpClient扩展方法提供的. 以下代码发送设备授权请求: var client = new HttpClient(); var response = await client.RequestDeviceAuthorizationAsync(new DeviceAuthorizationRequest { Address = "https://demo.identityserver.io/connect/device_authorize&qu…
授权端点可用于通过浏览器请求令牌或授权码.此过程通常涉及最终用户的身份验证和可选的同意. 注意 IdentityServer支持OpenID Connect和OAuth 2.0授权请求参数的子集.有关完整列表,请参见此处. client_id 客户的标识符(必填). scope 一个或多个注册范围(必填) redirect_uri 必须与该客户端允许的重定向URI之一完全匹配(必需) response_type id_token 请求身份令牌(仅允许身份范围) token 请求访问令牌(仅允许资…
ASP.NET Core有一种灵活的方式来处理外部身份验证.这涉及几个步骤. 注意 如果您使用的是ASP.NET Identity,则会隐藏许多基础技术细节.建议您还阅读Microsoft 文档并执行ASP.NET Identity 快速入门. 22.1 为外部提供者添加身份验证处理程序 与外部提供者通信所需的协议实现封装在身份验证处理程序中.一些提供商使用专有协议(例如Facebook等社交提供商),有些提供商使用标准协议,例如OpenID Connect,WS-Federation或SAML…
内省端点是RFC 7662的实现. 它可用于验证引用令牌(如果消费者不支持适当的JWT或加密库,则可以使用JWT).内省端点需要身份验证 - 因为内省端点的客户端是API,您可以在其上配置秘密ApiResource. 示例 POST /connect/introspect Authorization: Basic xxxyyy token=<token> 成功的响应将返回状态代码200以及活动或非活动令牌: { "active": true, "sub"…
令牌端点可用于以编程方式请求令牌.它支持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…
此端点允许撤消访问令牌(仅限引用令牌)和刷新令牌.它实现了令牌撤销规范(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…
UserInfo端点可用于检索有关用户的身份信息(请参阅规范). 调用者需要发送代表用户的有效访问令牌.根据授予的范围,UserInfo端点将返回映射的声明(至少需要openid作用域). 示例 GET /connect/userinfo Authorization: Bearer <access_token> HTTP/1.1 200 OK Content-Type: application/json { "sub": "248289761001",…
发现端点可用于检索有关IdentityServer的元数据 - 它返回发布者名称,密钥材料,支持的范围等信息.有关详细信息,请参阅规范. 发现端点可通过/.well-known/openid-configuration相对于基地址获得,例如: https://demo.identityserver.io/.well-known/openid-configuration 注意 您可以使用IdentityModel客户端库以编程方式从.NET代码访问发现端点.有关更多信息,请查看IdentityMo…
该IDeviceFlowInteractionService接口旨在提供用户界面用于在设备流授权期间与IdentityServer通信的服务.它可以从依赖注入系统获得,通常作为构造函数参数注入到IdentityServer的用户界面的MVC控制器中. 60.1 IDeviceFlowInteractionService的APIs GetAuthorizationContextAsync 基于userCode返回DeviceFlowAuthorizationRequest传递给登录或同意页面. D…
授权类型是指定客户端如何与IdentityServer交互的方式.OpenID Connect和OAuth2.0规范定义了以下授权类型: Implicit Authorization code Hybrid Client credentials Resource owner password Device flow Refresh tokens Extension grants 你可以在Client的配置中用AllowedGrantTypes 来指定授权类型. 一个客户端可以指定不止一种授权类型…
第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…
IssuerUri 设置将在发现文档和已颁发的JWT令牌中显示的颁发者名称.建议不要设置此属性,该属性从客户端使用的主机名中推断颁发者名称. PublicOrigin 此服务器实例的来源,例如https://myorigin.com.如果未设置,则从请求推断出原始名称. 61.1 端点(Endpoints) 允许启用/禁用各个端点,例如令牌,授权,用户信息等. 默认情况下,所有端点都已启用,但您可以通过禁用不需要的端点来锁定服务器. 61.2 发现(Discovery) 允许启用/禁用发现文档的…
日志记录是更低级别的"printf"样式 - 事件代表有关IdentityServer中某些操作的更高级别信息.事件是结构化数据,包括事件ID,成功/失败信息,类别和详细信息.这使得查询和分析它们变得容易,并提取可用于进一步处理的有用信息. 活动适用于ELK,Seq或Splunk等活动商店. 32.1 发出事件 默认情况下不会启用事件 - 但可以在ConfigureServices方法中进行全局配置,例如: services.AddIdentityServer(options =>…
第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需要用户同意,则浏览器将被重定向到同意页面. 同意用于允许最终用户授予客户端对资源(身份或API)的访问权限.这通常仅对第三方客户端是必需的,并且可以在客户端设置上按客户端启用/禁用. 28.1 确认页 为了让用户同意,托管应用程序必须提供同意页面.该快速入门UI有一个批准页面的基本实现. 同意页面通常呈现当前用户的显示名称,请求访问的客户端的显示名称,客户端的徽标,有关客户端的更多信息的链接以及客户端请求访问的资源列表.允许用户表明他们的同意应该…
为了使IdentityServer能够代表用户发出令牌,该用户必须登录IdentityServer. 21.1 Cookie身份验证 使用由ASP.NET Core中的cookie身份验证处理程序管理的cookie来跟踪身份验证. IdentityServer注册了两个cookie处理程序(一个用于身份验证会话,另一个用于临时外部cookie).默认情况下使用它们,如果要手动引用它们,可以从IdentityServerConstants类(DefaultCookieAuthenticationS…
IdentityServer是中间件和服务的组合.所有配置都在您的启动类中完成. 18.1 配置服务 您可以通过调用以下方法将IdentityServer服务添加到DI系统: public void ConfigureServices(IServiceCollection services) { var builder = services.AddIdentityServer(); } 您可以选择将选项传入此调用.有关选项的详细信息,请参见此 这将返回一个构建器对象,该构建器对象又有许多方便的方…
OAuth 2.0资源所有者密码授权允许客户端向令牌服务发送用户名和密码,并获取代表该用户的访问令牌. 除了无法承载浏览器的旧应用程序之外,规范通常建议不要使用资源所有者密码授予.一般来说,当您要对用户进行身份验证并请求访问令牌时,使用其中一个交互式OpenID Connect流程通常要好得多. 然而,这个授权类型允许我们在 IdentityServer 快速入门中引入 用户 的概念,这是我们要展示它的原因. 10.1 添加用户 就像基于内存存储的资源(即 范围 Scopes)和客户端一样,对于…
规范.文档和对象模型等都使用特定的术语来表述. 2.1 IdentityServer IdentityServer是OpenID Connect提供程序 - 它实现OpenID Connect和OAuth 2.0协议. 对于相同的角色,不同的文献将使用不同的术语 -- 你可能也发现了安全令牌服务(Security Token Service),身份提供程序(Identity Provider),授权服务器(Authorization Server),IP-STS 等. 但它们完全相同:一种向客户…
为IdentityServer中的配置和操作数据扩展点提供了基于EntityFramework的实现.EntityFramework的使用允许任何EF支持的数据库与此库一起使用. 这个库的仓库位于这里,NuGet包就在这里. 此库提供的功能分为两个主要区域:配置存储和操作存储支持.根据托管应用程序的需要,这两个不同的区域可以独立使用或一起使用. 62.1 配置存储支持客户端,资源和CORS设置 如果希望从EF支持的数据库加载客户端,标识资源,API资源或CORS数据(而不是使用内存配置),则可以…
OAuth 2.0为令牌端点定义了标准授权类型,例如password,authorization_code和refresh_token.扩展授权是一种添加对非标准令牌颁发方案(如令牌转换,委派或自定义凭据)的支持的方法. 您可以通过实现IExtensionGrantValidator接口添加对其他授权类型的支持: public interface IExtensionGrantValidator { /// <summary> /// Handles the custom grant requ…
您可以向托管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…
快速入门介绍了使用IdentityServer保护API的最基本方案. 我们将定义一个API和一个想要访问它的客户端. 客户端将通过提供ClientCredentials在IdentityServer请求访问令牌,ClientCredentials充当客户端和IdentityServer都知道的秘密,并且它将使用该令牌来访问API. 9.1设置ASP.NET核心应用程序 首先为应用程序创建一个目录 - 然后使用我们的模板创建一个包含基本IdentityServer设置的ASP.NET Core应…
IIdentityServerInteractionService接口旨在提供用户界面用于与IdentityServer通信的服务,主要与用户交互有关.它可以从依赖注入系统获得,通常作为构造函数参数注入到IdentityServer的用户界面的MVC控制器中. 59.1 IIdentityServerInteractionService APIs GetAuthorizationContextAsync 基于传递给登录或同意页面的returnUrl返回AuthorizationRequest.…
此类建模API资源. Enabled 指示此资源是否已启用且可以请求.默认为true. Name API的唯一名称.此值用于内省身份验证,并将添加到传出访问令牌的受众. DisplayName 该值可以在例如同意屏幕上使用. Description 该值可以在例如同意屏幕上使用. ApiSecrets API密钥用于内省端点.API可以使用API​​名称和密钥进行内省验证. UserClaims 应包含在访问令牌中的关联用户声明类型的列表. Scopes API必须至少有一个范围.每个范围可以有…
第41章 CORS IdentityServer中的许多端点将通过基于JavaScript的客户端的Ajax调用进行访问.鉴于IdentityServer最有可能托管在与这些客户端不同的源上,这意味着需要配置跨源资源共享(CORS). 41.1 基于客户端的CORS配置 配置CORS的一种方法是在客户端配置上使用AllowedCorsOrigins该集合.只需将客户端的原点添加到集合中,IdentityServer中的默认配置将查询这些值以允许来自源的跨源调用. 注意 配置CORS时,请务必使用…
第38章 刷新令牌 由于访问令牌的生命周期有限,因此刷新令牌允许在没有用户交互的情况下请求新的访问令牌. 以下流程支持刷新令牌:授权代码,混合和资源所有者密码凭据流.需要明确授权客户端通过设置AllowOfflineAccess来请求刷新令牌true. 38.1 其他客户端设置 AbsoluteRefreshTokenLifetime 刷新令牌的最长生命周期(秒).默认为2592000秒/ 30天.零允许刷新令牌,当仅在SlidingRefreshTokenLifetime传递后使用时过期.Re…