3、Clientgithub
6、IdentityServer Interaction Serviceapi
Enabled
指示此资源是否已启用且能够请求。 默认为true。
Name
身份资源的惟一名称。 这是客户端将用于受权请求中的scope参数的值。
DisplayName
该值将用于例如 用在consent显示上。
Description
该值将用于例如 用在consent显示上。
Required
是否在consent页面必须选择。 默认为false。
Emphasize
指定consent页面是否会强调此范围(若是consent页面要实现此类功能)。 将此设置用于敏感或重要范围。 默认为false。
ShowInDiscoveryDocument
指定此范围是否显示在发现文档中。 默认为true。
UserClaims
应包含在身份令牌中的关联用户声明类型的列表。
Enabled
指示此资源是否已启用且能够请求。 默认为true。
Name
API的惟一名称
DisplayName
该值将用于例如 用在consent显示上。
Description
该值将用于例如 用在consent显示上。
ApiSecrets
API密钥用于自检端点。 API可使用API名称和密钥进行自检验证。
UserClaims
应包含在访问令牌中的关联用户声明类型的列表。
Scopes
API必须至少有一个范围。 每一个范围能够有不一样的设置。
在简单的状况下,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" } } }
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)。 默认为空。
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值。
RequireConsent
指定是否须要赞成屏幕。 默认为true。
AllowRememberConsent
指定用户是否能够选择存储赞成决策。 默认为true。
ConsentLifetime
用户赞成的生命周期,以秒为单位。 默认为null(无到期)。
ClientName
客户端显示名称(用于记录和赞成页面显示)
ClientUri
有关客户端的更多信息的URI(在赞成屏幕上使用)
LogoUri
URI到客户端图标(在赞成屏幕上使用)
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");
在这两种状况下,您均可以传递将包含在令牌响应中的其余自定义值。
IdentityServer一般在建立令牌或处理对userinfo或内省端点的请求时须要有关用户的身份信息。 默认状况下,IdentityServer仅在身份验证cookie中具备声明,以便为此身份数据进行绘制。
将用户所需的全部可能声明放入cookie中是不切实际的,所以IdentityServer定义了一个扩展点,容许根据用户须要动态加载声明。 此扩展点是IProfileService,开发人员一般能够实现此接口来访问包含用户身份数据的自定义数据库或API。
GetProfileDataAsync
预期为用户加载声明的API。 它传递一个ProfileDataRequestContext的实例。
IsActiveAsync
预期用于指示当前是否容许用户获取令牌的API。 它传递一个IsActiveContext的实例。
模拟用户声明的请求,而且是返回这些声明的工具。 它包含如下属性:
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中的声明。
对请求进行建模以肯定用户当前是否容许获取令牌。它包含这些属性:
Subject
ClaimsPrincipal为用户建模。
Client
要求提出claims的客户。
Caller
正在请求声明的上下文的标识符(例如,身份令牌,访问令牌或用户信息端点)。 常量IdentityServerConstants.ProfileDataCallers包含不一样的常量值。
IsActive
指示是否容许用户获取令牌的标志。 预计这将由自定义IProfileService实现分配。
6、IdentityServer Interaction Service
IIdentityServerInteractionService接口旨在提供用户界面用于与IdentityServer通讯的服务,主要与用户交互有关。 它能够从依赖注入系统得到,一般做为构造函数参数注入到IdentityServer的用户界面的MVC控制器中。
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
撤消用户在当前会话期间签署的客户的全部赞成和受权。
ClientId
发起请求的客户端标识符。
RedirectUri
成功受权后将用户重定向到的URI。
DisplayMode
显示模式从受权请求传递。
UiLocales
从受权请求传递的UI语言环境。
IdP
请求的外部标识提供程序。这是用来绕过国内领域发现(HRD)。这是经过受权请求上的acr_values参数的“idp:”前缀提供的。
Tenant
租客要求。 这是经过“tenant:”前缀提供给受权请求的acr_values参数。
LoginHint
用户将用于登陆的预期用户名。 这是经过受权请求上的login_hint参数从客户端请求的。
PromptMode
从受权请求请求的提示模式。
AcrValues
从受权请求传递的acr值。
ScopesRequested
受权请求请求的范围。参数传递给受权请求的整个参数集合。
DisplayMode
从受权请求中传递的显示模式。
UiLocales
从受权请求中传递的UI区域。
Error
错误代码。
RequestId
每一个请求标识符。这能够用于向最终用户显示,也能够用于诊断。
ClientId
发起请求的客户端标识符。
PostLogoutRedirectUri
用户在注销后将其重定向到的URL。
SessionId
用户当前的会话ID。
SignOutIFrameUrl
要在注销页面上的<iframe>中呈现以启用单点注销的URL。
Parameters
整个参数集合传递给结束会话端点。
ShowSignoutPrompt
指示是否应根据传递到结束会话端点的参数提示用户注销。
ScopesConsented
用户赞成的范围集合。
RememberConsent
指示是否持久保留用户赞成的标志。
SubjectId
授予赞成的subjectID。
ClientId
客户端标识符。
Scopes
范围。
CreationTime
得到赞成日期和时间
Expiration
赞成过时的日期和时间。
IssuerUri
PublicOrigin
容许启用/禁用各个端点,例如 令牌,受权,用户信息等
默认状况下,全部端点都已启用,但您能够经过禁用不须要的端点来锁定服务器。
容许启用/禁用发现文档的各个部分,例如 端点,范围,声明,受权类型等
CustomEntries字典容许向发现文档添加自定义元素。
CookieLifetime
CookieSlidingExpiration
RequireAuthenticatedUserForSignOutMessage
CheckSessionCookieName
RequireCspFrameSrcForSignout
容许配置是否应将哪些事件提交到已注册的事件接收器。 有关活动的更多信息,请参见此处。
容许设置各类协议参数的长度限制,如客户端ID,范围,重定向URI等。
LoginUrl
,
LogoutUrl
,
ConsentUrl
,
ErrorUrl
LoginReturnUrlParameter
LogoutIdParameter
ConsentReturnUrlParameter
ErrorIdParameter
CustomRedirectReturnUrlParameter
CookieMessageThreshold
这些设置仅在启动时在服务配置中启用了相应的缓存时才适用。
ClientStoreExpiration
ResourceStoreExpiration
IdentityServer支持某些端点的CORS。 底层CORS实现由ASP.NET Core提供,所以它在依赖注入系统中自动注册。
CorsPolicyName
CorsPaths
PreflightCacheDuration
在适当的状况下,IdentityServer会为某些响应发出CSP标头。
Level
AddDeprecatedHeader
为IdentityServer中的配置和操做数据扩展点提供了基于EntityFramework的实现。 EntityFramework的使用容许任何EF支持的数据库与此库一块儿使用。
此库提供的功能分为两个主要区域:配置存储和操做存储支持。 根据托管应用程序的须要,这两个不一样的区域能够独立使用或一块儿使用。
若是但愿从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选项对象。
此选项类包含用于控制配置存储和ConfigurationDbContext的属性。
ConfigureDbContext
Action <DbContextOptionsBuilder>类型的委托用做回调以配置基础ConfigurationDbContext。 若是EF直接与AddDbContext一块儿使用,则委托能够以相同的方式配置ConfigurationDbContext,这容许使用任何EF支持的数据库。
DefaultSchema
容许为ConfigurationDbContext中的全部表设置默认数据库模式名称。
若是但愿从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选项对象。
此选项类包含用于控制操做存储和PersistedGrantDbContext的属性。
ConfigureDbContext
Action <DbContextOptionsBuilder>类型的委托用做回调以配置基础PersistedGrantDbContext。 若是EF直接与AddDbContext一块儿使用,则委托能够以相同的方式配置PersistedGrantDbContext,这容许使用任何EF支持的数据库。
DefaultSchema
容许为PersistedGrantDbContext中的全部表设置默认数据库模式名称。
EnableTokenCleanup
指示是否将从数据库中自动清除过期条目。 默认值为false。
TokenCleanupInterval
令牌清理间隔(以秒为单位)。 默认值为3600(1小时)。
跨不一样版本的IdentityServer(以及EF支持)极可能会更改数据库架构以适应新的和不断变化的功能。
咱们不为建立数据库或将数据从一个版本迁移到另外一个版本提供任何支持。 您须要以组织认为合适的任何方式管理数据库建立,架构更改和数据迁移。
使用EF迁移是一种可行的方法。 若是您确实但愿使用迁移,请参阅EF快速入门以获取有关如何入门的示例,或参阅有关EF迁移的Microsoft文档。
提供了基于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设置)。