使用安全断言标记语言启用从 Power BI 到本地数据源的 SSO

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

注意

通过本地数据网关使用单一登录 SAML 只能连接到一个数据源。 若要使用单一登录 SAML 连接到其他数据源,必须使用不同的本地数据网关。

SAML 支持的数据源

Microsoft 目前通过 SAML 支持 SAP HANA。 有关使用 SAML 为 SAP HANA 设置和配置单一登录的详细信息,请参阅 SAML SSO for BI Platform to HANA(BI 平台到 HANA 的 SAML SSO)。

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

对于 SAP HANA,建议在建立 SAML SSO 连接之前启用加密。 若要启用加密,请将 HANA 服务器配置为接受加密连接,然后将网关配置为使用加密与 HANA 服务器进行通信。 因为默认情况下 HANA ODBC 驱动程序不加密 SAML 断言,已签名的 SAML 断言将从网关“明文”发送到 HANA 服务器,并且容易被第三方拦截和重用 。

重要

SAP 不再支持 OpenSSL,因此,Microsoft 也停止了对它的支持。 现有连接将继续有效,但再也无法创建新连接。 今后,请改用 SAP 加密库 (CommonCryptoLib) 或 sapcrypto。

配置网关和数据源

要使用 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.pem 和 CA_Key.pem 文件 。

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

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

    应会看到正在创建 IdP_Key.pem 和 IdP_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.srl 和 IdP_Cert.pem 文件 。 目前,你只关心 IdP_Cert.pem 文件。

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

执行以下步骤,创建 SAML 标识提供者证书映射:

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

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

    Screenshot of the

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

    Screenshot of the

  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 中,选择“安全”文件夹。

    Screenshot of the Security folder structure on the left pane.

  2. 展开“用户”,然后选择要将 Power BI 用户映射到的用户。

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

    Screenshot of the

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

    Screenshot of the

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

配置网关

配置网关的证书和标识后,请执行以下步骤,将证书转换为 PFX 文件格式并配置网关以使用证书:

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

    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. 选择“将所有证书放入以下存储”,然后选择“浏览”>“个人”>“确定” 。

    Screenshot of the

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

  3. 执行以下步骤,授予网关服务帐户访问证书私钥的权限:

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

    Screenshot of the gateway machine

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

    Screenshot of the

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

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

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

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

    Screenshot of the

    g. 将网关服务帐户添加到列表中。 默认情况下,帐户是“NT SERVICE\PBIEgwService”。 可通过运行 services.msc 和查找“本地数据网关服务”来确定正在运行网关服务的帐户 。

    Screenshot of the

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

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

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

  3. 转到网关目录(默认为 C:\Program Files\On-premises data gateway)。

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

  5. 重新启动网关服务。

运行 Power BI 报表

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

 Screenshot of advanced settings with single sign-on for SAML.

注意

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

排除使用 SAML 启用到 SAP HANA 的单一登录过程中的故障

本部分提供了详细的步骤,介绍了如何排除使用 SAML 启用到 SAP HANA 的单一登录过程中的故障。 这些步骤有助于你自行诊断并更正你可能面临的任何问题。

被拒绝的凭据

配置基于 SAML 的 SSO 后,你可能会在 Power BI 门户中看到以下错误:“提供的凭据无法用于 SapHana 源。”此错误表示 SAML 凭据遭到 SAP HANA 拒绝。

服务器端的身份验证跟踪提供详细信息,以对 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."

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

Screenshot of a 'Cannot load model' troubleshooting SSL error window.

调查 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 错误,请转到数据源连接,然后在“验证服务器证书”下拉列表中选择“否”,如下图所示 :

Screenshot showing the S S L error being resolved on the 'Data Source Settings' pane.

选择该设置后,你将不会再看到此错误。

网关 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”作为筛选器,如下图所示 :

    Screenshot of the sslcryptoprovider information in SAP HANA Studio.

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

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

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

    在下图中,选择了“SAP 加密库”:

    Screenshot of SAP HANA Studio with 'SAP Cryptographic Library' selected as the sslcryptoprovider.

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

    Screenshot of the 'Deploy' button for deploying your solution changes.

验证

跟踪正确配置后,会报告 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.pem 和 key.pem 文件是否在 SSL 目录中 。 有关详细信息,请参阅 SAP 博客通过 SSL 保护 SAP HANA Studio 和 SAP HANA 服务器之间的通信

如果使用 commoncrypto 作为 sslcryptoprovider,请检查租户中是否存在具有证书的集合。

验证

跟踪正确配置后,会报告 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 复选框下面的“配置”链接。 将显示以下窗口:

Screenshot showing that the incorrect user name is displayed.

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

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