自定义用户字段的 SAML 2.0 最佳实践

SAML 2.0 best practices for custom user fields

我们有一个现有的网络应用程序,它与自己的用户一起工作,存储在本地 SQL 服务器数据库中,每个用户都有访问特定内容的特定权限。

一位新客户有兴趣使用此应用程序,但他们的要求是它应该集成 SAML 2.0。

现在,我是 SSO 的新手,但我假设他们希望这样做,以便所有用户管理都在他们的位置完成,并且他们的用户可以使用相同的凭据登录他们的任何服务。

但是,在我们的 Web 应用程序中定义的用户权限是特定于应用程序的;它们在我们的应用程序之外没有任何意义。所以我假设这些字段应该在我们这边存储和管理,而不是在身份提供商处管理?

但是最好的启动方式是什么?每当用户第一次登录时,我都可以在本地创建一个空的用户记录,但如果没有适当的权限,他实际上将无法做任何事情。我可以给他默认的权限设置,但至少应该有1个管理员来分配其余用户的权限。在身份提供者处询问附加字段以启动用户使用特定服务是否很常见?

这可以使用在 SAML2 属性中发送的权利来完成。例如如果您的应用程序有普通用户配置文件,您可以要求 IdP 释放一个属性,例如 SAML2 中已知的 eduPersonEntitlementurn:oid:1.3.6.1.4.1.5923.1.1.1.7。如果 IdP 所有者同意发布此属性,您可以就该属性的值与他们商定一个受控词汇表。

因此,当普通用户使用 SAML2 登录到您的应用程序时,他们的属性到达一个 AttributeStatement,其中包含一组 SAML2 Attribute 个实例,您可以查找 urn:oid:1.3.6.1.4.1.5923.1.1.1.7。如果它的值可能是 https://yourapp.com/entitlement/user,您可以使用普通用户帐户设置它们。如果它们的值可能是 https://yourapp.com/entitlement/admin,您可以使用管理员权限设置它们。

请注意将他们已经拥有的(如果有的话)与他们传入的 SAML2 权利进行比较,以防他们不再是管理员。 IdP 决定谁是普通用户,谁是管理员,但这取决于他们自己的决定。你只关心urn:oid:1.3.6.1.4.1.5923.1.1.1.7

的价值

整套 eduPerson 属性是 here