将 SAML 用于从 Power BI 到本地源的 SSO

通过启用单一登录(SSO),可以在尊重在这些源上配置的用户级权限时,使 Power BI 报表和仪表板能够轻松刷新来自本地源的数据。 若要启用无缝 SSO 连接,请使用安全断言标记语言 (SAML)。

注释

您只能使用本地数据网关通过单点登录 SAML 连接到一个数据源。 要通过单点登录SAML连接至一个额外的数据源,您必须使用不同的本地数据网关。

SAML 支持的数据源

Microsoft当前支持使用 SAML 的 SAP HANA。 有关使用 SAML 设置和配置 SAP HANA 单一登录的详细信息,请参阅 SAML SSO for BI Platform to HANA

我们支持 Kerberos 的其他数据源(包括 SAP HANA)。

对于 SAP HANA,建议在建立 SAML SSO 连接之前启用加密。 若要启用加密,请将 HANA 服务器配置为接受加密连接,然后将网关配置为使用加密来与 HANA 服务器通信。 由于 HANA ODBC 驱动程序默认不加密 SAML 断言,因此签名的 SAML 断言从网关未加密发送到 HANA 服务器,并且容易受到第三方截获和重用。

重要

由于 SAP 不再支持 OpenSSL,因此Microsoft也停止了其支持。 现有连接将继续工作,但无法再创建新连接。 请改用 SAP 加密库(CommonCryptoLib)或 sapcrypto。

注释

以下说明引用 OpenSSL 命令以创建证书。 尽管这些命令出于说明目的而显示,但 SAP 现在建议使用 CommonCryptoLib。 有关当前最佳做法,请参阅 SAP 文档。

配置网关和数据源

若要使用 SAML,必须在要为其启用 SSO 和网关的 HANA 服务器之间建立信任关系。 在此方案中,网关充当 SAML 标识提供者(IdP)。 可以通过多种方式建立此关系。 SAP 建议使用 CommonCryptoLib 完成设置步骤。 有关详细信息,请参阅官方 SAP 文档。

创建证书

可以通过使用 HANA 服务器信任的根证书颁发机构(CA)对网关 IdP 的 X509 证书进行签名,在 HANA 服务器与网关 IdP 之间建立信任关系。

若要创建证书,请执行以下作:

  1. 在运行 SAP HANA 的设备上,创建一个空文件夹来存储证书,然后转到该文件夹。

  2. 运行以下命令创建根证书:

    openssl req -new -x509 -newkey rsa:2048 -days 3650 -sha256 -keyout CA_Key.pem -out CA_Cert.pem -extensions v3_ca'''
    

    请务必复制并保存通行短语以使用此证书对其他证书进行签名。 应会看到正在创建的 CA_Cert.pemCA_Key.pem 文件。

  3. 运行以下命令创建 IdP 证书:

    openssl req -newkey rsa:2048 -days 365 -sha256 -keyout IdP_Key.pem -out IdP_Req.pem -nodes
    

    应会看到正在创建的 IdP_Key.pemIdP_Req.pem 文件。

  4. 使用根证书对 IdP 证书进行签名:

    openssl x509 -req -days 365 -in IdP_Req.pem -sha256 -extensions usr_cert -CA CA_Cert.pem -CAkey CA_Key.pem -CAcreateserial -out IdP_Cert.pem
    

    应会看到正在创建的 CA_Cert.srlIdP_Cert.pem 文件。 目前,仅关注 IdP_Cert.pem 文件。

为 SAML 标识提供者证书创建映射

若要为 SAML 标识提供者证书创建映射,请执行以下作:

  1. 在 SAP HANA Studio 中,右键单击 SAP HANA 服务器名称,然后选择 “安全>开放安全控制台>SAML 标识提供者”。

  2. 选择 “SAP 加密库 ”选项。 请勿使用 SAP 弃用的 OpenSSL 加密库选项。

    “SAML 标识提供者”窗格的屏幕截图,其中选择了“SAP 加密库”选项。

  3. 若要导入签名证书 IdP_Cert.pem,请选择蓝色 的“导入 ”按钮,如下图所示:

    “SAML 标识提供者”窗格上的“导入”按钮的屏幕截图。

  4. 请记住为您的身份提供商分配名称。

在 HANA 中导入和创建签名证书

若要在 HANA 中导入和创建签名证书,请执行以下作:

  1. 在 SAP HANA Studio 中,运行以下查询:

    CREATE CERTIFICATE FROM '<idp_cert_pem_certificate_content>'
    

    下面是一个示例:

    CREATE CERTIFICATE FROM
    '-----BEGIN CERTIFICATE-----
    MIIDyDCCArCgA...veryLongString...0WkC5deeawTyMje6
    -----END CERTIFICATE-----
    '
    
  2. 如果没有具有目的 SAML 的个人安全环境(PSE),请在 SAP HANA Studio 中运行以下查询来创建一个:

    CREATE PSE SAMLCOLLECTION;
    set pse SAMLCOLLECTION purpose SAML;
    
  3. 运行以下命令,将新创建的签名证书添加到 PSE:

    alter pse SAMLCOLLECTION add CERTIFICATE <certificate_id>;
    

    例如:

    alter pse SAMLCOLLECTION add CERTIFICATE 1978320;
    

    可以通过运行以下查询来检查创建的证书列表:

    select * from PUBLIC"."CERTIFICATES"
    

    证书现已正确安装。 若要确认安装,可以运行以下查询:

    select * from "PUBLIC"."PSE_CERTIFICATES"
    

映射用户

若要映射用户,请执行以下步骤:

  1. 在 SAP HANA Studio 中,选择 “安全 ”文件夹。

    左侧窗格中“安全”文件夹结构的屏幕截图。

  2. 展开用户,然后选择要映射 Power BI 用户的目标用户。

  3. 选中 “SAML ”复选框,然后选择“ 配置”,如下图所示:

    用于选择“SAML”复选框和“配置”链接的“用户参数”窗格的屏幕截图。

  4. 选择在“ 创建 SAML 标识提供者证书 ”部分中创建的标识提供者。 对于 外部标识,请输入 Power BI 用户的 UPN(通常,用户用来登录 Power BI 的电子邮件地址),然后选择“ 添加”。

    “配置外部 SAML 标识”窗口的屏幕截图。

    如果已将网关配置为使用 ADUserNameReplacementProperty 配置选项,请输入将替换 Power BI 用户的原始 UPN 的值。 例如,如果将 ADUserNameReplacementProperty 设置为 SAMAccountName,请输入用户的 SAMAccountName

配置网关

配置网关证书和标识后,请将证书转换为 PFX 文件格式,然后通过执行以下作将网关配置为使用证书:

  1. 运行以下命令,将证书转换为 PFX 格式。 此命令将生成的文件 samlcert.pfx 命名,并将 文件设置为其密码,如下所示:

    openssl pkcs12 -export -out samltest.pfx -in IdP_Cert.pem -inkey IdP_Key.pem -passin pass:root -passout pass:root
    
  2. 将 PFX 文件复制到网关计算机:

    a。 双击 samltest.pfx,然后选择本地计算机>下一步

    b. 输入密码,然后选择“ 下一步”。

    c. 选择将所有证书放入以下存储,然后选择浏览>个人>确定

    证书导入向导中以下存储选项中“放置所有证书”选项的屏幕截图。

    d. 选择“ 下一步”,然后选择“ 完成”。

  3. 若要授予网关服务帐户对证书私钥的访问权限,请执行以下作:

    a。 在网关计算机上,运行Microsoft管理控制台(MMC)。

    用于运行Microsoft管理控制台的网关计算机运行窗口的屏幕截图。

    b. 在 MMC 中,选择“ 文件>添加/删除管理单元”。

    Microsoft管理控制台中的“添加/删除管理单元”命令的屏幕截图。

    c. 选择“ 证书>添加”,然后选择“ 计算机帐户>下一步”。

    d. 选择 本地计算机>完成>确定

    e. 展开 证书>个人>证书,然后查找证书。

    f. 右键单击证书,然后选择“ 所有任务>管理私钥”。

    “管理私钥”命令的屏幕截图。

    g. 将网关服务帐户添加到列表中。 默认情况下,帐户为 NT SERVICE\PBIEgwService。 可以通过运行 services.msc ,然后查找 本地数据网关服务来找出哪个帐户正在运行网关服务。

    本地数据网关服务列表的屏幕截图。

最后,将证书指纹添加到网关配置:

  1. 若要列出计算机上的证书,请运行以下 PowerShell 命令:

    Get-ChildItem -path cert:\LocalMachine\My
    
  2. 复制所创建的证书的指纹。

  3. 默认情况下,转到网关目录,即 C:\Program Files\本地数据网关

  4. 打开 PowerBI.DataMovement.Pipeline.GatewayCore.dll.config,然后查找 SapHanaSAMLCertThumbprint 部分。 粘贴在步骤 2 中复制的指纹。

  5. 重启网关服务。

运行 Power BI 报表

现在,可以使用 Power BI 中的 “管理网关 ”页来配置 SAP HANA 数据源。 在 “高级设置”下,通过 SAML 启用 SSO。 为此,可以发布绑定到该数据源的报表和数据集。

使用 SAML 单一登录的高级设置的屏幕截图。

注释

SSO 使用 Windows 身份验证,因此请确保 Windows 帐户可以访问网关计算机。 如果不确定,请确保将 NT-AUTHORITY\Authenticated Users(S-1-5-11)添加到本地计算机“Users”组。

使用 SAML 进行 SAP HANA 单一登录进行故障排除

本部分提供了使用 SAML 对 SAP HANA 进行单一登录进行故障排除的广泛步骤。 使用这些步骤可帮助你自行诊断和更正可能遇到的任何问题。

被拒绝的凭据

配置基于 SAML 的 SSO 后,Power BI 门户中可能会出现以下错误:“提供的凭据不能用于 SapHana 源。此错误指示 SAP HANA 拒绝了 SAML 凭据。

服务器端身份验证跟踪提供有关排查 SAP HANA 上的凭据问题的详细信息。 若要配置 SAP HANA 服务器的追踪,请执行以下操作:

  1. 在 SAP HANA 服务器上,通过运行以下查询来启用身份验证跟踪:

    ALTER SYSTEM ALTER CONFIGURATION ('indexserver.ini', 'SYSTEM') set ('trace', 'authentication') = 'debug' with reconfigure 
    
  2. 重现问题。

  3. 在 SAP HANA Studio 中,打开管理控制台,然后选择“ 诊断文件 ”选项卡。

  4. 打开最新的索引服务器跟踪,然后搜索 SAMLAuthenticator.cpp

    应找到一条指示根本原因的详细错误消息,如以下示例所示:

    [3957]{-1}[-1/-1] 2018-09-11 21:40:23.815797 d Authentication   SAMLAuthenticator.cpp(00091) : Element '{urn:oasis:names:tc:SAML:2.0:assertion}Assertion', attribute 'ID': '123123123123123' is not a valid value of the atomic type 'xs:ID'.
    [3957]{-1}[-1/-1] 2018-09-11 21:40:23.815914 i Authentication   SAMLAuthenticator.cpp(00403) : No valid SAML Assertion or SAML Protocol detected
    
  5. 完成故障排除后,通过运行以下查询关闭身份验证跟踪:

    ALTER SYSTEM ALTER CONFIGURATION ('indexserver.ini', 'SYSTEM') UNSET ('trace', 'authentication');
    

验证并排查网关错误

若要遵循本部分中的过程,需要 收集网关日志

SSL 错误(证书)

错误症状

此问题具有多个症状。 尝试添加新数据源时,可能会看到如下所示的错误消息:

Unable to connect: We encountered an error while trying to connect to . Details: "We could not register this data source for any gateway instances within this cluster. Please find more details below about specific errors for each gateway instance."

尝试创建或刷新报表时,可能会看到如下图中所示的错误消息:

无法加载模型故障排除 SSL 错误窗口的屏幕截图。

调查 Mashup[date]*.log时,会看到以下错误消息:

A connection was successfully established with the server, but then an error occurred during the login process and the certificate chain was issued by an authority that is not trusted

解决方案

若要解决此 SSL 错误,请转到数据源连接,然后在“ 验证服务器证书 ”下拉列表中选择 “否”,如下图所示:

显示“数据源设置”窗格上正在解决 SSL 错误的屏幕截图。

选择此设置后,将不再显示错误消息。

网关 SignXML 错误

网关 SignXML 错误可能是 SapHanaSAMLCertThumbprint 设置不正确的结果,也可能是 HANA 服务器的问题。 网关日志中的条目有助于确定问题所在的位置以及如何解决此问题。

错误症状

日志条目 SignXML: Found the cert...:如果 GatewayInfo[date].log 文件包含此错误,则已找到 SignXML 证书,故障排除应重点关注 “验证和排查 HANA 服务器端” 部分中介绍的步骤。

日志条目:Couldn't find saml cert 如果 GatewayInfo[date].log 文件包含此错误,则 SapHanaSAMLCertThumbprint 设置不正确。 以下解决方法部分介绍如何解决此问题。

解决方案

若要正确设置 SapHanaSAMLCertThumbprint,请按照 “配置网关” 部分中的说明进行作。 说明开始于 最后,将证书指纹添加到网关配置

更改配置文件后,需要重启网关服务才能使更改生效。

验证

正确设置 SapHanaSAMLCertThumbprint 时,网关日志将包含包括 SignXML: Found the cert...的条目。 此时,应该能够转到 “验证和排查 HANA 服务器端问题” 部分。

如果网关无法使用证书对 SAML 断言进行签名,则可能在日志中看到类似于以下内容的错误:

GatewayPipelineErrorCode=DM_GWPipeline_UnknownError GatewayVersion= InnerType=CryptographicException InnerMessage=<pi>Signing key is not loaded.</pi> InnerToString=<pi>System.Security.Cryptography.CryptographicException: Signing key is not loaded.

若要解决此错误,请按照 “配置网关” 部分中的步骤 3 开头的说明进行作。

更改配置后,重启网关服务,使更改生效。

验证 HANA 服务器端并对其进行故障排除

如果网关可以找到证书并对 SAML 断言进行签名,但仍遇到错误,请使用本部分中的解决方案。 需要收集 HANA 身份验证跟踪,如前面“ 拒绝的凭据”部分所述。

SAML 标识提供者

HANA 身份验证跟踪中存在 Found SAML provider 字符串表示 SAML 标识提供者已正确配置。 如果字符串不存在,则配置不正确。

解决方案

首先,确定组织是使用 OpenSSL 还是 commoncrypto 作为 sslcryptoprovider。 若要确定正在使用哪个提供程序,请执行以下操作:

  1. 打开 SAP HANA Studio。

  2. 打开正在使用的租户的管理控制台。

  3. 选择 “配置 ”选项卡,并使用 sslcryptoprovider 作为筛选器,如下图所示:

    SAP HANA Studio 中 sslcryptoprovider 信息的屏幕截图。

接下来,通过执行以下作验证加密库是否已正确设置:

  1. 通过选择 “SAML 标识提供者 ”选项卡转到 SAP HANA Studio 中的安全控制台,然后执行下列作之一:

    • 如果 sslcryptoprovider 为 OpenSSL,请选择 OpenSSL 加密库
    • 如果 sslcryptoprovider 为 commonCrypto,请选择 “SAP 加密库”。

    在下图中,已选择 SAP 加密库

    SAP HANA Studio 的屏幕截图,显示已选择 SAP Cryptographic Library 作为 SSLCryptoProvider。

  2. 通过选择右上角的 “部署 ”按钮来部署更改,如下图所示:

    用于部署解决方案更改的“部署”按钮的屏幕截图。

验证

正确配置跟踪后,它们将报告 Found SAML provider且不会 报告 SAML Provider not found。 可以转到下一部分 “对 SAML 断言签名进行故障排除”。

如果已设置加密提供程序但SAML Provider not found仍然被报告,请在日志中搜索以以下文本开头的字符串:

Search SAML provider for certificate with subject =

在该字符串中,请确保主题和颁发者与安全控制台的“SAML 标识提供者”选项卡中显示的主题和颁发者完全相同。 即使是单个字符的区别也会导致问题。 如果发现差异,可以在 SAP 加密库中解决问题,使条目完全匹配。

如果更改 SAP 加密库无法解决问题,您可以通过双击直接手动编辑“签发给”和“签发者”字段。

对 SAML 断言签名进行故障排除

你可能会发现 HANA 身份验证跟踪中包含类似于以下内容的条目:

[48163]{-1}[-1/-1] 2020-09-11 21:15:18.896165 i Authentication SAMLAuthenticator.cpp(00398) : Unable to verify XML signature [48163]{-1}[-1/-1] 2020-09-11 21:15:18.896168 i Authentication MethodSAML.cpp(00103) : unsuccessful login attempt with SAML ticket!

存在此类条目意味着签名不受信任。

解决方案

如果使用 OpenSSL 作为 sslcryptoprovider,请检查 trust.pemkey.pem 文件是否位于 SSL 目录中。 有关详细信息,请参阅 SAP 博客, 确保通过 SSL 保护 SAP HANA Studio 和 SAP HANA 服务器之间的通信

如果使用 commoncrypto 作为 SSL 加密提供程序,请检查租户中是否有包含您的证书的集合。

验证

正确设置跟踪日志后,它们将报告 Found valid XML signature

对 UPN 映射进行故障排除

你可能会发现 HANA 跟踪中包含类似以下内容的条目:

SAMLAuthenticator.cpp(00886) : Assertion Subject NameID: `johnny@contoso.com` SAMLAuthenticator.cpp(00398) : Database user does not exist

该错误表明在 SAML 断言中找到 nameId johnny@contoso.com,但它不存在或未在 HANA 服务器中正确映射。

解决方案

转到 HANA 数据库用户,然后在选中的“SAML”复选框下,选择“ 配置 ”链接。 此时会显示以下窗口:

显示不正确的用户名的屏幕截图。

如错误消息所述,HANA 正在尝试查找 johnny@contoso.com,但外部标识仅显示为 johnny。 这两个值必须匹配。 若要解决此问题,请在 “外部标识”下将值更改为 johnny@contoso.com。 请注意,此值区分大小写。

有关本地数据网关和 DirectQuery 的详细信息,请参阅以下资源: