使用Identity Server 3提供对用户组的访问

时间:2016-12-06 05:47:56

标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api identityserver3 openid-connect

我目前正在处理的应用程序是一个巨大的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相对较新,并且无法在线查找任何内容,并且非常感谢任何潜在客户。

1 个答案:

答案 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"。

最后,组和角色之间的区别通常更多的是应用程序语义问题,即它们的存储方式存在物理差异。通常,可以执行"管理员"应用程序的角色只是一组用户。这是应用程序处理使组成为角色的组的用户的方式。