2017-08-11 64 views
0

我已經實現了IPersistedGrantStore,並且定義了一個客戶端,它的屬性RequireConsent和AllowRememberConsent設置爲true。我還從該客戶端中刪除了脫機訪問範圍,因爲根據OAuth規範,我已經在某處讀取了同意總是被強制要求脫機訪問範圍的請求。 當我第一次進入登錄屏幕時,我收到同意視圖,點擊允許並記住我的決定,我可以看到數據庫表PersistedGrants中的記錄添加了類型user_consent。下一次我嘗試登錄時,通過執行IPersistedGrantStore從數據庫獲取該記錄,但仍然顯示同意視圖。如果我再次單擊「允許」,DB將引發異常,因爲IS4正嘗試使用相同的鍵插入另一個PersistedGrant記錄。身份服務器4持久授權沒有被使用

我忽略了一些可以使其表現如預期的設置嗎? PS。我已經實現了所有主要的商店,並且所有內容都保存在SQL Server數據庫中,而不是使用任何InMemory商店。

回答

0

調試的大量後,這裏的問題是什麼: _ScopeListItem.cshtml從6_AspNetIdentity樣品,有代碼

@if (Model.Required) 
{ 
    input type="hidden" name="ScopesConsented" value="@Model.Name" /> 
} 

這一節這顯然只有當渲染所需的範圍標記。標記爲必需的那些範圍只是發佈到控制器操作的範圍。 在我的情況下,我有一個客戶端請求OpenId和Profile作爲標準範圍,還有三個範圍由我的ApiResource定義。誠然,我沒有按要求標記Api範圍,但問題在於默認情況下不需要Profile範圍。 因此,當保存同意時,Data屬性不包含Profile範圍,並且在所有後續登錄嘗試中發生請求和同意作用域不匹配,從而觸發了同意過程。