IdentityServer Topics(1)- 啟動說明
啟動
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。