来自IdP的Saml响应后的自定义身份验证

时间:2018-08-01 18:43:29

标签: angular servicestack saml saml-2.0

关于我们环境的一些背景:

  • 带有CustomAuthProvider的Service Stack SP
  • Angular 6前端
  • 企业联合会IdP

用户可以通过单击按钮向我们进行身份验证,然后我们的SP将其重定向到IdP。一旦他们通过IdP进行身份验证,它将通过HTTP-POST向我们发送回响应给我们的ACS。

从那里我们如何通过我们对用户进行身份验证?我们是否应该将重定向发送回浏览器,然后我们的登录页面将发出正常的/ auth / credentials请求?我们的/ auth / credentials路由使用用户名和密码,而SAML响应中没有用户名和密码。这部分对我来说很混乱,任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您的应用程序不进行身份验证,IdP进行身份验证。您的应用授权。 IdP可能会通过包含属性的断言通过重定向到您的ACS(对于SAML2)进行响应。您可以要求IdP返回eduPersonEntitlement,其值可能为:

https://yourapp.com/access

并且如果断言中存在此属性,那么您可以考虑对用户进行身份验证和授权,因此只需为他们创建会话等即可。

如果您的应用具有细粒度的访问控制,则可以使IdP根据用户身份释放具有不同值的属性,即,IdP了解其帐户的信息(例如LDAP OU)以获得更细粒度的授权:

http://yourapp.com/access/private/staff

您的应用程序永远都不会看到其身份证明,就像用于IdP的那样。您的应用程序关心的只是SAML断言,其中包含在用户将其凭据提供给IdP进行身份验证后到达ACS的属性。

如果您需要为用户提供个性化服务,例如应用程序设置或外观等,通常可以使用NameIDeduPersonTagetedID来完成。它们本质上是不透明的标识符,将在该用户的声明中到达。每当用户“登录”(在IdP上),您的应用程序将获得相同的NameID或eduPersonTagetedID值。如果您需要更多信息,例如其名称或电子邮件地址,则可以根据数据隐私法要求IdP释放这些信息。您的应用永远不需要身份验证用户,因为IdP就是这样做的。您的应用只需要授权访问并使用IdP已发布的属性为其创建配置文件即可。