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設置)。