0

我想問你澄清當IdentityServer 4與ASP.NET身份集成。ASP.NET核心標識和身份服務器4 - [角色,聲明和身份資源]

我正在處理兩個數據庫上下文。 Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext<IdentityUser>IdentityServer4.EntityFramework.DbContexts.ConfigurationDbContext

Identity Server 4正在使用AspNetIdentity .AddAspNetIdentity<IdentityUser>()

所以IdentityUser已經分配了IdentityUserClaims,並且在成功驗證之後它在JWT令牌中得到了正確的反映。

現在的問題是,來自IdentityServer4的IdentityResourceIdentityClaim:UserClaim是什麼ConfigurationDbContext?由於現在從aspnet身份使用聲明,因此完全不使用此實體。我對嗎?

另一個問題是ApiScopeClaims如何在遊戲中?它們仍然由Identity Server使用,因爲ApiScope爲其頒發了令牌。對?但現在我要保持同步ApiScopeClaimIdentityUserClaim這是來自不同的數據庫上下文。

最後一個問題是關於IdentityRolesIdentityRoleClaims,它們與IdentityUserClaims不一樣。背後有什麼想法?在我的想法中,角色是針對特定業務角色的索賠分組,以便於管理,因此角色不應定義新索賠,但應參考IdentityUserClaims。另外,我創建了分配給用戶的角色,分配給範圍的相應索賠類型,結果是 - 分配給角色和用戶的索賠具有此角色,但未包含在JWT中。爲什麼?

謝謝你的回答。

回答

0

IdentityResource是一類或一組索賠。每個IdentityResource可以有許多IdentityClaims,它們是對AspNetUserClaims中的實際索賠的參考。內置的IdentityResources是openid和profile。

ApiScopeClaims是API資源的分級結構的一部分(而不是上面提到的身份資源。)

ApiResource --has many--> ApiScopes --has many--> ApiScopeClaims. 

添加權利要求類型的ApiScopeClaim將附加一個AspNetUserClaim(如果有的話)到access_token當用戶向ApiScope發出請求時。

一個IdentityRoleClaim(即AspNetRoleClaim)只是一個信息,你可以就一個特定的角色加以解決;它與用戶無關,而僅與角色本身有關。

聽起來像您想爲您的邏輯分組索賠創建一個IdentityResource,然後在IdentityClaims中定義這些索賠類型。但是,您需要一種方法來首先找出用戶的角色,以便請求scope參數中適當的IdentityResource。或者實施其中一個IdentityServer接口,如IProfileService以在IdentityServer實例上執行此類工作。

+0

它是如何與'IdentityRoleClaims'?它們是'AspNetIdentity'的一部分,但它們是否包含在由IdentityServer4發佈的JWT令牌中?我嘗試過,但他們不包括在內,也沒有角色要求。 –

+0

當API資源需要聲明「角色」時,角色包含在適當的值中。但如何包括角色聲明? –

+0

將「角色」聲明類型添加到「openid」身份資源 –