📜  SAML身份验证

📅  最后修改于: 2021-08-25 17:39:09             🧑  作者: Mango

SAML是基于XML的框架,代表安全性声明标记语言。让我们看看如何使用SAML启用SSO(单点登录)。 SSO是用于一种登录方法的术语,其中公司以其用户只需登录一次即可登录所有这些应用程序的方式配置其所有Web应用程序。

示例–当一个人登录gmail.com时,他们可以访问YouTube,Google云端硬盘和其他Google服务,而不必分别登录每个服务。

SAML身份验证流程基于两个实体–

  1. 服务提供商(SP)– SP从IdP接收身份验证,并将授权授予用户。
  2. 身份提供商(IdP)– IdP对用户进行身份验证,并将其凭据以及对服务的访问权限发送给SP。

在上面给出的示例中,SP将为Gmail,IdP将为Google。 SAML启用了SSO,并且如上所述,用户可以登录一次,并且将使用相同的凭据登录其他SP。 SAML身份验证工作流程–

  1. 用户尝试登录Gmail。
  2. Gmail会生成SAML请求。
  3. 浏览器将SAML请求发送到Google,该浏览器将解析该请求,对用户进行身份验证并创建SAML响应。此SAML响应已编码并发送回浏览器。
  4. 浏览器将此SAML响应发送回Gmail进行验证。
  5. 如果成功验证了用户,则他们将登录到Gmail。

SAML请求–

以下定义了SAML请求中的一些重要术语–

  1. ID –特定SAML请求的标识符。
  2. 发行者–服务提供商(SP)的名称。
  3. NameID –用于标识用户的用户名/电子邮件地址或电话号码。
  4. AssertionConsumerServiceURL – SP的SAML URL接口,IP在其中发送身份验证令牌。

SAML响应–

SAML响应包括两个部分–

  1. 断言–
    这是一个包含用户详细信息的XML文档。其中包含用户登录事件的时间戳和使用的身份验证方法(例如2因子身份验证,Kerberos等)
  2. 签名 –
    它是Base64编码的字符串,可以保护断言的完整性。 (如果攻击者试图将断言中的用户名更改为受害者的用户名,则签名将阻止黑客以用户身份登录)。

密钥生成–

身份提供者(IdP)生成一个私钥和一个公钥。它使用私钥对断言进行签名。公用密钥与服务提供商(SP)共享,后者使用它来验证SAML响应,然后使用户登录。黑客利用的SAML漏洞–

  1. 签名未检查–
    如果某人能够在SAML响应中更改名称ID(用户名)并由于缺少签名检查过程而以其他人身份登录。
  2. 仅在签名存在时检查签名–
    如果有人更改了名称ID值并删除了签名,则浏览器将收到响应,并且仍然能够以受害者身份登录。
  3. 评论注入–
    可以使用用户名中的XML注释注册用户,如下所示–
    email: prerit@test.com

    在处理SAML响应时,SP将忽略注释并以受害者身份登录我们。整个SAML响应可以通过使用诸如burp套件之类的代理进行拦截。请注意,必须先通过URL格式对其进行解码,然后再通过Base64格式对其进行解码才能查看。

  4. SAML重播–
    攻击者捕获SAML响应,并多次使用它作为受害者登录。