2016-05-23 65 views
0

我設置的身份server3與微軟的身份存儲在ef 6 我可以在/ token端點「登錄」,但是當我嘗試訪問/ userinfo時,我得到一個範圍錯誤。 當我嘗試將範圍添加到我的/令牌登錄時,他們不起作用。 試圖編輯客戶端添加範圍並仍然卡住。 客戶端是資源所有者流。 只需要獲取userinfo,這樣我就可以獲取用戶的名稱和角色。由於無效的範圍錯誤,canot調用userinfo

1)我需要什麼範圍才能訪問用戶信息終點?我所有的嘗試都沒有足夠的範圍。 2)我已經編輯了sql數據庫和代碼,以允許我的客戶端有更多的範圍,但它似乎並沒有工作。如何調試?

另外我使用存儲在sql和id服務器ef中的asp.net身份來存儲令牌,客戶端,範圍和祕密,以及我正在嘗試但我不確定它是否正確。表已創建,但我在令牌表事件中看不到任何行,儘管我已發出令牌。我現在有兩個數據庫:一個使用token/client/scope,另一個使用aspnet用戶和角色。 我需要製作這個數據庫嗎?

它看起來像我的問題的一部分是與身份服務器示例使用實體框架來存儲客戶端,範圍和相關數據。 它看起來像範圍和/或範圍聲明和/或客戶端列表中缺少一些項目,所以當我嘗試使用範圍參數登錄時,我無法在範圍表中找到該行時被拒絕。 工作如何解決這個問題,我希望得到它的工作....

做一個範圍需要範圍聲明?需要看看我能否找到相關信息。

回答

0
+0

好吧,這有點幫助,但仍然讓我卡住,我沒有得到範圍打開工作與令牌請求,但用戶信息端點只給了我一個主題ID,所以我試圖添加「角色」我的範圍並且我無法在/令牌獲得登錄,無效範圍錯誤。 – figuerres

+0

然後啓用並檢查日誌。它將包含您的所有錯誤,以便您可以調試和診斷問題。 –

+0

我已經解決了問題,並會盡快發佈答案,源代碼調試幫助我瞭解發生了什麼。 – figuerres

0

如果有疑問,我只需從Github下載當前源代碼並應用斷點,而不是使用Nuget包。

剛剛從記憶(所以這可能不完全準確)。

我相信UserInfoEndpoint調用UserService.GetProfileDataAsync。 UserInfoEndpoint正在接受作用域,但GetProfileDataAsync只接受聲明爲「RequestedClaimTypes」。因此,在它之間的某個地方,它將把範圍發送到端點並獲取屬於範圍內的所有聲明類型的列表。

這裏要記住的最重要的事情是,您傳遞給UserInfoEndpoint的範圍必須是Identity範圍。端點不會返回屬於資源作用域的聲明。

所以只是一個快速破敗...

  1. 服務器接收發送給UserInfoEndpoint
  2. 收到的作用域範圍,只着眼於分配給身份作用域
  3. 查找聲明類型身份作用域
  4. 將聲明類型列表傳遞給GetProfileDataAsync作爲「context.RequestedClaimTypes」。
  5. 此時,您的自定義邏輯將確定RequestedClaimTypes如何轉換爲IssuedClaims。

我的猜測是您正在將資源範圍傳遞給UserInfoEndpoint。

0

終於搞定了我的問題: 我需要更多的範圍在我的sql數據庫中,使用實體框架的v3的id服務器示例沒有一些與身份服務器示例期望的範圍相同的項目,登錄令牌調用失敗且範圍無效。 我編輯了範圍和客戶端的c#代碼,以獲得我需要的東西,然後重新創建sql表,然後它開始工作。 我還添加了一個新的範圍和範圍聲明,以添加我們的應用程序需要的非標準聲明。

我確實附加了源代碼讓我調試真正幫助,因爲我可以按照邏輯並查看它沒有工作。這是一個巨大的幫助。 稍後我會看到,如果我可以向源文章發佈樣本丟失的是真正的問題。 如果我們有關於如何獲得標準用戶信息/個人資料聲明的指導,它可能也會很好。我知道了,但也有一些源代碼調試,看看id服務器如何調用存儲以獲取信息,以便我能夠理解如何接入並將數據傳遞給調用者。

底線是樣本在至少一個地方有不同的範圍集和索賠,這是關鍵問題。

剩下的事情就是學習如何使用範圍和範圍聲明爲應用程序需求添加到用戶信息端點。