Startup
身份服务器是中间件和服务的组合。所有的配置都是在启动类中完成的。
Configuring services
通过调用如下代码在DI(dependency inject,依赖注入)中添加IdentityServer的服务:
public void ConfigureServices(IServiceCollection services) { var builder = services.AddIdentityServer(); }
您也可以将选项(options)传递到这个调用中。有关选项的详细信息,请参见这里。
这会返回一个builder对象,也就是说,可以继续链式的调用其他方法在这里。
Key material 关键部分
- AddSigningCredential
该方法用来添加一个签名密钥服务,该服务为各种令牌创建/验证服务提供指定的关键材料。可以为该方法传递一个X509Certificate2,或者一个SigningCredential,或者一个来自证书存储中的一个证书(certificate)的引用。关于这部分的东西可以百度搜索以下openssl,这是一个免费证书的provider。
- AddDeveloperSigningCredential
如果你没有证书,或者处于开发环境想快速的开发然后在生产环境中用真实的证书的话,这个方法很适合,但是注意这个方法只能在开发环境中使用。
- AddValidationKey
添加了验证令牌的密钥。它们将被内部令牌验证器使用,并将出现在discovery文档(discovery endpoint,就是那个.well-known)中。您可以通过一个X509Certificate2、一个SigningCredential或来自证书存储的证书的引用。这对于关键的滚转场景非常有用
In-Memory configuration stores 内存配置存储
允许使用各种“内存中的“配置来配置IdentityServer。这些”内存中的“配置是一些集合,他们可以被硬编码到应用中,也可能是从配置文件中被加载。这些集合在宿主服务器启动的时候被创建好。
处于方便的考虑,当你在原型设计、开发或测试的时候这特别有用,节省时间,提高效率。因为在运行时不需要动态查询数据库的配置数据。还有一种情况是如果配置很少发生变化,这种类型的配置也适用于生产场景,因为如果需要更改值,重新启动以下应用程序并不困难。
- AddInMemoryClients
根据客户端配置对象的内存集合(collection),注册IClientStore和ICorsPolicyService实现。
- AddInMemoryIdentityResources
根据身份资源配置对象的内存集合(collection)来注册IResourcestore实现。
- AddInMemoryApiResources
根据蜂资源配置对象的内存集合(collection)来注册IResourcesstore实现。
Test stores 测试的存储
TestUser类代表一个用户,对他们的凭证(Credentials)和Claim(声明)在身份服务器(IdentityServer)中进行建模。TestUser的使用是对“内存中”存储的使用,因为它是在原型设计、开发和/或测试时使用的。在生产中不推荐使用TestUser。
- AddTestUsers
从这个方法的名称(复数)可以看出它是注册了一个关于TestUser的集合。实际上是基于TestUser对象的集合注册TestUserStore。TestUserStore被默认的quickstart UI(IdentityServer4提供的一个快速开始的教程中使用的UI)使用。还注册了IProfileService和IResourceOwnerPasswordValidator的默认实现。
Additional services 一些其他的服务
- AddExtensionGrantValidator
添加IExtensionGrantValidator实现,以便与扩展授权(grant)一起使用。
- AddSecretParser
增加ISecretParser实现,用于解析客户端或API资源凭证。
- AddSecretValidator
添加ISecretValidator实现,用于验证凭据库对客户端或API资源凭证的验证。
- AddResourceOwnerValidator
添加了IResourceOwnerPasswordValidator实现,用于验证资源所有者密码凭证授予类型的用户凭证。
- AddProfileService
添加IProfileService实现,用于连接到自定义用户存储。DefaultProfileService类提供了默认的实现,它(这个默认的实现)依赖于从认证(authentication、signin、signout、forbid、challenge这五个在认证过程中存在的方法,authentication这个动作是从cookie中解析用户的信息并生成claim的一个过程) cookie时解析出来的claims作为发行token的唯一来源。
- AddAuthorizeInteractionResponseGenerator
增加IAuthorizeInteractionResponseGenerator实现,以便在授权端点定制逻辑,以便在用户必须显示错误、登录、同意或任何其他定制页面的UI时。AuthorizeInteractionResponseGenerator类提供了一个默认的实现,因此如果您需要增强现有的行为,请考虑从这个现有的类派生出来。
- AddCustomAuthorizeRequestValidator
添加ICustomauthorizervalidator实现,在授权端点定制请求参数验证这个过程。
- AddCustomTokenRequestValidator
添加ICustomtokenRequestvalidator实现,以在令牌端点定制请求参数验证这个过程。
- AddRedirectUriValidator
添加IRedirectUrivalidator实现来定制重定向URI验证这个过程。
- AddAppAuthRedirectUriValidator
添加一个“AppAuth”(用于本地应用的OAuth 2.0),兼容重定向URI验证器(执行严格的验证,但也允许http://127.0.0.1使用随机端口)。
- AddJwtBearerClientAuthentication
增加对客户端认证使用jwt bearer断言的支持。
Caching 缓存
客户端和资源配置数据在IdentityServer中被频繁的使用。如果这些数据来自一些数据库或者外部的存储,那么对于频繁的重新载入相同数据这个过程来说,代价就比较大了。
- AddInMemoryCaching
要使用下面所描述的缓存,必须要在DI中注册ICache<T>的实现。这个API注册了一个基于asp.net core中MemoryCache的实现(同时也实现了ICache<T>)。
- AddClientStoreCache
注册一个IClientStore装饰器实现,它将维护客户端配置对象的内存缓存。缓存持续期间时可配置的,可以通过IdentityServerOptions上的configuration options进行配置。
- AddResourceStoreCache
注册一个IResourceStore的装饰器实现,它可以维持一个存储IdentityResource和ApiResource配置对象的内存缓存存储。缓存存续期间是可配置的,可在IdentityServerOptions上的Configuration options上面进行配置。
- AddCorsPolicyCache
注册一个ICorsPolicyService装饰器实现,它将维护CORS策略(跨域访问)服务评估结果的内存缓存。缓存持续时间是可配置的,可在IdentityServerOptions上的Configuration options上面进行配置。
Configuring the pipeline 配置管道(中间件)
你需要通过调用如下代码来添加IdentityServer中间件:
public void Configure(IApplicationBuilder app) { app.UseIdentityServer(); }
注意:UserIdentityServer这个方法包含了UseAuthentication的调用,所以不需要在调用以便UseAuthentication了。
此外,还要注意管道中的调用顺序,打个比方,你希望在登陆之前实现身份认证(废话么)