在将IdentityServer 4与ASP.NET Identity集成时,我想请您澄清一下。
我正在使用两个数据库上下文。
Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext<IdentityUser>
和IdentityServer4.EntityFramework.DbContexts.ConfigurationDbContext
。
Identity Server 4正在使用AspNetIdentity .AddAspNetIdentity<IdentityUser>()
。
因此IdentityUser
已分配IdentityUserClaims
,并且在成功进行身份验证后,它已在JWT令牌中正确反映。
现在问题是,IdentityServer4 IdentityResource
中的IdentityClaim:UserClaim
和ConfigurationDbContext
是什么?由于现在使用来自aspnet身份的声明,因此根本不使用该实体。我是对的吗?
另一个问题是游戏中ApiScopeClaims
现在如何?它们仍由Identity Server使用,因为ApiScope
为其颁发了令牌。对?但是现在由我来保持同步ApiScopeClaim
和IdentityUserClaim
来自不同的数据库上下文。
最后一个问题与IdentityRoles
和IdentityRoleClaims
有关,与IdentityUserClaims
不同。背后的想法是什么?在我的想法中,角色是对特定业务角色的声明进行分组以便于管理,因此角色不应定义新声明,而应定义IdentityUserClaims
的参考集。另外,我创建角色,分配给用户,分配给范围和结果的相应声明类型是 - 分配给角色的声明和具有此角色的用户不包括在JWT中。为什么呢?
感谢您的回答。
答案 0 :(得分:0)
card
是一类或一组索赔。每个IdentityResource
都可以包含多个IdentityResource
,这些IdentityClaims
是AspNetUserClaims
中实际声明的实际参考。内置的IdentityResources
是开放的和个人资料。
ApiScopeClaims是Api资源层次结构的一部分(与上面提到的身份资源相反。)
ApiResource --has many--> ApiScopes --has many--> ApiScopeClaims.
当用户向ApiScopeClaim
发出请求时,向AspNetUserClaim
添加声明类型会将access_token
(如果存在)附加到ApiScope
。< / p>
IdentityRoleClaim
(即AspNetRoleClaim
)只是您可以了解的有关特定角色的信息;它与用户无关,只与角色本身有关。
听起来好像要为声明的逻辑分组创建IdentityResource
,然后在IdentityClaims
中定义这些声明类型。但是,您需要一种方法来首先找出用户的角色,以便在IdentityResource
参数中请求相应的scope
。或者实现一个IdentityServer接口,如IProfileService
,以在IdentityServer实例上执行此类工作。