2016-01-27 25 views
1

我們有一箇中央UserManagerApplication,用於管理多個應用程序的用戶和角色。在這個應用中,我們通常設置如何在聲明中爲特定於應用程序的角色建模

  • 用戶A是角色管理員爲應用1
  • 用戶A在角色閱讀器應用2

問題:當應用2請求的範圍(比如scopeApp1),其中包括角色,Reader和Admin角色聲明都將被返回,因爲它們是在聲明類型上進行過濾而不是範圍。

問:我如何只請求角色的一個子集?

我們使用自定義userservice,從我的理解,我可以過濾掉返回的權利要求的地方是這個方法,我不能找到一個方法來找出客戶要求什麼範圍:

public override Task GetProfileDataAsync(ProfileDataRequestContext context) 

至於我可以看到我的選擇是:

  • 包括包含在角色(App1Admin,App2Reader等)
  • 爲每個應用程序創建一個新的ClaimType應用程序名稱。 App1Role,App2Role
  • 我錯過了一些東西明顯,需要更好地瞭解

感謝所有幫助

Larsi

+0

上下文應該有客戶端ID。 – leastprivilege

+0

@leastprivilege謝謝。我已經添加了答案,因此問題可能會被關閉 – Larsi

回答

0

我指着一個良好的閱讀https://github.com/IdentityServer/IdentityServer3/issues/474描述問題。

另外,我在CustomUserService中添加了無法使用範圍的聲明。當我而不是一個自定義ClaimsProvider添加的權利要求我得到一個稍微不同的簽名

public override async Task<IEnumerable<Claim>> GetAccessTokenClaimsAsync(ClaimsPrincipal subject, Client client, IEnumerable<Scope> scopes, ValidatedRequest request) 

,讓我弄明白請求範圍。

相關問題