启动
IdentityServer的启动是中间件和服务的组合来实现的。 所有配置都在你的启动类(Startup.cs)中完成。
配置服务
通过以下方式调用将IdentityServer服务添加到DI系统:
public void ConfigureServices(IServiceCollection services)
{
var builder = services.AddIdentityServer();
}
这将返回一个生成器对象,而这个对象又有一些方便的方法来连接其他的服务。
密钥
-
AddSigningCredential
添加一个签名密钥服务,该服务将指定的密钥提供给各种令牌创建/验证服务。 您可以传入X509Certificate2
,SigningCredential
或对证书存储区中证书的引用。 -
AddDeveloperSigningCredential
在启动时创建临时密钥。 这是仅用于开发场景,当您没有证书使用。 生成的密钥将被保存到文件系统,以便在服务器重新启动之间保持稳定(可以通过传递false来禁用)。 这解决了在开发期间client / api元数据缓存不同步的问题。 -
AddValidationKey
添加验证令牌的密钥。 它们将被内部令牌验证器使用,并将显示在发现文档中。 您可以传入X509Certificate2
,SigningCredential
或对证书存储区中证书的引用。 这对于关键的转换场景很有用。
内存存储配置
各种“in-memory“配置API允许从配置对象的内存列表配置IdentityServer。 这些“in-memory”的集合可以在宿主应用程序中进行硬编码,也可以从配置文件或数据库动态加载。 但是,在设计时,只有托管应用程序启动时才会创建这些集合。
使用这些配置API可用于原型设计,开发和/或测试时不需要在运行时动态查询配置数据的数据库。 如果配置很少改变,这种配置方式也可能适用于生产方案,或者如果必须更改值,则需要重新启动应用程序并不方便。
-
AddInMemoryClients
添加基于IClientStore
和ICorsPolicyService
的内存集合注册实现,以注册客户端配置对象。 -
AddInMemoryIdentityResources
添加基于IResourceStore
的IdentityResource
的内存集合注册实现,以注册身份验证资源。 -
AddInMemoryApiResources
添加基于IResourceStore
的ApiResource
的内存集合注册实现,以注册API资源。
测试存储
TestUser
类在IdentityServer中模拟用户,凭据和声明。 TestUser
的使用与使用“in-memory”存储类似,因为它适用于原型开发和/或测试。 生产中不推荐使用TestUser
。
AddTestUsers
基于TestUserStore
的TestUser
对象的集合注册实现。 还注册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 for Native Apps)兼容的重定向URI验证器(进行严格的验证,但也允许随机端口为http://127.0.0.1)。 -
AddJwtBearerClientAuthentication
使用JWT对客户机认证的支持。
缓存
客户端和资源配置数据经常被IdentityServer使用。 如果从数据库或其他外部存储装载此数据,那么频繁地重新加载相同的数据代价可能是昂贵的。
-
AddInMemoryCaching
要使用下面描述的任何缓存,必须在DI中注册ICache的实现。 此API注册基于ASP.NET Core的ICache 的MemoryCache默认内存缓存实现。 -
AddClientStoreCache
注册一个IClientStore
装饰器实现,它将维护客户端配置对象的内存缓存。 缓存持续时间可以在IdentityServerOptions
上的缓存配置选项上配置。 -
AddResourceStoreCache
注册一个IResourceStore
装饰器实现,它将维护IdentityResource
和ApiResource
配置对象的内存缓存。 缓存持续时间可以在IdentityServerOptions
上的缓存配置选项上配置。 -
AddCorsPolicyCache
注册一个ICorsPolicyService
装饰器实现,它将维护一个CORS策略服务评估结果的内存缓存。 缓存持续时间可以在IdentityServerOptions上的缓存配置选项上配置。
可以进一步定制缓存:
默认缓存依赖于ICache
ICache<T>
的默认实现依赖于.NET提供的IMemoryCache
接口(和MemoryCache
实现)。 如果您希望自定义内存中的缓存行为,则可以替换依赖注入系统中的IMemoryCache
实现。
配置中间件
您需要通过以下方式调用将IdentityServer添加到管道中:
public void Configure(IApplicationBuilder app)
{
app.UseIdentityServer();
}
UseIdentityServer
包含对UseAuthentication
的调用,所以没有必要同时调用这两个。
中间件没有额外的配置。
请注意,添加顺序在管道配置中很重要。 例如,您需要在添加MVC中间件之前添加IdentitySever。