IdentityServer4-参考

1、Identity Resource前端

2、API Resourcegit

3、Clientgithub

4、GrantValidationResultsql

5、Profile Service数据库

6、IdentityServer Interaction Serviceapi

7、IdentityServer Options浏览器

8、Entity Framework Support缓存

9、ASP.NET Identity Support安全

1、Identity Resource服务器

Enabled

指示此资源是否已启用且能够请求。 默认为true。

Name

身份资源的惟一名称。 这是客户端将用于受权请求中的scope参数的值。

DisplayName

该值将用于例如 用在consent显示上。

Description

该值将用于例如 用在consent显示上。

Required

是否在consent页面必须选择。 默认为false。

Emphasize

指定consent页面是否会强调此范围(若是consent页面要实现此类功能)。 将此设置用于敏感或重要范围。 默认为false。

ShowInDiscoveryDocument

指定此范围是否显示在发现文档中。 默认为true。

UserClaims

应包含在身份令牌中的关联用户声明类型的列表。

 

2、API Resource

Enabled

指示此资源是否已启用且能够请求。 默认为true。

Name

API的惟一名称

DisplayName

该值将用于例如 用在consent显示上。

Description

该值将用于例如 用在consent显示上。

ApiSecrets

API密钥用于自检端点。 API可使用API名称和密钥进行自检验证。

UserClaims

应包含在访问令牌中的关联用户声明类型的列表。

Scopes

API必须至少有一个范围。 每一个范围能够有不一样的设置。

Scopes

在简单的状况下,API只有一个范围。 可是在某些状况下,您可能但愿细分API的功能,并让不一样的客户端访问不一样的部分。

Name

scope的惟一名称。 这是客户端将用于受权/令牌请求中的scope参数的值。

DisplayName

显示名称,通常用在consent页面展现

Description

描述,通常用在consent页面展现

Required

是否必选,若是设置为true,则consent页面则不可取消此scope( 默认为false)

Emphasize

指定consent页面是否会强调此范围(若是consent页面要实现此类功能)。 将此设置用于敏感或重要范围。 默认为false。

ShowInDiscoveryDocument

指定此范围是否显示在发现文档中。 默认为true。

UserClaims

应包含在访问令牌中的关联用户声明类型的列表。 此处指定的声明将添加到为API指定的声明列表中。

便捷构造行为

只是关于为ApiResource类提供的构造函数的注释。

要彻底控制ApiResource中的数据,请使用不带参数的默认构造函数。 若是要为每一个API配置多个范围,可使用此方法。 例如:

new ApiResource
{
    Name = "api2",

    Scopes =
    {
        new Scope()
        {
            Name = "api2.full_access",
            DisplayName = "Full access to API 2"
        },
        new Scope
        {
            Name = "api2.read_only",
            DisplayName = "Read only access to API 2"
        }
    }
}

对于每一个API只须要一个范围的简单方案,则提供了几个接受名称的便捷构造函数。 例如:

new ApiResource("api1", "Some API 1")

使用便捷构造函数等同于:

new ApiResource
{
    Name = "api1",
    DisplayName = "Some API 1",

    Scopes =
    {
        new Scope()
        {
            Name = "api1",
            DisplayName = "Some API 1"
        }
    }
}

 

3、Client

Client类为OpenID Connect或OAuth 2.0客户端建模 - 例如 本机应用程序,Web应用程序或基于JS的应用程序。 

基本

Enabled

指定是否启用客户端。 默认为true。

ClientId

客户端的惟一ID

ClientSecrets

客户端密钥列表 - 访问令牌端点的凭据。

RequireClientSecret

指定此客户端是否须要密钥才能从令牌端点请求令牌(默认为true)

AllowedGrantTypes

指定容许客户端使用的受权类型。 使用GrantTypes类进行常见组合。

RequirePkce

指定使用基于受权代码的受权类型的客户端是否必须发送校验密钥

AllowPlainTextPkce

指定使用PKCE的客户端是否可使用纯文本代码质询(不推荐 - 默认为false)

RedirectUris

指定容许的URI以返回令牌或受权码

AllowedScopes

默认状况下,客户端无权访问任何资源 - 经过添加相应的范围名称来指定容许的资源

AllowOfflineAccess

指定此客户端是否能够请求刷新令牌(请求offline_accessscope)

AllowAccessTokensViaBrowser

指定是否容许此客户端经过浏览器接收访问令牌。 这对于强化容许多种响应类型的流是有用的(例如,不容许混合流客户端使用code id_token添加令牌响应类型,从而将令牌泄露给浏览器。)

Properties

字典可根据须要保存任何自定义客户端特定值。

认证/注销

PostLogoutRedirectUris

指定在注销后重定向到的容许URI。

FrontChannelLogoutUri

指定客户端的注销URI,以用于基于HTTP的前端通道注销。

FrontChannelLogoutSessionRequired

指定是否应将用户的会话ID发送到FrontChannelLogoutUri。 默认为true。

BackChannelLogoutUri

指定客户端的注销URI,以用于基于HTTP的反向通道注销。

BackChannelLogoutSessionRequired

指定是否应在请求中将用户的会话ID发送到BackChannelLogoutUri。 默认为true。

EnableLocalLogin

指定此客户端是否能够仅使用本地账户或外部IdP。 默认为true。

IdentityProviderRestrictions

指定能够与此客户端一块儿使用的外部IdP(若是列表为空,则容许全部IdP)。 默认为空。

Token

IdentityTokenLifetime

Identity令牌的生命周期(以秒为单位)(默认为300秒/ 5分钟)

AccessTokenLifetime

访问令牌的生命周期(以秒为单位)(默认为3600秒/ 1小时)

AuthorizationCodeLifetime

受权代码的生命周期(以秒为单位)(默认为300秒/ 5分钟)

AbsoluteRefreshTokenLifetime

刷新令牌的最长生命周期,以秒为单位。 默认为2592000秒/ 30天

SlidingRefreshTokenLifetime

刷新令牌的生命周期以秒为单位。 默认为1296000秒/ 15天

RefreshTokenUsage

  ReUse 刷新令牌时刷新令牌句柄将保持不变

  OneTime 刷新令牌时将更新刷新令牌句柄。 这是默认值。

RefreshTokenExpiration

  Absolute 刷新令牌将在固定时间点到期(由AbsoluteRefreshTokenLifetime指定)

  Sliding 刷新令牌时,将刷新刷新令牌的生命周期(按SlidingRefreshTokenLifetime中指定的数量)。 生命周期不会超过AbsoluteRefreshTokenLifetime。

UpdateAccessTokenClaimsOnRefresh

获取或设置一个值,该值指示是否应在刷新令牌请求上更新访问令牌(及其声明)。

AccessTokenType

指定访问令牌是引用令牌仍是自包含JWT令牌(默认为Jwt)。

IncludeJwtId

指定JWT访问令牌是否应具备嵌入的惟一ID(经过jti声明)。

AllowedCorsOrigins

若是指定,将由默认CORS策略服务实现(In-Memory和EF)用于为JavaScript客户端构建CORS策略。

Claims

容许客户端的设置声明(将包含在访问令牌中)。

AlwaysSendClientClaims

若是设置,将为每一个流发送客户端声明。 若是不是,仅用于客户端凭证流(默认为false)

AlwaysIncludeUserClaimsInIdToken

在请求id令牌和访问令牌时,若是用户声明始终将其添加到id令牌而不是请求客户端使用userinfo端点。 默认值为false。

ClientClaimsPrefix

若是设置,前缀客户端声明类型将被加上前缀。默认为client_。目的是确保它们不会意外地与用户声明发生冲突。

PairWiseSubjectSalt

对于此客户端的用户,在成对的subjectId生成中使用的salt值。

Consent Screen

RequireConsent

指定是否须要赞成屏幕。 默认为true。

AllowRememberConsent

指定用户是否能够选择存储赞成决策。 默认为true。

ConsentLifetime

用户赞成的生命周期,以秒为单位。 默认为null(无到期)。

ClientName

客户端显示名称(用于记录和赞成页面显示)

ClientUri

有关客户端的更多信息的URI(在赞成屏幕上使用)

LogoUri

URI到客户端图标(在赞成屏幕上使用)

 

4、GrantValidationResult

GrantValidationResult类为extensions grants和resource owner password grants的受权验证结果建模。 

最多见的用法是使用身份(成功案例)新建它:

context.Result = new GrantValidationResult(
    subject: "818727",
    authenticationMethod: "custom",
    claims: optionalClaims);

...或使用错误和描述(失败案例):

context.Result = new GrantValidationResult(
    TokenRequestErrors.InvalidGrant,
    "invalid custom credential");

在这两种状况下,您均可以传递将包含在令牌响应中的其余自定义值。

 

5、Profile Service

IdentityServer一般在建立令牌或处理对userinfo或内省端点的请求时须要有关用户的身份信息。 默认状况下,IdentityServer仅在身份验证cookie中具备声明,以便为此身份数据进行绘制。 

将用户所需的全部可能声明放入cookie中是不切实际的,所以IdentityServer定义了一个扩展点,容许根据用户须要动态加载声明。 此扩展点是IProfileService,开发人员一般能够实现此接口来访问包含用户身份数据的自定义数据库或API。

IProfileService APIs

GetProfileDataAsync

预期为用户加载声明的API。 它传递一个ProfileDataRequestContext的实例。

IsActiveAsync

预期用于指示当前是否容许用户获取令牌的API。 它传递一个IsActiveContext的实例。

ProfileDataRequestContext

模拟用户声明的请求,而且是返回这些声明的工具。 它包含如下属性:

Subject

ClaimsPrincipal为用户建模。

Client

被请求claims的客户。

RequestedClaimTypes

要求收集claim类型。

Caller

正在请求声明的上下文的标识符(例如,身份令牌,访问令牌或用户信息端点)。 常量IdentityServerConstants。

ProfileDataCallers

包含不一样的常量值。

IssuedClaims

将返回的Claim的列表。 预计这将由自定义IProfileService实现填充。

AddRequestedClaims

ProfileDataRequestContext上的扩展方法用于填充IssuedClaims,但首先根据RequestedClaimTypes过滤声明。

请求的范围和声明映射

客户端请求的范围控制用户声明在令牌中返回给客户端的内容。 GetProfileDataAsync方法负责根据ProfileDataRequestContext上的RequestedClaimTypes集合动态获取这些声明。

RequestedClaimTypes集合基于在对做用域建模的资源上定义的用户声明进行填充。 若是请求的做用域是标识资源,则将根据IdentityResource中定义的用户声明类型填充RequestedClaimTypes中的声明。 若是请求的范围是API资源,则将根据ApiResource和/或Scope中定义的用户声明类型填充RequestedClaimTypes中的声明。

IsActiveContext

对请求进行建模以肯定用户当前是否容许获取令牌。它包含这些属性:

Subject

ClaimsPrincipal为用户建模。

Client

要求提出claims的客户。

Caller

正在请求声明的上下文的标识符(例如,身份令牌,访问令牌或用户信息端点)。 常量IdentityServerConstants.ProfileDataCallers包含不一样的常量值。

IsActive

指示是否容许用户获取令牌的标志。 预计这将由自定义IProfileService实现分配。

 

6、IdentityServer Interaction Service

IIdentityServerInteractionService接口旨在提供用户界面用于与IdentityServer通讯的服务,主要与用户交互有关。 它能够从依赖注入系统得到,一般做为构造函数参数注入到IdentityServer的用户界面的MVC控制器中。 

IIdentityServerInteractionService APIs

GetAuthorizationContextAsync

基于传递给登陆页面或赞成页面的returnUrl返回AuthorizationRequest。

IsValidReturnUrl

指示在登陆或赞成后returnUrl是否为重定向的有效URL。

GetErrorContextAsync

根据传递给错误页面的errorId返回ErrorMessage。

GetLogoutContextAsync

根据传递给注销页面的logoutId返回LogoutRequest。

CreateLogoutContextAsync

若是当前没有logoutId,则用于建立logoutId。 这将建立一个cookie,捕获注销所需的全部当前状态,logoutId标识该cookie。 这一般在没有当前logoutId时使用,而且注销页面必须捕获当前用户在重定向到外部身份提供程序以进行注销以前注销所需的状态。 新建立的logoutId须要在注销时往返外部身份提供者,而后在注销回调页面上使用,就像在普通注销页面上同样。

GrantConsentAsync

接受ConsentResponse以通知IdentityServer用户赞成特定的AuthorizationRequest。

GetAllUserConsentsAsync

返回用户的Consent集合。

RevokeUserConsentAsync

撤消用户对用户的全部赞成和受权。

RevokeTokensForCurrentSessionAsync

撤消用户在当前会话期间签署的客户的全部赞成和受权。

AuthorizationRequest

ClientId

发起请求的客户端标识符。

RedirectUri

成功受权后将用户重定向到的URI。

DisplayMode

显示模式从受权请求传递。

UiLocales

从受权请求传递的UI语言环境。

IdP

请求的外部标识提供程序。这是用来绕过国内领域发现(HRD)。这是经过受权请求上的acr_values参数的“idp:”前缀提供的。

Tenant

租客要求。 这是经过“tenant:”前缀提供给受权请求的acr_values参数。

LoginHint

用户将用于登陆的预期用户名。 这是经过受权请求上的login_hint参数从客户端请求的。

PromptMode

从受权请求请求的提示模式。

AcrValues

从受权请求传递的acr值。

ScopesRequested

受权请求请求的范围。参数传递给受权请求的整个参数集合。

ErrorMessage

DisplayMode

从受权请求中传递的显示模式。

UiLocales

从受权请求中传递的UI区域。

Error

错误代码。

RequestId

每一个请求标识符。这能够用于向最终用户显示,也能够用于诊断。

LogoutRequest

ClientId

发起请求的客户端标识符。

PostLogoutRedirectUri

用户在注销后将其重定向到的URL。

SessionId

用户当前的会话ID。

SignOutIFrameUrl

要在注销页面上的<iframe>中呈现以启用单点注销的URL。

Parameters

整个参数集合传递给结束会话端点。

ShowSignoutPrompt

指示是否应根据传递到结束会话端点的参数提示用户注销。

ConsentResponse

ScopesConsented

用户赞成的范围集合。

RememberConsent

指示是否持久保留用户赞成的标志。

Consent

SubjectId

授予赞成的subjectID。

ClientId

客户端标识符。

Scopes

范围。

CreationTime

得到赞成日期和时间

Expiration

赞成过时的日期和时间。

 

7、IdentityServer Options

  • IssuerUri
    设置将在发现文档和已颁发的JWT令牌中显示的颁发者名称。 建议不要设置此属性,该属性从客户端使用的主机名中推断颁发者名称。
  • PublicOrigin
    此服务器实例的来源,例如https://myorigin.com。 若是未设置,则从请求推断出原始名称。

Endpoints

容许启用/禁用各个端点,例如 令牌,受权,用户信息等

默认状况下,全部端点都已启用,但您能够经过禁用不须要的端点来锁定服务器。

Discovery

容许启用/禁用发现文档的各个部分,例如 端点,范围,声明,受权类型等

CustomEntries字典容许向发现文档添加自定义元素。

Authentication

  • CookieLifetime
    身份验证cookie生存期(仅在使用IdentityServer提供的cookie处理程序时有效)。
  • CookieSlidingExpiration
    指定cookie是否应该滑动(仅在使用IdentityServer提供的cookie处理程序时有效)。
  • RequireAuthenticatedUserForSignOutMessage
    指示是否必须对用户进行身份验证以接受结束会话端点的参数。 默认为false。
  • CheckSessionCookieName
    用于检查会话端点的cookie的名称。
  • RequireCspFrameSrcForSignout
    若是设置,将要求frame-src CSP标头在结束会话回调端点上发出,该端点向客户端呈现iframe以进行前端通道注销通知。 默认为true。

Events

容许配置是否应将哪些事件提交到已注册的事件接收器。 有关活动的更多信息,请参见此处。

InputLengthRestrictions

容许设置各类协议参数的长度限制,如客户端ID,范围,重定向URI等。

UserInteraction

  • LoginUrlLogoutUrlConsentUrlErrorUrl
    设置登陆,注销,赞成和错误页面的URL。
  • LoginReturnUrlParameter
    设置传递给登陆页面的返回URL参数的名称。 默认为returnUrl。
  • LogoutIdParameter
    设置传递给注销页面的注销消息id参数的名称。 默认为logoutId。
  • ConsentReturnUrlParameter
    设置传递给赞成页面的返回URL参数的名称。 默认为returnUrl。
  • ErrorIdParameter
    设置传递给错误页面的错误消息id参数的名称。 默认为errorId。
  • CustomRedirectReturnUrlParameter
    设置从受权端点传递给自定义重定向的返回URL参数的名称。 默认为returnUrl。
  • CookieMessageThreshold
    IdentityServer和某些UI页面之间的某些交互须要cookie来传递状态和上下文(上面的任何具备可配置“message id”参数的页面)。 因为浏览器对cookie的数量及其大小有限制,所以该设置用于防止建立过多的cookie。 该值设置将建立的任何类型的消息cookie的最大数量。 一旦达到限制,将清除最先的消息cookie。 这有效地表示用户在使用IdentityServer时能够打开多少个选项卡。

Caching

这些设置仅在启动时在服务配置中启用了相应的缓存时才适用。

  • ClientStoreExpiration
    从客户端存储加载的客户端配置的缓存持续时间。
  • ResourceStoreExpiration
    缓存从资源存储加载的标识和API资源配置的持续时间。

CORS

IdentityServer支持某些端点的CORS。 底层CORS实现由ASP.NET Core提供,所以它在依赖注入系统中自动注册。

  • CorsPolicyName
    将针对进入IdentityServer的CORS请求评估的CORS策略的名称(默认为“IdentityServer4”)。 处理此问题的策略提供程序是根据在依赖项注入系统中注册的ICorsPolicyService实现的。 若是您但愿自定义容许链接的CORS源集,那么建议您提供ICorsPolicyService的自定义实现。
  • CorsPaths
    IdentityServer中支持CORS的端点。 默认为发现,用户信息,令牌和吊销端点。
  • PreflightCacheDuration
    Nullable <TimeSpan>指示在预检Access-Control-Max-Ageresponse标头中使用的值。 默认为null,表示未在响应上设置缓存标头。

CSP(内容安全政策)

在适当的状况下,IdentityServer会为某些响应发出CSP标头。

  • Level
    要使用的CSP级别。 默认状况下使用CSP级别2,但若是必须支持旧版浏览器,则将其更改成CspLevel.One以容纳它们。
  • AddDeprecatedHeader
    指示是否还应发出旧的X-Content-Security-Policy CSP标头(除了基于标准的标头值以外)。 默认为true。

 

8、Entity Framework Support

为IdentityServer中的配置和操做数据扩展点提供了基于EntityFramework的实现。 EntityFramework的使用容许任何EF支持的数据库与此库一块儿使用。 

这个库的repo位于这里,NuGet包在这里

此库提供的功能分为两个主要区域:配置存储和操做存储支持。 根据托管应用程序的须要,这两个不一样的区域能够独立使用或一块儿使用。

Configuration Store支持客户端,资源和CORS设置

若是但愿从EF支持的数据库加载客户端,标识资源,API资源或CORS数据(而不是使用内存配置),则可使用配置存储。 此支持提供IClientStore,IResourceStore和ICorsPolicyService可扩展性点的实现。 这些实现使用名为ConfigurationDbContext的DbContext派生类来对数据库中的表进行建模。

要使用配置存储支持,请在调用AddIdentityServer后使用AddConfigurationStore扩展方法:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    const string connectionString = @"Data Source=(LocalDb)\MSSQLLocalDB;database=IdentityServer4.EntityFramework-2.0.0;trusted_connection=yes;";
    var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;

    services.AddIdentityServer()
        // this adds the config data from DB (clients, resources, CORS)
        .AddConfigurationStore(options =>
        {
            options.ConfigureDbContext = builder =>
                builder.UseSqlServer(connectionString,
                    sql => sql.MigrationsAssembly(migrationsAssembly));
        });
}

要配置配置存储,请使用传递给配置回调的ConfigurationStoreOptions选项对象。

ConfigurationStoreOptions

此选项类包含用于控制配置存储和ConfigurationDbContext的属性。

ConfigureDbContext

Action <DbContextOptionsBuilder>类型的委托用做回调以配置基础ConfigurationDbContext。 若是EF直接与AddDbContext一块儿使用,则委托能够以相同的方式配置ConfigurationDbContext,这容许使用任何EF支持的数据库。

DefaultSchema

容许为ConfigurationDbContext中的全部表设置默认数据库模式名称。

Operational Store对受权受权,赞成和令牌的支持(刷新和引用)

若是但愿从EF支持的数据库(而不是默认的内存数据库)加载受权授予,赞成和令牌(刷新和引用),则可使用操做存储。 此支持提供IPersistedGrantStore扩展点的实现。 该实现使用名为PersistedGrantDbContext的DbContext派生类来对数据库中的表进行建模。

要使用操做存储支持,请在调用AddIdentityServer后使用AddOperationalStore扩展方法:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    const string connectionString = @"Data Source=(LocalDb)\MSSQLLocalDB;database=IdentityServer4.EntityFramework-2.0.0;trusted_connection=yes;";
    var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;

    services.AddIdentityServer()
        // this adds the operational data from DB (codes, tokens, consents)
        .AddOperationalStore(options =>
        {
            options.ConfigureDbContext = builder =>
                builder.UseSqlServer(connectionString,
                    sql => sql.MigrationsAssembly(migrationsAssembly));

            // this enables automatic token cleanup. this is optional.
            options.EnableTokenCleanup = true;
            options.TokenCleanupInterval = 30; // interval in seconds
        });
}

要配置操做存储,请使用传递给配置回调的OperationalStoreOptions选项对象。

OperationalStoreOptions

此选项类包含用于控制操做存储和PersistedGrantDbContext的属性。

ConfigureDbContext

Action <DbContextOptionsBuilder>类型的委托用做回调以配置基础PersistedGrantDbContext。 若是EF直接与AddDbContext一块儿使用,则委托能够以相同的方式配置PersistedGrantDbContext,这容许使用任何EF支持的数据库。

DefaultSchema

容许为PersistedGrantDbContext中的全部表设置默认数据库模式名称。

EnableTokenCleanup

指示是否将从数据库中自动清除过期条目。 默认值为false。

TokenCleanupInterval

令牌清理间隔(以秒为单位)。 默认值为3600(1小时)。

跨不一样版本的IdentityServer数据库建立和模式更改

跨不一样版本的IdentityServer(以及EF支持)极可能会更改数据库架构以适应新的和不断变化的功能。

咱们不为建立数据库或将数据从一个版本迁移到另外一个版本提供任何支持。 您须要以组织认为合适的任何方式管理数据库建立,架构更改和数据迁移。

使用EF迁移是一种可行的方法。 若是您确实但愿使用迁移,请参阅EF快速入门以获取有关如何入门的示例,或参阅有关EF迁移的Microsoft文档。

咱们还为当前版本的数据库模式发布了示例SQL脚本

9、ASP.NET Identity Support

提供了基于ASP.NET身份的实现,用于管理IdentityServer用户的身份数据库。 此实现实现IdentityServer中的扩展点,以便为用户加载身份数据以将声明发送到令牌。 

https://github.com/IdentityServer/IdentityServer4.AspNetIdentity/

要使用此库,请正常配置ASP.NET标识。 而后在调用AddIdentityServer以后使用AddAspNetIdentity扩展方法:

public void ConfigureServices(IServiceCollection services)
{
    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddIdentityServer()
        .AddAspNetIdentity<ApplicationUser>();
}

AddAspNetIdentity须要将用户建模为ASP.NET标识的类(以及传递给AddIdentity的同一个用于配置ASP.NET标识的类)做为通用参数。 这会将IdentityServer配置为使用IUserClaimsPrincipalFactory,IResourceOwnerPasswordValidator和IProfileService的ASP.NET Identity实现。 它还配置了一些用于IdentityServer的ASP.NET Identity选项(例如要使用的声明类型和身份验证cookie设置)。