SAML2.0 身份验证流程

SAML 指定了三个关键角色:

  • 身份提供者(IdP)

    提供和维护用户身份的一方。这可以是 ADFS 等目录服务或自定义数据库解决方案。

  • 服务提供商(SP)

    服务提供者是用户尝试登录的实际服务。这可以是网站,应用程序或用户应该需要登录的任何服务。

  • 校长/用户

    实际用户发起请求,或尝试从服务提供商 (SP) 访问资源。

主要的 SAML 用例是基于 Web 的 SSO ,其中 SAML 过程由用户浏览器内的一组重定向进行,其中用户充当 IdP 和 SP 之间的令牌载体。

使用 SAML 的 Web Based SSO 有两个流程 :

  • 身份提供商(IdP)已启动

    用户登录 IdP,然后转发到选择的 SP。例如,用户登录到企业内部网并向其显示所有可用的应用程序。

  • 服务提供商(SP)发起

    用户尝试登录到应用程序,但转发到 IdP 以执行实际身份验证。例如,用户尝试登录到远程 SaaS 应用程序,但转发到公司 IdP,以便用户可以使用其公司凭据登录到远程应用程序。

SP 启动的流程可通过以下工作流程大大可视化:

StackOverflow 文档 资料来源: 维基百科

  1. 用户尝试访问特定应用程序或网页上的资源
  2. 用户指定他尝试使用外部 IdP 登录。SP 将生成 SAML 断言,并将传递此信息(通常通过 POST 或 GET 变量),同时将你转发给 IdP
  3. 用户将根据 IdP 进行身份验证
  4. 已签名的断言和令牌由 IdP 生成
  5. 签名的断言和令牌被转发回(再次使用 POST 或 GET 变量)到 SP,如果成功,则在 SP 上启动会话
  6. 此外,用户能够在 SP 与 SP 进行活动会话时(即通过 cookie)从 SP 请求更多资源,因此不必在每次请求时使用 IdP 进行身份验证。