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。