对AEM中SAML相关问题进行故障诊断

本文介绍如何解决AEM中的SAML(安全断言标记语言)问题。 它解决了无限循环问题、无效断言问题等,以及解决这些问题的措施。

描述 description

环境

Experience Manager

问题/症状

我们如何解决Adobe Experience Manager (AEM)的安全断言标记语言(SAML)相关问题?

解决方法 resolution

无限循环问题:

  • 检查ds:signature是否为SAML assertion >的一部分。如果不是,此操作将在IDP端完成,并选中已签署声明的复选框
  • 检查SAML响应中的nameId格式,该格式应与SAML配置中配置的nameId策略格式完全匹配
  • 检查SAML响应中的SAML AudienceRestriction,此标记的值应与SAML配置中的实体ID完全匹配
  • 检查saml2:条件(NotBefore和NotOnOrAfter),服务器未与ntp服务器同步。 使用ntpd并强制它同步系统时间(ntpdate -s pool.ntp.org)。 对于测试,将时钟容差更改为–1,这将忽略时钟差异。
  • 检查idp是否未签署断言。 询问idp团队响应已签署,并且声明需要根据saml规范签名。
  • 如果来自IDP的声明已加密,请检查SAML跟踪器输出是否加密。 如果是,SAML身份验证处理程序的配置应使用加密复选框

检查SAML证书的格式是否正确:

  • 从SAML响应中获取签名并更正证书,即,在第65行之后,按Enter键等。
  • 然后,可使用此项在AEM truststore中安装并将证书详细信息与IDP匹配。

加密:

  • 首先,始终在不加密的情况下完成SAML设置。 完成此操作后,启用加密。 通过这种方式,可以轻松调试问题

Dispatcher:

  • 确保filters部分中允许SAML登录请求。如果不允许,请更新/filter部分以允许POST请求到*/saml_login。

    /0100 { /type "allow" /method "POST" /url "*/saml_login" }

  • 检查httpd.conf中Web服务器级别的Mod标头(mod_header)中的更改。它应采用以下格式

    < < < < < <标头始终编辑Set-Cookie (。*) "$1; HTTPOnly; Secure" > > > > >

无效的断言:

1
2
com.adobe.granite.auth.saml.model.Assertion Invalid Assertion: Signature invalid. com.adobe.granite.auth.saml.SamlAuthenticationHandler Private key of SP not provided: Cannot sign Authn request
  • 证书可能存储在信任库中,出现问题。 这里的解决方案可能是删除并重新上传新的idp_cert并检查用例。
  • 如果不加密SAML响应,则可以忽略“未提供SP的私钥:无法签署身份验证请求”错误。

无法检索私钥:

1
2
[ com.adobe.granite.security.user.internal.servlets.KeyStoreManagingServlet,1121, [ javax.servlet.Servlet] ] ServiceEvent REGISTERED saml.log:27.01.2019 14:16:13.642 *ERROR* [ qtp275633701-179] com.adobe.granite.auth.saml.SamlAuthenticationHandler KeyStore uninitialized. Cannot retrieve private key to decrypt assertions.
  • 此错误意味着IDP已加密了声明,并且没有私钥来解密响应。 如果要加密响应,则需要在AEM密钥库中上传有效的私钥。

在提出SAML相关支持票证时要提供的信息:

  • SAML请求
  • SAML响应
  • SAML配置
  • SAML的调试日志(com.adobe.granite.auth.saml)
  • Error.log
  • 用于提取SAML请求/响应的HAR[ 1]文件

[ 1] 正在生成HAR文件

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f