我们有一个现有的Web应用程序,它与自己的用户一起工作,存储在本地SQL服务器数据库中,每个用户都有访问特定内容的特定权限。
新客户对使用此应用程序感兴趣,但他们的要求是它应该集成SAML 2.0。
现在,我是SSO的新手,但我认为他们想要这样,所以所有用户管理都在他们的位置完成,并且他们的用户可以使用相同的凭据登录他们的任何服务。
但是,我们的Web应用程序中定义的用户权限是特定于应用程序的;它们在我们的申请之外没有意义。所以我假设这些字段应该在我们的末尾保存和管理,而不是在身份提供者处管理?
但是最好的方法是什么呢?每当用户第一次登录时,我都可以在本地创建一个空的用户记录,但如果没有适当的权限,他将无法做任何事情。我可以给他默认的正确设置,但应该至少有一个管理员来分配剩余用户的权限。在身份提供者处询问其他字段以启动特定服务的用户是否常见?
答案 0 :(得分:0)
可以使用SAML2属性中发送的权利来完成此操作。例如如果您的应用程序具有正常的用户配置文件,则可以要求IdP发布SAML2中已知的string computername = "computer1"
string groupName = "Administrators"
string usernameToRemove = "testUser"
using (PrincipalContext pc = new PrincipalContext(ContextType.Machine, computername))
using (GroupPrincipal localGroup = GroupPrincipal.FindByIdentity(pc, IdentityType.Name, groupname))
foreach (Principal groupUser in localGroup.GetMembers())
if (groupUser.SamAccountName == usernameToRemove)
{
localGroup.Members.Remove(groupUser);
localGroup.Save();
}
或eduPersonEntitlement
等属性。如果IdP所有者同意发布此属性,您可以同意使用受控词汇表来获取属性的值。
因此,当普通用户使用SAML2登录您的应用程序并且他们的属性到达urn:oid:1.3.6.1.4.1.5923.1.1.1.7
并且包含SAML2 AttributeStatement
个实例的集合时,您可以查找Attribute
。如果它的值为urn:oid:1.3.6.1.4.1.5923.1.1.1.7
,则可以使用普通用户帐户进行设置。如果它们的值可能为https://yourapp.com/entitlement/user
,则可以使用管理员权限设置它们。
请小心将他们已有的内容(如果有的话)与其传入的SAML2权利进行比较,以防他们更长时间是管理员。 IdP决定谁是普通用户,谁是管理员,但由他们来决定。你关心的只是https://yourapp.com/entitlement/admin
完整的eduPerson属性集是here