使用来自外部身份提供者的Saml响应

时间:2018-03-22 08:52:25

标签: javascript single-sign-on saml saml-2.0 onelogin

我无法将我的应用程序配置为使用来自外部身份提供程序(在本例中为OneLogin)的SAML响应。我的应用程序有一个javascript(angular5)前端和.NET后端。

以下是我们使用自己的身份提供商和服务提供商时的当前工作流程。

  1. 用户在浏览器中导航到我们的应用程序,并在从API请求资源时收到未经授权的401。
  2. 用户被重定向到登录页面。
  3. 用户输入发布到我们服务器端身份提供商的凭据。
  4. 如果用户已通过身份验证,则身份提供程序会向客户端返回SAML响应。
  5. 客户端将SAML响应发布给服务提供商。
  6. 服务提供商返回访问API其余部分所需的令牌。
  7. 现在,客户已要求我们使用OneLogin集成其外部身份提供商。以下是我理解的新工作流程。

    1. 用户在浏览器中导航到我们的应用程序,并在从API请求资源时收到未经授权的401。
    2. 用户被重定向到OneLogin(外部身份提供商)页面。
    3. 用户输入由OneLogin验证的凭据。
    4. OneLogin将发布到我们提供的服务提供商端点,其中SAML响应为HTTP Post中的表单数据。
    5. 如果发布成功,用户将被重定向到配置OneLogin时提供的任何网址。
    6. ?????? (我们的前端仍然不知道用户是谁或者他们是否经过身份验证)。
    7. 目前,我们的角度前端(客户端)和.NET后端(服务器)之间的所有通信都是由客户端启动的。我真正需要的是客户端接收由OneLogin发布的SAML响应表格数据,这样我就可以与我们的服务提供商发起授权并在客户端收到相应的响应,但据我所知,我赢了#39;能够使用表单数据客户端。我希望我可以将外部身份提供程序重定向到我们前端的页面并将该saml响应编码为查询参数,但我没有看到任何方法。

      我觉得有些东西我缺少,但所有OneLogin示例似乎都是与服务器端服务提供商通信的OneLogin身份提供商,而没有提到客户端。我可以使用一些帮助来更好地理解我需要做些什么来完成我的目标,通知客户端用户已经过身份验证和授权。

1 个答案:

答案 0 :(得分:2)

您使用OneLogin描述的是SAML2 Web浏览器SSO配置文件。如您所见,它都是通过浏览器完成的。用户从客户端重定向到他们登录的IdP。然后,IdP将SAMLResponse发布到后端的属性消费者服务(ACS)URL。 ACS的工作是解码SAMLResponse并解析其中包含的SAML2属性。如果需要,它可以在该点创建一个新会话。

此时后端现在知道用户是谁。因此,您可以启动另一个重定向,将浏览器发送到另一个URL,该URL带有一个参数,让客户知道它必须从后端检索用户详细信息。也许是某种/sso?token=something网址。然后,客户端可以要求后端返回JSON,其中可能包含token引用的用户信息,即后端在验证属性后创建的某种会话。