IdentityServer4【Topic】Consent

Conset這個概念在Identityserver4中是表示要當前用戶對第三方應用對資源請求的一個確認,它會被作成一個頁面。git

術語映射:github

Consent page--確認頁面,我喜歡叫作Consent頁面。瀏覽器

outcome of the consent/outcome--確認結果/結果ui

Consent

確認url

在請求受權期間,若是IdentityServer 要求當前用戶確認一些信息,瀏覽器會被重定向到Consent頁面。spa

Consent用來讓一個終端用戶爲一個第三方應用獲取受保護的資源進行受權,這個受保護的資源多是Identity Resource,或者是API Resource。Consent對於第三方應用來講是一個典型的應用,固然,也能夠在Client中設置。code

Consent Page

確認頁面orm

若是想讓用戶進行受權確認,就必須提供一個Consent頁面。在這裏由詳細的說明。server

一個Consent頁面一般會渲染一些名字,包括用戶的名字(在Identityserver的登錄中已經獲取了)、第三方應用的名字、第三方應用的logo、第三方應用的其餘信息、第三方應用請求的資源列表(用Scope來表示)。此外,Consent 頁面也容許用戶使用「記住」這個選項來配置下次一樣的客戶端訪問時不用繼續重定向到Consent頁面。對象

一旦用戶提供了確認信息,Consent頁面必須通知Identityserver,而且瀏覽器隨後會被重定向到受權端點。

Authorization Context

受權上下文

Identityserver會傳遞一個returnUrl參數給Consent頁面,這個參數包含了受權請求的一些參數。這些參數爲Consent頁面提供了上下文的信息,而且這些信息可以被IIdentityServerInteractionService 讀取。GetAuthorizationContextAsync方法會返回一個AuthorizationRequest實例。

關於客戶端和資源的更多的信息能夠從IClientStore和IResourceStore這兩個接口中獲取。

Informing IdentityServer of the consent result

將確認結果通知到IdentityServer

IIdentityServerInteractionService 的GrantConsentAsync方法讓Consent頁面通知Identityserver,這個方法將Conset的結果傳入,Consent的結果多是用戶點擊了贊成,或者點擊了取消/拒絕。

Identityserver會臨時的存儲Consent的結果。默認狀況下會使用Cookie來存儲。由於它只須要將這個Consent的結果傳遞到受權端點這麼點兒時間,因此用Cookie來暫時的存儲就足夠了。

這個臨時的存儲不一樣於用戶點擊了「記住」選項,後者會被持久化。若是但願在Consent頁面和受權重定向之間使用其餘持久性,那麼能夠實現IMessageStore<ConsentResponse>並在DI中註冊實現

Returning the user to the authorization endpoint

將用戶返回到受權端點

一旦Consent頁面通知了IdentityServer確認結果,用戶將會被重定向到returnUrl(裏面由一個redirect_url參數)。你的Consent頁面應該經過驗證returnUrl是有效的來防止打開重定向。這個功能能夠用IIdentityInteractionService提供的IsValidReturnUrl 來解決。再或者,若是GetAuthorizationContextAsync 返回一個不爲空的對象,你一樣能夠認爲returnUrl是有效的。

相關文章
相關標籤/搜索