Startup¶
IdentityServer 是中间件和服务的组合。 所有配置都在您的启动类中完成。
配置服务¶
您可以通过调用将 IdentityServer 服务添加到 DI 系统:
public void ConfigureServices(IServiceCollection services)
{
var builder = services.AddIdentityServer();
}
您可以选择将选项传递到此调用中。 有关选项的详细信息,请参阅 这里。
这将返回一个 builder 对象,该对象又具有许多连接附加服务的便捷方法。
密钥材料¶
IdentityServer 支持 X.509 证书(原始文件和对 Windows 证书存储的引用)、RSA 密钥和用于令牌签名和验证的 EC 密钥。 每个密钥都可以配置一个(兼容的)签名算法,例如 RS256、RS384、RS512、PS256、PS384、PS512、ES256、ES384 或 ES512。
您可以使用以下方法配置密钥材料:
AddSigningCredential添加一个签名密钥,为各种令牌创建/验证服务提供指定的密钥材料。
AddDeveloperSigningCredential在启动时创建临时密钥材料。 这是针对开发场景的。 默认情况下,生成的密钥将持久保存在本地目录中。
AddValidationKey添加用于验证令牌的密钥。 它们将由内部令牌验证器使用,并将显示在发现文档中。
内存配置存储¶
各种 “in-memory” 配置 API 允许从内存中的配置对象列表配置 IdentityServer。 这些 “in-memory” 集合可以在托管应用程序中进行硬编码,也可以从配置文件或数据库中动态加载。 但是,按照设计,这些集合仅在托管应用程序启动时创建。
这些配置 API 的使用旨在用于原型设计、开发和/或测试,其中不需要在运行时动态查询数据库以获取配置数据。 如果配置很少更改,或者在必须更改值时要求重新启动应用程序并不不方便,则这种配置样式也可能适用于生产场景。
AddInMemoryClients基于
Client配置对象的内存集合注册IClientStore和ICorsPolicyService实现。
AddInMemoryIdentityResources基于
IdentityResource配置对象的内存集合注册IResourceStore实现。
AddInMemoryApiScopes基于
ApiScope配置对象的内存中集合注册IResourceStore实现。
AddInMemoryApiResources基于
ApiResource配置对象的内存集合注册IResourceStore实现。
测试存储¶
TestUser 类在 IdentityServer 中对用户、他们的凭据和声明进行建模。
TestUser 的使用类似于 “in-memory” 存储的使用,因为它用于原型设计、开发和/或测试。
不建议在生产中使用 TestUser。
AddTestUsers基于
TestUser对象的集合注册TestUserStore。TestUserStore由默认的快速入门 UI 使用。 还注册了IProfileService和IResourceOwnerPasswordValidator的实现。
额外服务¶
AddExtensionGrantValidator添加用于扩展授权的
IExtensionGrantValidator实现。
AddSecretParser添加用于解析客户端或 API 资源凭据的
ISecretParser实现。
AddSecretValidator添加
ISecretValidator实现,用于根据凭证存储验证客户端或 API 资源凭证。
AddResourceOwnerValidator添加
IResourceOwnerPasswordValidator实现,用于验证资源所有者密码凭据授权类型的用户凭据。
AddProfileService添加
IProfileService实现以连接到您的 自定义用户配置文件存储。DefaultProfileService类提供了默认实现,该实现依赖于身份验证 cookie 作为在令牌中发布的唯一声明来源。
AddAuthorizeInteractionResponseGenerator添加
IAuthorizeInteractionResponseGenerator实现,以自定义授权端点的逻辑,以便在必须向用户显示错误、登录、同意或任何其他自定义页面的 UI时使用。AuthorizeInteractionResponseGenerator类提供了默认实现,因此如果您需要增强现有行为,请考虑从该现有类派生。
AddCustomAuthorizeRequestValidator添加
ICustomAuthorizeRequestValidator实现,以在授权端点自定义请求参数验证。
AddCustomTokenRequestValidator添加
ICustomTokenRequestValidator实现,以自定义令牌端点处的请求参数验证。
AddRedirectUriValidator添加
IRedirectUriValidator实现,以自定义重定向 URI 验证。
AddAppAuthRedirectUriValidator添加符合 “AppAuth”(原生应用程序的 OAuth 2.0)的重定向 URI 验证器(进行严格验证,但也允许使用随机端口的 http://127.0.0.1)。
AddJwtBearerClientAuthentication添加对使用 JWT bearer 断言的客户端身份验证的支持。
AddMutualTlsSecretValidators为 mutual TLS 添加 X509 密钥验证器。
缓存¶
IdentityServer 经常使用客户端和资源配置数据。 如果这些数据是从数据库或其他外部存储加载的,那么频繁地重新加载相同的数据可能会很昂贵。
AddInMemoryCaching要使用下面描述的任何缓存,必须在 DI 中注册
ICache<T>的实现。 此 API 注册了一个基于 ASP.NET Core 的MemoryCache的默认内存中实现ICache<T>。
AddClientStoreCache注册一个
IClientStore装饰器实现,它将维护一个Client配置对象的内存缓存。 缓存持续时间可在IdentityServerOptions``的 ``Caching配置选项中配置。
AddResourceStoreCache注册一个
IResourceStore装饰器实现,它将维护一个IdentityResource和ApiResource配置对象的内存缓存。 缓存持续时间可在IdentityServerOptions``的 ``Caching配置选项中配置。
AddCorsPolicyCache注册一个
ICorsPolicyService装饰器实现,它将维护 CORS 策略服务评估结果的内存缓存。 缓存持续时间可在IdentityServerOptions``的 ``Caching配置选项中配置。
可以进一步自定义缓存:
默认缓存依赖于 ICache<T> 实现。
如果您希望为特定配置对象自定义缓存行为,您可以在依赖注入系统中替换此实现。
ICache<T> 本身的默认实现依赖于.NET 提供的 IMemoryCache 接口(和 MemoryCache 实现)。
如果您希望自定义内存缓存行为,您可以替换依赖注入系统中的 IMemoryCache 实现。
配置管道¶
您需要通过调用将 IdentityServer 添加到管道中:
public void Configure(IApplicationBuilder app)
{
app.UseIdentityServer();
}
注解
UseIdentityServer 包括对 UseAuthentication 的调用,因此不必同时具有这两个调用。
中间件没有额外的配置。
请注意,顺序在管道中很重要。 例如,您需要在实现登录屏幕的 UI 框架之前添加 IdentitySever。