├── .vscode └── settings.json ├── alipay.jpg ├── wechatpay.jpg ├── 第一部分 简介 ├── 第06章 演示服务器和测试.md ├── 第05章 支持和咨询选项.md ├── 第02章 术语.md ├── 第07章 贡献.md ├── 第04章 打包和构建.md ├── 第03章 支持和规范.md └── 第01章 背景.md ├── 第五部分 参考 ├── 第57章 GrantValidationResult.md ├── 第54章 身份资源.md ├── 第60章 设备流交互服务.md ├── 第63章 ASP.NET Identity 支持.md ├── 第55章 API资源.md ├── 第58章 Profile Service.md ├── 第59章 IdentityServer交互服务.md ├── 第61章 IdentityServer Options.md ├── 第56章 Client.md └── 第62章 EntityFramework支持.md ├── 第二部分 快速入门 ├── 第08章 概述.md ├── 第17章 社区快速入门和模板.md ├── 第12章 添加对外部认证的支持.md ├── 第10章 使用密码保护API.md ├── 第13章 切换到混合流并添加API访问.md ├── 第15章 使用EntityFramework Core进行配置和操作数据.md ├── 第16章 使用ASP.NET Core Identity.md ├── 第11章 使用OpenID Connect添加用户身份验证.md ├── 第09章 使用客户端凭据保护API.md └── 第14章 添加JavaScript客户端.md ├── 第三部分 主题 ├── 第45章 工具.md ├── 第37章 资源所有者密码验证(Resource Owner Password Validation).md ├── 第38章 刷新令牌.md ├── 第40章 自定义令牌请求验证和发布.md ├── 第42章 发现(discovery).md ├── 第39章 引用令牌.md ├── 第26章 联合注销.md ├── 第33章 密码学(Cryptography),密钥(Keys)和HTTPS.md ├── 第23章 Windows身份验证.md ├── 第28章 确认(Consent).md ├── 第43章 添加更多API端点.md ├── 第30章 部署.md ├── 第31章 日志.md ├── 第27章 联合网关.md ├── 第41章 CORS.md ├── 第25章 退出外部身份提供商.md ├── 第44章 添加新协议.md ├── 第24章 退出.md ├── 第21章 登录.md ├── 第20章 定义客户端.md ├── 第35章 秘密(secrets).md ├── 第19章 定义资源.md ├── 第32章 事件.md ├── 第36章 扩展授权.md ├── 第18章 启动.md ├── 第34章 授予类型.md ├── 第29章 保护API.md └── 第22章 使用外部身份提供商登录.md ├── 第四部分 端点 ├── 第46章 发现端点(Discovery Endpoint).md ├── 第52章 撤销端点(Revocation Endpoint).md ├── 第48章 UserInfo端点(UserInfo Endpoint).md ├── 第51章 内省端点(Introspection Endpoint).md ├── 第50章 设备授权端点(Device Authorization Endpoint).md ├── 第53章 结束会话端点(End Session Endpoint).md ├── 第49章 令牌端点(Token Endpoint).md └── 第47章 授权端点(Authorize Endpoint).md ├── 欢迎来到IdentityServer4.md ├── LICENSE ├── README.md └── 第六部分 其它 ├── 第64章 学习.md ├── 第66章 视频.md └── 第65章 博客帖子.md /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | } -------------------------------------------------------------------------------- /alipay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinksjay/IdentityServer4/HEAD/alipay.jpg -------------------------------------------------------------------------------- /wechatpay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinksjay/IdentityServer4/HEAD/wechatpay.jpg -------------------------------------------------------------------------------- /第一部分 简介/第06章 演示服务器和测试.md: -------------------------------------------------------------------------------- 1 | # 第06章 演示服务器和测试 2 | 3 | 您可以使用您喜欢的客户端库尝试IdentityServer4。我们在[demo.identityserver.io](https://demo.identityserver.io/)上有一个测试实例。在主页面上,您可以找到有关如何配置客户端以及如何调用API的说明。 4 | 5 | 此外,我们还有一个repo,可以运行各种IdentityServer和Web API组合(IdentityServer 3和4,ASP.NET Core和Katana)。我们使用此测试工具确保所有排列都有效。您可以通过克隆此[repo](https://github.com/IdentityServer/CrossVersionIntegrationTests)来进行测试。 6 | -------------------------------------------------------------------------------- /第五部分 参考/第57章 GrantValidationResult.md: -------------------------------------------------------------------------------- 1 | # 第57章 GrantValidationResult 2 | 该`GrantValidationResult`类模型补助确认为扩展授权和资源所有者密码授权的结果。 3 | 4 | 最常见的用法是使用身份验证(成功用例): 5 | 6 | ``` C# 7 | context.Result = new GrantValidationResult( 8 | subject: "818727", 9 | authenticationMethod: "custom", 10 | claims: optionalClaims); 11 | ``` 12 | 13 | ...或使用错误和描述(失败用例): 14 | 15 | ``` C# 16 | context.Result = new GrantValidationResult( 17 | TokenRequestErrors.InvalidGrant, 18 | "invalid custom credential"); 19 | ``` 20 | 21 | 在这两种情况下,您都可以传递将包含在令牌响应中的其他自定义值。 -------------------------------------------------------------------------------- /第五部分 参考/第54章 身份资源.md: -------------------------------------------------------------------------------- 1 | # 第54章 身份资源 2 | 此类为身份资源建模。 3 | 4 | * **`Enabled`** 5 | 指示此资源是否已启用且可以请求。默认为true。 6 | 7 | * **`Name`** 8 | 标识资源的唯一名称。这是客户端将用于授权请求中的scope参数的值。 9 | 10 | * **`DisplayName`** 11 | 该值将用于例如同意屏幕上。 12 | 13 | * **`Description`** 14 | 该值将用于例如同意屏幕上。 15 | 16 | * **`Required`** 17 | 指定用户是否可以在同意屏幕上取消选择范围(如果同意屏幕要实现此类功能)。默认为false。 18 | 19 | * **`Emphasize`** 20 | 指定同意屏幕是否会强调此范围(如果同意屏幕要实现此功能)。将此设置用于敏感或重要范围。默认为false。 21 | 22 | * **`ShowInDiscoveryDocument`** 23 | 指定此范围是否显示在发现文档中。默认为true。 24 | 25 | * **`UserClaims`** 26 | 应包含在身份令牌中的关联用户声明类型的列表。 -------------------------------------------------------------------------------- /第二部分 快速入门/第08章 概述.md: -------------------------------------------------------------------------------- 1 | # 第08章 概述 2 | 3 | 快速入门提供了各种常见IdentityServer方案的分步说明。他们从基础到复杂 - 建议您按顺序完成它们。 4 | 5 | * 将IdentityServer添加到ASP\.NET Core应用程序 6 | * 配置IdentityServer 7 | * 为各种客户发放令牌 8 | * 保护Web应用程序和API 9 | * 添加对基于EntityFramework的配置的支持 10 | * 添加对ASP\.NET身份的支持 11 | * 添加AdminUI社区版以管理用户和配置 12 | 13 | 每个快速入门都有一个参考解决方案 - 您可以 在quickstarts文件夹中的[IdentityServer4.Samples](https://github.com/IdentityServer/IdentityServer4.Samples) repo中找到代码 。 14 | 15 | ## 8.1 准备 16 | 你应该做的第一件事是安装我们的模板: 17 | 18 | ``` shell 19 | dotnet new -i IdentityServer4.Templates 20 | ``` 21 | 22 | 它们将被用作各种教程的起点。 23 | 24 | 好的 - 让我们开始吧! 25 | -------------------------------------------------------------------------------- /第三部分 主题/第45章 工具.md: -------------------------------------------------------------------------------- 1 | # 第45章 工具 2 | 该`IdentityServerTools`是为IdentityServer编写扩展代码时,你可能需要有效的内部工具的集合。要使用它,请将其注入代码,例如控制器: 3 | 4 | ``` C# 5 | public MyController(IdentityServerTools tools) 6 | { 7 | _tools = tools; 8 | } 9 | ``` 10 | 11 | 该`IssueJwtAsync`方法允许使用IdentityServer令牌创建引擎创建JWT令牌。这`IssueClientJwtAsync`是为服务器到服务器通信创建令牌的简单版本(例如,当您必须从代码中调用受IdentityServer保护的API时): 12 | 13 | ``` C# 14 | public async Task MyAction() 15 | { 16 | var token = await _tools.IssueClientJwtAsync( 17 | clientId: "client_id", 18 | lifetime: 3600, 19 | audiences: new[] { "backend.api" }); 20 | 21 | // more code 22 | } 23 | ``` 24 | -------------------------------------------------------------------------------- /第五部分 参考/第60章 设备流交互服务.md: -------------------------------------------------------------------------------- 1 | # 第60章 设备流交互服务 2 | 该`IDeviceFlowInteractionService`接口旨在提供用户界面用于在设备流授权期间与IdentityServer通信的服务。它可以从依赖注入系统获得,通常作为构造函数参数注入到IdentityServer的用户界面的MVC控制器中。 3 | 4 | ## 60.1 IDeviceFlowInteractionService的APIs 5 | * **`GetAuthorizationContextAsync`** 6 | 基于`userCode`返回`DeviceFlowAuthorizationRequest`传递给登录或同意页面。 7 | 8 | * **`DeviceFlowInteractionResult`** 9 | 完成给定的设备授权`userCode`。 10 | 11 | ## 60.2 DeviceFlowAuthorizationRequest 12 | * **`ClientId`** 13 | 发起请求的客户端标识符。 14 | 15 | * **`ScopesRequested`** 16 | 授权请求中请求的范围。 17 | 18 | ## 60.3 DeviceFlowInteractionResult 19 | * **`IsError`** 20 | 指定授权请求是否出错。 21 | 22 | * **`ErrorDescription`** 23 | 失败时的错误描述。 -------------------------------------------------------------------------------- /第四部分 端点/第46章 发现端点(Discovery Endpoint).md: -------------------------------------------------------------------------------- 1 | # 第46章 发现端点(Discovery Endpoint) 2 | 发现端点可用于检索有关IdentityServer的元数据 - 它返回发布者名称,密钥材料,支持的范围等信息。有关详细信息,请参阅[规范](https://openid.net/specs/openid-connect-discovery-1_0.html)。 3 | 4 | 发现端点可通过*/.well-known/openid-configuration*相对于基地址获得,例如: 5 | 6 | ``` 7 | https://demo.identityserver.io/.well-known/openid-configuration 8 | ``` 9 | 10 | > **注意** 11 | 您可以使用[IdentityModel](https://github.com/IdentityModel/IdentityModel2)客户端库以编程方式从.NET代码访问发现端点。有关更多信息,请查看IdentityModel[文档](https://github.com/thinksjay/IdentityModel/blob/master/%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%20%E5%8D%8F%E8%AE%AE%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BA%93/%E7%AC%AC1%E7%AB%A0%20%E5%8F%91%E7%8E%B0%E7%AB%AF%E7%82%B9(Discovery%20Endpoint).md)。 -------------------------------------------------------------------------------- /第三部分 主题/第37章 资源所有者密码验证(Resource Owner Password Validation).md: -------------------------------------------------------------------------------- 1 | # 第37章 资源所有者密码验证(Resource Owner Password Validation) 2 | 如果要使用OAuth 2.0资源所有者密码凭据授权(aka `password`),则需要实现并注册`IResourceOwnerPasswordValidator`接口: 3 | 4 | ``` C# 5 | public interface IResourceOwnerPasswordValidator 6 | { 7 | /// 8 | /// Validates the resource owner password credential 9 | /// 10 | /// The context. 11 | Task ValidateAsync(ResourceOwnerPasswordValidationContext context); 12 | } 13 | ``` 14 | 15 | 在上下文中,您将找到已解析的协议参数,如UserName和Password,以及原始请求,如果您想查看其他输入数据。 16 | 17 | 然后,您的工作是实施密码验证并相应地设置`Result`上下文。请参阅[GrantValidationResult](https://github.com/thinksjay/IdentityServer4/blob/master/%E7%AC%AC%E4%BA%94%E9%83%A8%E5%88%86%20%E5%8F%82%E8%80%83/%E7%AC%AC57%E7%AB%A0%20GrantValidationResult.md)文档。 -------------------------------------------------------------------------------- /第三部分 主题/第38章 刷新令牌.md: -------------------------------------------------------------------------------- 1 | # 第38章 刷新令牌 2 | 由于访问令牌的生命周期有限,因此刷新令牌允许在没有用户交互的情况下请求新的访问令牌。 3 | 4 | 以下流程支持刷新令牌:授权代码,混合和资源所有者密码凭据流。需要明确授权客户端通过设置`AllowOfflineAccess`来请求刷新令牌`true`。 5 | 6 | ## 38.1 其他客户端设置 7 | * **`AbsoluteRefreshTokenLifetime`** 8 | 刷新令牌的最长生命周期(秒)。默认为2592000秒/ 30天。零允许刷新令牌,当仅在*SlidingRefreshTokenLifetime*传递后使用时过期。`RefreshTokenExpiration = Sliding` 9 | 10 | * **`SlidingRefreshTokenLifetime`** 11 | 以秒为单位滑动刷新令牌的生命周期。默认为1296000秒/ 15天 12 | 13 | * **`RefreshTokenUsage`** 14 | `ReUse` 刷新令牌时,刷新令牌句柄将保持不变 15 | `OneTime` 刷新令牌时将更新刷新令牌句柄 16 | 17 | * **`RefreshTokenExpiration`** 18 | `Absolute` 刷新令牌将在固定时间点到期(由AbsoluteRefreshTokenLifetime指定) 19 | `Sliding`刷新令牌时,将刷新刷新令牌的生命周期(按SlidingRefreshTokenLifetime中指定的数量)。生命周期不会超过 20 | *AbsoluteRefreshTokenLifetime*。 21 | 22 | * **`UpdateAccessTokenClaimsOnRefresh`** 23 | 获取或设置一个值,该值指示是否应在刷新令牌请求上更新访问令牌(及其声明)。 -------------------------------------------------------------------------------- /第三部分 主题/第40章 自定义令牌请求验证和发布.md: -------------------------------------------------------------------------------- 1 | # 第40章 自定义令牌请求验证和发布 2 | 您可以在令牌端点处将自定义代码作为令牌颁发管道的一部分运行。这允许例如 3 | 4 | * 添加额外的验证逻辑 5 | * 动态地改变某些参数(例如令牌生存期) 6 | 7 | 为此,实现(并注册)`ICustomTokenRequestValidator`接口: 8 | 9 | ``` C# 10 | /// 11 | /// Allows inserting custom validation logic into token requests 12 | /// 13 | public interface ICustomTokenRequestValidator 14 | { 15 | /// 16 | /// Custom validation logic for a token request. 17 | /// 18 | /// The context. 19 | /// 20 | /// The validation result 21 | /// 22 | Task ValidateAsync(CustomTokenRequestValidationContext context); 23 | } 24 | ``` 25 | 26 | 上下文对象使您可以访问: 27 | 28 | * 添加自定义响应参数 29 | * 返回错误和错误说明 30 | * 修改请求参数,例如访问令牌生存期和类型,客户端声明和确认方法 31 | 32 | 您可以使用配置构建器上的`AddCustomTokenRequestValidator`扩展方法注册验证程序的实现。 -------------------------------------------------------------------------------- /第四部分 端点/第52章 撤销端点(Revocation Endpoint).md: -------------------------------------------------------------------------------- 1 | # 第52章 撤销端点(Revocation Endpoint) 2 | 此端点允许撤消访问令牌(仅限引用令牌)和刷新令牌。它实现了令牌撤销规范([RFC 7009](https://tools.ietf.org/html/rfc7009))。 3 | 4 | * **`token`** 5 | 要撤销的令牌(必填) 6 | 7 | * **`token_type_hint`** 8 | `access_token`或`refresh_token`(可选) 9 | 10 | 示例 11 | 12 | ``` 13 | POST /connect/revocation HTTP/1.1 14 | Host: server.example.com 15 | Content-Type: application/x-www-form-urlencoded 16 | Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW 17 | 18 | token=45ghiukldjahdnhzdauz&token_type_hint=refresh_token 19 | ``` 20 | 21 | > **注意** 22 | 您可以使用[IdentityModel](https://github.com/IdentityModel/IdentityModel2)客户端库以编程方式从.NET代码访问吊销端点。有关更多信息,请查看IdentityModel[文档](https://github.com/thinksjay/IdentityModel/blob/master/%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%20%E5%8D%8F%E8%AE%AE%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BA%93/%E7%AC%AC6%E7%AB%A0%20%E4%BB%A4%E7%89%8C%E6%92%A4%E9%94%80%E7%AB%AF%E7%82%B9(Token%20Revocation%20Endpoint).md)。 -------------------------------------------------------------------------------- /第四部分 端点/第48章 UserInfo端点(UserInfo Endpoint).md: -------------------------------------------------------------------------------- 1 | # 第48章 UserInfo端点(UserInfo Endpoint) 2 | UserInfo端点可用于检索有关用户的身份信息(请参阅[规范](http://openid.net/specs/openid-connect-core-1_0.html#UserInfo))。 3 | 4 | 调用者需要发送代表用户的有效访问令牌。根据授予的范围,UserInfo端点将返回映射的声明(至少需要*openid*作用域)。 5 | 6 | 示例 7 | 8 | ``` 9 | GET /connect/userinfo 10 | Authorization: Bearer 11 | HTTP/1.1 200 OK 12 | Content-Type: application/json 13 | 14 | { 15 | "sub": "248289761001", 16 | "name": "Bob Smith", 17 | "given_name": "Bob", 18 | "family_name": "Smith", 19 | "role": [ 20 | "user", 21 | "admin" 22 | ] 23 | } 24 | ``` 25 | 26 | > **注意** 27 | 您可以使用[IdentityModel](https://github.com/IdentityModel/IdentityModel2)客户端库以编程方式从.NET代码访问userinfo端点。有关更多信息,请查看IdentityModel[文档](https://github.com/thinksjay/IdentityModel/blob/master/%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%20%E5%8D%8F%E8%AE%AE%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BA%93/%E7%AC%AC7%E7%AB%A0%20UserInfo%E7%AB%AF%E7%82%B9(UserInfo%20Endpoint).md)。 -------------------------------------------------------------------------------- /第四部分 端点/第51章 内省端点(Introspection Endpoint).md: -------------------------------------------------------------------------------- 1 | # 第51章 内省端点(Introspection Endpoint) 2 | 内省端点是[RFC 7662](https://tools.ietf.org/html/rfc7662)的实现。 3 | 4 | 它可用于验证引用令牌(如果消费者不支持适当的JWT或加密库,则可以使用JWT)。内省端点需要身份验证 - 因为内省端点的客户端是API,您可以在其上配置秘密`ApiResource`。 5 | 6 | 示例 7 | 8 | ``` 9 | POST /connect/introspect 10 | Authorization: Basic xxxyyy 11 | 12 | token= 13 | ``` 14 | 15 | 成功的响应将返回状态代码200以及活动或非活动令牌: 16 | 17 | ``` json 18 | { 19 | "active": true, 20 | "sub": "123" 21 | } 22 | ``` 23 | 24 | 未知或过期的令牌将被标记为无效: 25 | 26 | ``` json 27 | { 28 | "active": false, 29 | } 30 | ``` 31 | 32 | 无效请求将返回400,未授权请求401。 33 | 34 | > **注意** 35 | 您可以使用[IdentityModel](https://github.com/IdentityModel/IdentityModel2)客户端库以编程方式从.NET代码访问内省端点。有关更多信息,请查看IdentityModel[文档](https://github.com/thinksjay/IdentityModel/blob/master/%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%20%E5%8D%8F%E8%AE%AE%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BA%93/%E7%AC%AC5%E7%AB%A0%20%E4%BB%A4%E7%89%8C%E8%87%AA%E7%9C%81%E7%AB%AF%E7%82%B9(Token%20Introspection%20Endpoint).md)。 -------------------------------------------------------------------------------- /第五部分 参考/第63章 ASP.NET Identity 支持.md: -------------------------------------------------------------------------------- 1 | # 第63章 ASP.NET Identity 支持 2 | 提供了基于ASP.NET身份的实现,用于管理IdentityServer用户的身份数据库。此实现是IdentityServer中的扩展点,以便为用户加载身份数据以将声明发送到令牌。 3 | 4 | 这个支持的仓储位于[此处](https://github.com/IdentityServer/IdentityServer4.AspNetIdentity/),NuGet包就在[这里](https://www.nuget.org/packages/IdentityServer4.AspNetIdentity)。 5 | 6 | 要使用此库,请正常配置ASP.NET Identity。然后在调用`AddIdentityServer`后使用`AddAspNetIdentity`扩展方法: 7 | 8 | ``` C# 9 | public void ConfigureServices(IServiceCollection services) 10 | { 11 | services.AddIdentity() 12 | .AddEntityFrameworkStores() 13 | .AddDefaultTokenProviders(); 14 | 15 | services.AddIdentityServer() 16 | .AddAspNetIdentity(); 17 | } 18 | ``` 19 | 20 | `AddAspNetIdentity`需要作为通用参数,为您的用户建模ASP.NET Identity(以及传递给AddIdentityASP.NET Identity 的同一个用户)。这将配置IdentityServer使用实现`IUserClaimsPrincipalFactory`,`IResourceOwnerPasswordValidator`和`IProfileService`的ASP.NET Identity。它还配置了一些用于IdentityServer的ASP.NET Identity选项(例如要使用的声明类型和身份验证cookie设置)。 -------------------------------------------------------------------------------- /第三部分 主题/第42章 发现(discovery).md: -------------------------------------------------------------------------------- 1 | # 第42章 发现(discovery) 2 | 可以在*https://baseaddress/.well-known/openid-configuration*找到发现文档。它包含有关IdentityServer的端点,密钥材料和功能的信息。 3 | 4 | 默认情况下,所有信息都包含在发现文档中,但通过使用配置选项,您可以隐藏各个部分,例如: 5 | 6 | ``` C# 7 | services.AddIdentityServer(options => 8 | { 9 | options.Discovery.ShowIdentityScopes = false; 10 | options.Discovery.ShowApiScopes = false; 11 | options.Discovery.ShowClaims = false; 12 | options.Discovery.ShowExtensionGrantTypes = false; 13 | }); 14 | ``` 15 | 16 | ## 42.1扩展发现 17 | 您可以向发现文档添加自定义条目,例如: 18 | 19 | ``` C# 20 | services.AddIdentityServer(options => 21 | { 22 | options.Discovery.CustomEntries.Add("my_setting", "foo"); 23 | options.Discovery.CustomEntries.Add("my_complex_setting", 24 | new 25 | { 26 | foo = "foo", 27 | bar = "bar" 28 | }); 29 | }); 30 | ``` 31 | 32 | 当您添加以~开头的自定义值时,它将扩展到IdentityServer基址以下的绝对路径,例如: 33 | 34 | ``` C# 35 | options.Discovery.CustomEntries.Add("my_custom_endpoint", "~/custom"); 36 | ``` 37 | 38 | 如果要完全控制发现(和jwks)文档的呈现,可以实现`IDiscoveryResponseGenerator 接口(或从我们的默认实现派生)。 -------------------------------------------------------------------------------- /欢迎来到IdentityServer4.md: -------------------------------------------------------------------------------- 1 | # 欢迎来到IdentityServer4 2 | 3 | **欢迎IdentityServer4** 4 | 5 |
6 | 7 |
8 | 9 | IdentityServer4是ASP\.NET Core 2的OpenID Connect和OAuth 2.0框架。 10 | 11 | 它可以在您的应用程序中启用以下功能: 12 | 13 | **身份验证服务** 14 | 适用于所有应用程序(Web,本机,移动设备,服务)的集中登录逻辑和工作流程。IdentityServer是OpenID Connect 的官方认证实现。 15 | 16 | **单点登录/注销** 17 | 在多种应用程序类型上单点登录(和退出)。 18 | 19 | **API的访问控制** 20 | 为各种类型的客户端发出API访问令牌,例如服务器到服务器,Web应用程序,SPA和本机/移动应用程序。 21 | 22 | **联合网关** 23 | 支持Azure Active Directory,Google,Facebook等外部身份提供商。这可以保护您的应用程序免受如何连接到这些外部提供商的详细信息的影响。 24 | 25 | **专注于定制** 26 | 最重要的部分 - IdentityServer的许多方面都可以根据您的需求进行定制。由于IdentityServer是一个框架而不是盒装产品或SaaS,因此您可以编写代码以使系统适应您的方案。 27 | 28 | **成熟的开源** 29 | IdentityServer使用允许的[Apache 2](https://www.apache.org/licenses/LICENSE-2.0)许可证,允许在其上构建商业产品。它也是[.NET Foundation](https://dotnetfoundation.org/)的一部分,它提供治理和法律支持。 30 | 31 | **免费和商业支持** 32 | 如果您需要帮助构建或运行您的身份平台,请告知我们。我们可以通过多种方式为您提供帮助。 -------------------------------------------------------------------------------- /第四部分 端点/第50章 设备授权端点(Device Authorization Endpoint).md: -------------------------------------------------------------------------------- 1 | # 第50章 设备授权端点(Device Authorization Endpoint) 2 | 设备授权端点可用于请求设备和用户代码。此端点用于启动设备流授权过程。 3 | 4 | > **注意** 5 | 终端会话端点的URL可通过[发现端点](https://github.com/thinksjay/IdentityServer4/blob/master/%E7%AC%AC%E4%B8%89%E9%83%A8%E5%88%86%20%E4%B8%BB%E9%A2%98/%E7%AC%AC42%E7%AB%A0%20%E5%8F%91%E7%8E%B0(discovery).md)获得。 6 | 7 | * **`client_id`** 8 | 客户标识符(必填) 9 | 10 | * **`client_secret`** 11 | 客户端密钥可以在帖子正文中,也可以作为基本身份验证标头。可选的。 12 | 13 | * **`scope`** 14 | 一个或多个注册范围。如果未指定,将发出所有明确允许范围的标记。 15 | 16 | 示例 17 | 18 | ``` 19 | POST /connect/deviceauthorization 20 | 21 | client_id=client1& 22 | client_secret=secret& 23 | scope=openid api1 24 | ``` 25 | 26 | (为了便于阅读,删除了表格编码并添加了换行符) 27 | 28 | > **注意** 29 | 您可以使用[IdentityModel](https://github.com/IdentityModel/IdentityModel2)客户端库以编程方式从.NET代码访问设备授权终结点。有关更多信息,请查看IdentityModel[文档](https://github.com/thinksjay/IdentityModel/blob/master/%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%20%E5%8D%8F%E8%AE%AE%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BA%93/%E7%AC%AC9%E7%AB%A0%20%E8%AE%BE%E5%A4%87%E6%8E%88%E6%9D%83%E7%AB%AF%E7%82%B9(Device%20Authorization%20Endpoint).md)。 -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 thinksjay 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /第一部分 简介/第05章 支持和咨询选项.md: -------------------------------------------------------------------------------- 1 | # 第05章 支持和咨询选项 2 | 3 | 我们为IdentityServer提供了多种免费和商业支持和咨询选项。 4 | 5 | ## 5.1 免费支持 6 | 免费支持是基于社区的,并使用公共论坛 7 | 8 | ### 5.1.1 StackOverflow 9 | StackOverflow 社区里日益增多的 IdentityServer 用户在监视着上面的问题。如果时间允许,我们也会试着尽可能多地回答这些问题。 10 | 11 | 您可以使用此Feed订阅所有IdentityServer4相关问题: 12 | 13 | 14 | 15 | 在提出新问题时请使用`IdentityServer4`标签 16 | 17 | ### 5.1.2 Gitter 18 | 19 | 您可以在我们的Gitter聊天室中与其他IdentityServer4用户聊天: 20 | 21 | 22 | 23 | ### 5.1.3 报告Bug 24 | 如果您认为自己发现了Bug或意外行为,请在Github 问题跟踪器上打开一个问题。我们会尽快回复您。请理解我们也有日常工作,可能太忙而无法立即回复。 25 | 26 | 你还可以在发布问题之前查看一下[贡献指南](https://github.com/IdentityServer/IdentityServer4/blob/dev/CONTRIBUTING.md)。 27 | 28 | ## 5.2 商业支持 29 | 我们正在围绕身份和访问控制架构进行咨询,指导和定制软件开发,特别是IdentityServer。请与我们[取得联系](mailto:identity@leastprivilege.com)以讨论可能的选项。 30 | 31 | ### 5.2.1 培训 32 | 我们经常围绕现代应用的身份和访问控制进行研讨会。在[这里](https://identityserver.io/training)查看议程和即将公布的日期 。我们也可以在贵公司私下进行培训。 联系我们以进行现场培训。 33 | 34 | ### 5.2.3 Admin UI,Identity Express和SAML2p支持 35 | 我们的合作伙伴提供了几种商业附加产品,请访问。 36 | -------------------------------------------------------------------------------- /第三部分 主题/第39章 引用令牌.md: -------------------------------------------------------------------------------- 1 | # 第39章 引用令牌 2 | 访问令牌有两种形式 - 自包含或引用。 3 | 4 | JWT令牌将是一个自包含的访问令牌 - 它是一个带有声明和过期的受保护数据结构。一旦API了解了密钥材料,它就可以验证自包含的令牌,而无需与发行者进行通信。这使得JWT难以撤销。它们将一直有效,直到它们过期。 5 | 6 | 使用引用令牌时 - IdentityServer会将令牌的内容存储在数据存储中,并且只会将此令牌的唯一标识符发回给客户端。然后,接收此引用的API必须打开与IdentityServer的反向通道通信以验证令牌。 7 | 8 |
9 | 10 |
11 | 12 | 您可以使用以下设置切换客户端的令牌类型: 13 | 14 | ``` C# 15 | client.AccessTokenType = AccessTokenType.Reference; 16 | ``` 17 | 18 | IdentityServer提供了OAuth 2.0内省规范的实现,该规范允许API取消引用令牌。您可以使用我们的专用[内省处理程序](https://github.com/IdentityModel/IdentityModel.AspNetCore.OAuth2Introspection) 或使用[身份服务器身份验证处理程序](https://github.com/IdentityServer/IdentityServer4.AccessTokenValidation),它可以验证JWT和引用令牌。 19 | 20 | 内省端点需要身份验证 - 因为内省端点的客户端是API,您可以在以下位置配置秘密`ApiResource`: 21 | 22 | ``` C# 23 | var api = new ApiResource("api1") 24 | { 25 | ApiSecrets = { new Secret("secret".Sha256()) } 26 | } 27 | ``` 28 | 29 | 有关如何为API配置IdentityServer身份验证中间件的详细信息,请参阅[此处](https://github.com/thinksjay/IdentityServer4/blob/master/%E7%AC%AC%E4%B8%89%E9%83%A8%E5%88%86%20%E4%B8%BB%E9%A2%98/%E7%AC%AC29%E7%AB%A0%20%E4%BF%9D%E6%8A%A4API.md)。 -------------------------------------------------------------------------------- /第三部分 主题/第26章 联合注销.md: -------------------------------------------------------------------------------- 1 | # 第26章 联合注销 2 | 联合注销是指用户使用外部身份提供程序登录IdentityServer,然后用户通过IdentityServer未知的工作流程注销该外部身份提供程序的情况。当用户注销时,对IdentityServer进行通知将非常有用,这样它就可以将用户从IdentityServer和使用IdentityServer的所有应用程序中签出。 3 | 4 | 并非所有外部身份提供商都支持联合注销,但那些提供的机制将提供通知客户端用户已注销的机制。此通知通常以`