教程:Microsoft Entra 单一登录 (SSO) 与 SAP NetWeaver 的集成

本教程介绍如何将 SAP NetWeaver 与 Microsoft Entra ID 相集成。 将 SAP NetWeaver 与 Microsoft Entra ID 集成后,可以:

  • 在 Microsoft Entra ID 中控制谁有权访问 SAP NetWeaver。
  • 让用户能够使用其 Microsoft Entra 帐户自动登录到 SAP NetWeaver。
  • 在中心位置管理帐户。

先决条件

若要开始操作,需备齐以下项目:

  • 一个 Microsoft Entra 订阅。 如果你没有订阅,可以获取一个免费帐户
  • 已启用 SAP NetWeaver 单一登录 (SSO) 的订阅。
  • SAP NetWeaver V7.20 或更高版本

方案描述

  • SAP NetWeaver 支持 SAMLSP 发起的 SSO)和 OAuth。 在本教程中,将在测试环境中配置并测试 Microsoft Entra SSO。

注意

此应用程序的标识符是一个固定字符串值,因此只能在一个租户中配置一个实例。

注意

根据组织的要求在 SAML 或 OAuth 中配置应用程序。

要配置 SAP NetWeaver 与 Microsoft Entra ID 的集成,需要从库中将 SAP NetWeaver 添加到托管 SaaS 应用列表。

  1. 至少以云应用程序管理员身份登录到 Microsoft Entra 管理中心
  2. 浏览至“标识”>“应用程序”>“企业应用程序”>“新建应用程序”。
  3. 在“从库中添加”部分的搜索框中,键入 SAP NetWeaver
  4. 在结果面板中选择“SAP NetWeaver”,然后添加该应用。 在该应用添加到租户时等待几秒钟。

或者,也可以使用企业应用配置向导。 在此向导中,可以将应用程序添加到租户、将用户/组添加到应用、分配角色,以及逐步完成 SSO 配置。 详细了解 Microsoft 365 向导。

配置并测试 SAP NetWeaver 的 Microsoft Entra SSO

使用名为 B.Simon 的测试用户配置并测试 SAP NetWeaver 的 Microsoft Entra SSO。 若要使 SSO 正常工作,需要在 Microsoft Entra 用户与 SAP NetWeaver 中的相关用户之间建立关联。

若要配置并测试 SAP NetWeaver 的 Microsoft Entra SSO,请执行以下步骤:

  1. 配置 Microsoft Entra SSO,以使用户能够使用此功能。
    1. 创建 Microsoft Entra 测试用户,以使用 B.Simon 测试 Microsoft Entra 单一登录。
    2. 分配 Microsoft Entra 测试用户,以使 B.Simon 能够使用 Microsoft Entra 单一登录。
  2. 使用 SAML 配置 SAP NetWeaver ,在应用程序端配置 SSO 设置。
    1. 创建 SAP NetWeaver 测试用户,在 SAP NetWeaver 中创建 B.Simon 的对应用户,并将其链接到该用户的 Microsoft Entra 表示形式。
  3. 测试 SSO ,验证配置是否正常工作。
  4. 配置 SAP NetWeaver 的 OAuth,在应用程序端配置 OAuth 设置。
  5. 从 Azure AD 请求访问令牌,以使用 Azure AD 作为标识提供者 (IdP)。

配置 Microsoft Entra SSO

在本部分,你将启用 Microsoft Entra 单一登录。

若要配置 SAP NetWeaver 的 Microsoft Entra 单一登录,请执行以下步骤:

  1. 打开新的 Web 浏览器窗口,以管理员身份登录到 SAP NetWeaver 公司站点

  2. 请确保“http”和“https”服务处于活动状态,并且在 SMICM“T-Code”中分配了相应的端口 。

  3. 登录到 SAP 系统 (T01) 的业务客户端(需要 SSO)并激活 HTTP 安全会话管理。

    1. 转到事务代码“SICF_SESSIONS” 。 它显示具有当前值的所有相关配置文件参数。 这些参数如下所示:

      login/create_sso2_ticket = 2
      login/accept_sso2_ticket = 1
      login/ticketcache_entries_max = 1000
      login/ticketcache_off = 0  login/ticket_only_by_https = 0 
      icf/set_HTTPonly_flag_on_cookies = 3
      icf/user_recheck = 0  http/security_session_timeout = 1800
      http/security_context_cache_size = 2500
      rdisp/plugin_auto_logout = 1800
      rdisp/autothtime = 60
      

      注意

      根据组织要求调整上述参数,以上参数仅作为指示给出。

    2. 如果需要调整参数,请在 SAP 系统的实例/默认配置文件中重启 SAP 系统。

    3. 双击相关客户端以启用 HTTP 安全会话。

      HTTP 安全会话

    4. 激活以下 SICF 服务:

      /sap/public/bc/sec/saml2
      /sap/public/bc/sec/cdc_ext_service
      /sap/bc/webdynpro/sap/saml2
      /sap/bc/webdynpro/sap/sec_diag_tool (This is only to enable / disable trace)
      
  4. 转到 SAP 系统 [T01/122] 的业务客户端中的事务代码“SAML2” 。 它将在浏览器中打开用户界面。 在此示例中,我们假定 122 为 SAP 业务客户端。

    事务代码

  5. 提供用户名和密码以进入用户界面,然后单击“编辑” 。

    用户名和密码

  6. 将“提供程序名称”从 T01122 替换为 http://T01122,然后单击“保存” 。

    注意

    默认情况下,提供程序名称采用 <sid><client> 格式,但 Microsoft Entra ID 需要格式为 <protocol>://<name> 的名称,建议将提供程序名称保留为 https://<sid><client> 以允许在 Microsoft Entra ID 中配置多个 SAP NetWeaver ABAP 引擎。

    多个 SAP NetWeaver ABAP 引擎

  7. 生成服务提供程序元数据:完成在 SAML 2.0 用户界面上配置“本地提供商”和“受信任的提供程序”设置后,下一步将是生成服务提供程序元数据文件(包含 SAP 中的所有设置、身份验证上下文和其他配置)。 此文件生成后,将此文件上传到 Microsoft Entra ID。

    生成服务提供程序元数据

    1. 转到“本地提供程序”选项卡 。

    2. 单击“元数据” 。

    3. 将生成的“元数据 XML 文件”保存在计算机上,并将其上传到“基本 SAML 配置”部分,以便在 Azure 门户中自动填充“标识符”和“回复 URL”值 。

按照以下步骤启用 Microsoft Entra SSO。

  1. 至少以云应用程序管理员身份登录到 Microsoft Entra 管理中心

  2. 依次浏览到“标识”>“应用程序”>“企业应用程序”>“SAP NetWeaver”应用程序集成页面,找到“管理”部分,然后选择“单一登录”

  3. 在“选择单一登录方法”页上选择“SAML” 。

  4. 在“设置 SAML 单一登录”页面上,单击“基本 SAML 配置”旁边的铅笔图标以编辑设置 。

    编辑基本 SAML 配置

  5. 如果要在 IDP 发起的模式下配置应用程序,请在“基本 SAML 配置部分”中执行以下步骤 :

    1. 单击“上传元数据文件”以上传之前获取的“服务提供程序元数据文件” 。

    2. 单击“文件夹徽标” 来选择元数据文件并单击“上传”。

    3. 成功上传元数据文件后,标识符回复 URL 值会自动填充在“基本 SAML 配置” 部分的文本框中,如下所示:

    4. 在“登录 URL” 文本框中,使用以下模式键入 URL:https://<your company instance of SAP NetWeaver>

    注意

    某些客户遇到了为其实例配置的回复 URL 不正确的错误。 如果你收到了任何此类错误,请使用这些 PowerShell 命令。 首先使用回复 URL 更新应用程序对象中的回复 URL,然后更新服务主体。 使用 Get-MgServicePrincipal 获取服务主体 ID 值。

    $params = @{
       web = @{
          redirectUris = "<Your Correct Reply URL>"
       }
    }
    Update-MgApplication -ApplicationId "<Application ID>" -BodyParameter $params
    Update-MgServicePrincipal -ServicePrincipalId "<Service Principal ID>" -ReplyUrls "<Your Correct Reply URL>"
    
  6. SAP NetWeaver 应用程序需要特定格式的 SAML 断言,因此,需要在 SAML 令牌属性配置中添加自定义属性映射。 以下屏幕截图显示了默认属性的列表。 单击“编辑”图标以打开“用户属性”对话框。

    编辑属性

  7. 在“用户属性” 对话框的“用户声明” 部分中,按上图所示配置 SAML 令牌属性,并执行以下步骤:

    1. 单击“编辑图标”,打开“管理用户声明”对话框 。

      “编辑”图标

      image

    2. 从“转换”列表中,选择“ExtractMailPrefix()” 。

    3. 从“参数 1”列表中选择“user.userprincipalname” 。

    4. 单击“保存” 。

  8. 在“使用 SAML 设置单一登录”页的“SAML 签名证书”部分中找到“联合元数据 XML”,选择“下载”以下载该证书并将其保存在计算机上 。

    证书下载链接

  9. 在“设置 SAP NetWeaver”部分,根据要求复制相应的 URL。

    复制配置 URL

创建 Microsoft Entra 测试用户

在本部分,你将创建名为 B.Simon 的测试用户。

  1. 至少以用户管理员身份登录到 Microsoft Entra 管理中心
  2. 浏览到“标识”>“用户”>“所有用户”
  3. 选择屏幕顶部的“新建用户”>“创建新用户”。
  4. “用户”属性中执行以下步骤:
    1. 在“显示名称”字段中输入 B.Simon
    2. 在“用户主体名称”字段中,输入 username@companydomain.extension。 例如 B.Simon@contoso.com
    3. 选中“显示密码”复选框,然后记下“密码”框中显示的值。
    4. 选择“查看 + 创建”。
  5. 选择“创建”。

分配 Microsoft Entra 测试用户

在本部分中,你将通过授予 B.Simon 访问 SAP NetWeaver 的权限,支持其使用单一登录。

  1. 至少以云应用程序管理员身份登录到 Microsoft Entra 管理中心
  2. 依次浏览到“标识”>“应用程序”>“企业应用程序”>“SAP NetWeaver”。
  3. 在应用的概述页中找到“管理”部分,然后选择“用户和组” 。
  4. 选择“添加用户”,然后在“添加分配”对话框中选择“用户和组”。
  5. 在“用户和组”对话框中,从“用户”列表中选择“B.Simon”,然后单击屏幕底部的“选择”按钮。 如果你希望将某角色分配给用户,可以从“选择角色”下拉列表中选择该角色。 如果尚未为此应用设置任何角色,你将看到选择了“默认访问权限”角色。
  6. 在“添加分配”对话框中,单击“分配”按钮。

使用 SAML 配置 SAP NetWeaver

  1. 登录到 SAP 系统并转到事务代码 SAML2。 这将打开带有 SAML 配置屏幕的新浏览器窗口。

  2. 要为受信任的标识提供程序 (Microsoft Entra ID) 配置终结点,请转到“受信任的提供程序”选项卡。

    配置信任单一登录的提供程序

  3. 按“添加”,然后从上下文菜单选择“上传元数据文件”

    配置单一登录 2

  4. 上传已下载的元数据文件。

    配置单一登录 3

  5. 在下一个屏幕中,键入别名。 例如,键入 aadsts,然后按“下一步”以继续操作。

    配置单一登录 4

  6. 请确保“摘要算法”应为“SHA-256”且无需进行任何更改,然后按“下一步”

    配置单一登录 5

  7. 在“单一登录终结点”上,使用“HTTP POST”并单击“下一步”以继续

    配置单一登录 6

  8. 在“单一注销终结点”上,选择“HTTPRedirect”并单击“下一步”以继续

    配置单一登录 7

  9. 在“项目终结点”上,按“下一步”以继续

    配置单一登录 8

  10. 在“身份验证要求”上,单击“完成”

    配置单一登录 9

  11. 转到选项卡“受信任的提供程序”>“联合身份验证”(屏幕底部) 。 单击 “编辑”

    配置单一登录 10

  12. 单击“联合身份验证”(底部窗口)选项卡下的“添加”

    配置单一登录 11

  13. 从弹出窗口中选择“支持的 NameID 格式”中的“未指定”,然后单击“确定”

    配置单一登录 12

  14. 将“用户 ID 源”值指定为“断言属性”,将“用户 ID 映射模式”值指定为“电子邮件”,并将“断言属性名称”指定为 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

    配置单一登录

  15. 请注意,“用户 ID 源”和“用户 ID 映射模式”值确定 SAP 用户与 Microsoft Entra 声明之间的关联。

方案:SAP 用户到 Microsoft Entra 用户映射。

  1. 从 SAP 获取 NameID 详细信息的屏幕截图。

    配置单一登录 13

  2. 提及 Microsoft Entra ID 中的所需声明的屏幕截图。

    配置单一登录 14

    方案:根据 SU01 中配置的电子邮件地址选择 SAP 用户 ID。 在这种情况下,应在 su01 中为每个需要 SSO 的用户配置电子邮件 ID。

    1. 从 SAP 获取 NameID 详细信息的屏幕截图。

      配置单一登录 15

    2. 提及 Microsoft Entra ID 中的所需声明的屏幕截图。

    配置单一登录 16

  3. 单击“保存”,再单击“启用”以启用标识提供程序

    配置单一登录 17

  4. 出现提示后,请单击“确定”

    配置单一登录 18

创建 SAP NetWeaver 测试用户

在本部分,你将在 SAP NetWeaver 中创建名为 B.Simon 的用户。 请与内部 SAP 专家团队合作,或与组织 SAP 合作伙伴合作,以便在 SAP NetWeaver 平台中添加用户。

测试 SSO

  1. 激活 Microsoft Entra ID 的标识提供程序后,请尝试访问以下 URL 以检查 SSO,确保不会提示输入用户名和密码。

    https://<sapurl>/sap/bc/bsp/sap/it00/default.htm

    (或者)使用以下 URL

    https://<sapurl>/sap/bc/bsp/sap/it00/default.htm

    注意

    Sapurl 替换为实际的 SAP 主机名。

  2. 单击上面的 URL 应转到下面所述的屏幕。 如果能够访问以下页面,则 Microsoft Entra SSO 设置已成功完成。

    测试单一登录

  3. 如果出现用户名和密码提示,可以使用 URL 启用跟踪来诊断问题:

    https://<sapurl>/sap/bc/webdynpro/sap/sec_diag_tool?sap-client=122&sap-language=EN#

配置 SAP NetWeaver 的 OAuth

  1. 以下位置提供了 SAP 阐述的过程:启用 NetWeaver 网关服务和创建 OAuth 2.0 范围

  2. 转到“SPRO”并找到“激活和维护服务”。

    激活和维护服务

  3. 在本示例中,我们使用 OAuth 将 OData 服务 DAAG_MNGGRP 连接到 Microsoft Entra SSO。 使用技术服务名称搜索服务 DAAG_MNGGRP,如果该服务尚未激活,请将其激活(查看“ICF 节点”选项卡下的 green 状态)。 确保系统别名(实际运行服务的已连接后端系统)正确。

    OData 服务

    • 然后单击顶部按钮栏上的“OAuth”按钮,并分配 scope(保留提供的默认名称)。
  4. 例如,范围是 DAAG_MNGGRP_001。 它是通过自动添加数字基于服务名称生成的。 报告 /IWFND/R_OAUTH_SCOPES 可用于更改范围名称或手动创建。

    配置 OAuth

    注意

    消息 soft state status is not supported – 可以忽略,因为未出现问题。

为 OAuth 2.0 客户端创建服务用户

  1. OAuth2 使用 service ID 代表最终用户获取访问令牌。 OAuth 设计的重要限制:OAuth 2.0 Client ID 必须与 OAuth 2.0 客户端在请求访问令牌时用于登录的 username 相同。 因此,对于我们的示例,我们将注册名为 CLIENT1 的 OAuth 2.0 客户端。 作为先决条件,SAP 系统中必须存在同名 (CLIENT1) 的用户,并且我们要将该用户配置为由被引用的应用程序使用。

  2. 注册 OAuth 客户端时,我们将使用 SAML Bearer Grant type

    注意

    有关更多详细信息,请参阅 SAML 持有者授权类型的 OAuth 2.0 客户端注册

  3. 执行 T-Code SU01 将用户 CLIENT1 创建为 System type,并分配密码。 保存密码,因为你需要将该凭据提供给 API 程序员,API 程序员应将其与用户名一起保存到调用代码中。 不要分配配置文件或角色。

使用创建向导注册新的 OAuth 2.0 客户端 ID

  1. 若要注册新的 OAuth 2.0 客户端,请启动事务 SOAUTH2。 该事务将显示有关已注册的 OAuth 2.0 客户端的概述。 选择“创建”,针对本示例中名为 CLIENT1 的新 OAuth 客户端启动向导。

  2. 转到“T-Code:SOAUTH2”并提供说明,然后单击“下一步”。

    SOAUTH2

    OAuth 2.0 客户端 ID

  3. 从下拉列表中选择已添加的“SAML2 IdP – Microsoft Entra ID”,然后单击“保存”。

    SAML2 IdP – Microsoft Entra ID 1

    SAML2 IdP – Microsoft Entra ID 2

    SAML2 IdP – Microsoft Entra ID 3

  4. 单击范围分配下的“添加”,以添加前面创建的范围:DAAG_MNGGRP_001

    范围

    范围分配

  5. 单击“完成”。

从 Azure AD 请求访问令牌

若要使用 Azure Active Directory (Azure AD) 作为标识提供者 (IdP) 从 SAP 系统请求访问令牌,请执行以下步骤:

步骤 1:在 Azure AD 中注册应用程序

  1. 登录到 Azure 门户:导航到位于 portal.azure.com 的 Azure 门户。
  2. 注册新应用程序
    • 转到“Azure Active Directory”。
    • 选择“应用注册”>“新建注册”。
    • 填写应用程序详细信息,例如名称、重定向 URI 等。
    • 单击“注册”。
  3. 配置 API 权限
    • 注册后,导航到“API 权限”。
    • 单击“添加权限”,然后选择“我的组织使用的 API”。
    • 搜索 SAP 系统或相关 API 并添加所需的权限。
    • 授予权限管理员同意。

步骤 2:创建客户端密码

  1. 导航到已注册的应用程序:转到“证书和密码”。
  2. 创建新客户端密码
    • 单击“新建客户端密码”。
    • 输入说明并设置有效期。
    • 单击“添加”并记下客户端密码值,因为身份验证需要该值。

步骤 3:为 Azure AD 集成配置 SAP 系统

  1. 访问 SAP Cloud Platform:登录到 SAP Cloud Platform Cockpit。
  2. 设置信任配置
    • 转到“安全性”>“信任配置”。
    • 通过从 Azure AD 导入联合元数据 XML,将 Azure AD 添加为受信任的 IdP。 这可以在 Azure AD 应用注册的“终结点”部分(在联合元数据文档下)找到。
  3. 配置 OAuth2 客户端
    • 在 SAP 系统中,使用从 Azure AD 获取的客户端 ID 和客户端密码配置 OAuth2 客户端。
    • 设置令牌终结点和其他相关的 OAuth2 参数。

步骤 4:请求访问令牌

提示

请考虑使用 Azure API 管理,在一个位置集中为 Azure、Power Platform、M365 等平台的所有客户端应用简化 SAP 主体传播过程,包括智能令牌缓存、安全令牌处理和管理选项(例如请求限制)。 详细了解如何使用 Azure API 管理进行 SAP 主体传播。 如果首选 SAP Business Technology Platform,请参阅此文章

  1. 准备令牌请求

    • 使用以下详细信息构建令牌请求:
      • 令牌终结点:这通常是 https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
      • 客户端 ID:Azure AD 中的应用程序(客户端)ID。
      • 客户端密码:Azure AD 中的客户端密码值。
      • 范围:所需的范围(例如 https://your-sap-system.com/.default)。
      • 授予类型:使用 client_credentials 进行服务器到服务器的身份验证。
  2. 发出令牌请求

    • 使用 Postman 等工具或脚本向令牌终结点发送 POST 请求。
    • 示例请求(在 cURL 中):
      curl -X POST \
        https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token \
        -H 'Content-Type: application/x-www-form-urlencoded' \
        -d 'client_id={client_id}&scope=https://your-sap-system.com/.default&client_secret={client_secret}&grant_type=client_credentials'
      
  3. 提取访问令牌

    • 如果请求成功,响应将包含访问令牌。 使用此访问令牌对 SAP 系统的 API 请求进行身份验证。

步骤 5:将访问令牌用于 API 请求

  1. 在 API 请求中包含访问令牌
    • 每次向 SAP 系统发出请求时,请在 Authorization 标头中包含访问令牌。
    • 示例标头:
      Authorization: Bearer {access_token}
      

后续步骤