1

我們需要爲我們構建的多個應用程序創建一箇中央auth服務器,同時仍然具有特定於該特定應用程序的角色和聲明。讓我用微軟的各種服務進行類比解釋。客戶端特定的聲明身份server4使用asp.net核心身份

我註冊了一個Microsoft帳戶,因此我的身份驗證信息存儲在中央服務器中。現在我登錄使用帳戶,並假設我登陸在account.microsoft.com,現在我去msdn點擊登錄,它將我帶到auth服務器上的登錄頁面,然後到同意屏幕並返回到msdn登錄,現在我去到Xbox並做同樣的事情。現在MDSN和XBOX是兩個完全不同的應用程序,每個應用程序都有自己的Api,Web應用程序和移動應用程序,但使用相同的auth服務器。到目前爲止,我一直在使用Identity Framework製作獨立的應用程序,並且對此非常滿意,但這比迄今爲止我所做的要複雜得多。我正在瀏覽IdentityServer4以獲得一箇中央認證服務器,並且已經完成了官方doc站點上的所有教程,所以我對這些概念有一個基本概念。

我需要的是讓每個應用程序都能夠指定它自己的一組角色和聲明,甚至沒有任何有關其他應用程序的知識,並且中央服務器也將啓用外部身份驗證,因此ASP.NET核心身份在中央服務器。

當前的架構

  1. 中央身份服務器(使用IdentityServer4,ASP.NET核心身份,實體框架)
  2. 一箇中央數據庫的中央服務器
  3. 多個應用程序集(API,MVC應用程序,Xamarin移動應用)
  4. 一個或多個數據庫的每個應用程序按照需要

的事情,我很能夠實現至今

  1. 自定義身份資源來獲得存儲在數據庫用戶的權利要求,但如果我增加一個角色,它多次返回我的角色的次數爲API資源和客戶
的計數

,我在我的腦海裏想出了

  1. 存放在專用的DB權利要求和角色,但我想我將要面對這些問題
      01備選方案
    • 接線認證邏輯過於費力,因爲它必須先從中央服務器獲取身份,然後從應用程序特定數據庫獲取聲明
    • 不知道如何使用asp來完成此任務。在客戶端網絡身份
    • 中央auth服務器上未使用的表
    • 跨應用

這些堆棧溢出問題AUTH邏輯重複獲得最多的最接近但不是精確解

把我帶向正確的方向任何指導將幫助

編輯#1:好像有人檢舉這個問題作爲題外話,所以只是想澄清,我期待對於使用身份服務器4和asp.net核心身份的特定代碼/解決方案,並沒有提供一些建議,儘管除了答案之外的任何指導都可以得到更好的說明和理解,但只是代碼就足夠了,我覺得它是按照社區的指導方針。

編輯#2 我試圖做的客戶端授權由@ travis.js的建議,但我無法理解如何實現對客戶端類似[授權(角色=「管理員」)

索賠
+0

您需要指定到目前爲止所嘗試的內容以及您在代碼中遇到的問題?欲瞭解更多信息,你可以隨時參考Idsrv4文檔 – Rohit

+0

@Rohit我已經寫了我能夠實現的東西,直到現在即自定義身份資源獲取用戶聲明存儲在分貝,但如果我添加一個角色,我面臨的問題它會多次返回我角色的次數,因爲API資源和客戶端的計數以及我需要的每個應用程序都能夠指定它自己的一組角色和聲明,甚至沒有任何有關其他應用程序的知識也是我已經寫了我已經完成了官方文檔的所有教程,並閱讀了他們的github代碼文件的所有文檔 –

+0

您是否根據客戶端定義了範圍?您正在使用什麼類型的身份驗證模式? – Rohit

回答

1

我認爲你的替代解決方案是「正確的」。

解決您的顧慮:

太多精力佈線了權威性的邏輯,因爲它必須先獲得 從中央服務器的身份,然後得到的 應用特定要求DB

聽起來像是對我來說正確的努力量。中央服務器進行身份驗證,每個應用程序都有自己的授權。

不知道我怎麼可以在客戶端

使用asp.net身份去做你並不真的需要客戶端/應用程序方面ASP.NET身份。身份由中央服務器處理。中央auth服務器

非問題上

未使用的表。但是,您仍然可以在更宏觀的層面上使用該表來達到其預期目的。跨應用程序

複製AUTH邏輯的這並不聽起來像邏輯的重複。中央服務器執行身份驗證和身份驗證,每個應用程序負責確定其自己的授權邏輯。

+0

我試圖按照建議在客戶端進行授權,但我無法理解如何在客戶端實現類似[Authorize(Roles =「Admin」)]的聲明 –

+0

您需要將「roles」聲明包含在你的IdentityClaims列表/表格 –

+0

你能指導我如何,因爲如果我在數據庫中爲身份服務器項目提出索賠時遇到問題,這對所有客戶端來說都很常見,而且每個令牌都有所有客戶端的聲明,弄清楚如何爲每個客戶做到這一點 –

相關問題