我目前正在处理的应用程序是一个巨大的ASP.NET MVC Web应用程序,它使用传统的Windows身份验证模型。我们正尝试使用Identity Server 3和Open ID Connect迁移到Single Sign On模型。
回到我的问题,在使用Identity Server时,有没有办法/解决以用户组为基础的访问?这里的问题是我的用户组可以是基于角色的组或Active Directory组。我正在寻找像InMemoryGroup这样的东西(类似于InMemoryUser)。
为可以基于角色的用户组模仿以下内容:
new InMemoryUser
{
Username = "harry",
Password = "thisispassword@123",
Subject = "1",
Claims = new Claim[]
{
new Claim(Constants.ClaimTypes.Name, "Harry Potter"),
new Claim(Constants.ClaimTypes.GivenName, "Harry"),
new Claim(Constants.ClaimTypes.FamilyName, "Potter"),
new Claim(Constants.ClaimTypes.Email, "harry.potter@hogwarts.com"),
new Claim(Constants.ClaimTypes.EmailVerified, "true", ClaimValueTypes.Boolean),
new Claim(Constants.ClaimTypes.Role, "Administrator"),
}
}
我对Identity Server和Open ID Connect相对较新,并且无法在线查找任何内容,并且非常感谢任何潜在客户。
答案 0 :(得分:2)
要表示用户是群组成员的事实,您只需添加声明即可。你可以添加:
new Claim("Group", "Hogwarts Student")
到你的内存用户。索赔表明Harry是“霍格沃茨学生”的成员。组。这里有一些你想要注意的事情。被调用的构造函数是:
new Claim(string claimType, string claimValue)
Identity Server在Constants类中提供了一些标准的,但您可以自己编写。此外,您可以拥有多个群组声明,因此您可以拥有
new Claim("Group", "Hogwarts Student"),
new Claim("Group", "Gryffindor House)
如果你想看看Harry是否在" Gryffindor House"群组,您只是搜索索赔类型等于"群组"并且索赔价值等于" Gryffindor House"。
最后,组和角色之间的区别通常更多的是应用程序语义问题,即它们的存储方式存在物理差异。通常,可以执行"管理员"应用程序的角色只是一组用户。这是应用程序处理使组成为角色的组的用户的方式。