在将 WebLogic Server 上的 Java 应用迁移到 Azure 时启用最终用户授权和身份验证

本指南可帮助你使用 Microsoft Entra ID 为 WebLogic Server 上的 Java 应用启用企业级最终用户身份验证和授权。

Java EE 开发人员期望 标准平台安全机制 按预期工作,即使将工作负载移动到 Azure 也是如此。 Oracle WebLogic Server (WLS) Azure 应用程序 允许使用来自 Microsoft Entra 域服务的用户填充内置安全领域。 在 Azure 应用程序中使用 Java EE 中的标准 <security-role> 元素时,用户信息通过轻型目录访问协议(LDAP)从Microsoft Entra 域服务流出。

本指南分为两部分。 如果已Microsoft公开安全 LDAP 的 Entra 域服务,则可以跳到 “配置 WLS ”部分。

本指南介绍如何:

  • 创建和配置 Microsoft Entra 域服务托管域。
  • 为 Microsoft Entra 域服务托管域配置安全的轻型目录访问协议(LDAP)。
  • 使 WebLogic Server 能够访问 LDAP 作为其默认安全领域。

本指南不帮助你重新配置现有的 Microsoft Entra ID 域服务部署。 但是,应该可以按照本指南进行操作,并查看可以跳过的步骤。

先决条件

考虑迁移上下文

以下列表介绍了有关迁移本地 WLS 安装和Microsoft Entra ID 的一些事项:

  • 如果已有一个没有通过 LDAP 公开的域服务的 Microsoft Entra ID 租户,本指南演示如何公开 LDAP 功能并将其与 WLS 集成。
  • 如果方案涉及本地 Active Directory林,请考虑使用 Microsoft Entra ID 实现混合标识解决方案。 有关详细信息,请参阅混合标识文档
  • 如果已有本地 Active Directory域服务(AD DS)部署,请浏览“比较自管理Active Directory 域服务”、“Microsoft Entra ID”和托管Microsoft Entra 域服务的迁移路径
  • 如果要针对云进行优化,本指南介绍如何从头开始,Microsoft Entra ID 域服务 LDAP 和 WLS。
  • 有关将 WebLogic Server 迁移到 Azure 虚拟机的全面调查,请参阅将 WebLogic Server 应用程序迁移到 Azure 虚拟机
  • 有关 Active Directory 和 Microsoft Entra ID 的详细信息,请参阅 比较 Active Directory 与 Microsoft Entra ID

配置 Microsoft Entra 域服务托管域

本部分将引导你完成所有步骤,以建立与 WLS 集成的 Microsoft Entra 域服务托管域。 Microsoft Entra ID 不直接支持轻型目录访问协议 (LDAP) 协议或安全 LDAP。 而是通过 Microsoft Entra ID 租户中的 Microsoft Entra 域服务托管域实例启用支持。

注意

本指南使用Microsoft Entra 域服务的“仅限云”用户帐户功能。 支持其他用户帐户类型,但本指南未介绍。

创建和配置 Microsoft Entra 域服务托管域

本文使用单独的教程来建立 Microsoft Entra 域服务托管域。

完成本教程:创建和配置Microsoft Entra 域服务托管域,但不包括“为域服务启用用户帐户”部分。 这一节需要在本教程的上下文中进行特殊处理,如下一部分所述。 请确保完全正确地完成 DNS 操作。

记下完成步骤“输入托管域的 DNS 域名”时指定的值。本文稍后会用到它。

创建用户和重置密码

以下步骤演示如何创建用户并更改其密码,这需要使用户通过 LDAP 成功传播。 如果你有现有的Microsoft Entra 域服务托管域,则这些步骤可能没有必要。

  1. 在Azure 门户中,确保对应于 Microsoft Entra ID 租户的订阅是当前 Active Directory。 若要了解如何选择正确的目录,请参阅 将 Azure 订阅关联或添加到 Microsoft Entra 租户。 如果选择了错误的目录,则无法创建用户,或者无法在错误的目录中创建用户。
  2. 在Azure 门户顶部的搜索框中,输入“用户”。
  3. 选择“新建用户”。
  4. 确保 已选择“创建用户 ”。
  5. 填写用户名名称名字姓氏的值。 让其余字段保留其默认值。
  6. 选择创建
  7. 在表中选择新创建的用户。
  8. 选择重置密码
  9. 在出现的面板中,选择“重置密码”
  10. 记下临时密码。
  11. 在“incognito”或专用浏览器窗口中,访问Azure 门户并使用用户的凭据和密码登录。
  12. 出现提示时,更改密码。 记下新密码。 您可以稍后使用它。
  13. 注销并关闭“incognito”窗口。

对要启用的每个用户重复“选择 新用户”到“注销关闭”中的步骤。

为 Microsoft Entra 域服务托管域配置安全 LDAP

本节将指导你完成一个单独的教程,以提取用于配置 WLS 的值。

首先,在单独的浏览器窗口中打开教程 ,为 Microsoft Entra 域服务托管域 配置安全 LDAP,以便在本教程中运行时查看以下变体。

当到达“导出客户端计算机的证书”部分时,请记下保存以.cer结尾的证书文件的位置。 使用证书作为 WLS 配置的输入。

到达“锁定通过 Internet 进行安全 LDAP 访问”部分时,请指定“任何”作为源。 本指南稍后会使用特定 IP 地址来收紧安全规则。

在对托管域执行测试查询中的步骤之前,请使用以下步骤使测试成功:

  1. 在Azure 门户中,访问Microsoft Entra 域服务实例的概述页。

  2. “设置” 区域中,选择“ 属性”。

  3. 在页面的右侧窗格中,向下滚动,直到看到 “管理员”组。 此标题下应该有一个“AAD DC 管理员”的链接。 选择该链接。

  4. 在“管理部分”中选择“成员”

  5. 选择“添加成员”。

  6. 在“搜索”文本字段中,输入一些字符以查找在前面步骤中创建的一个用户

  7. 选择该用户,然后激活“选择”按钮

    在执行“测试对托管域的查询”一节中的步骤时,必须使用此用户

注意

以下列表提供了一些有关查询 LDAP 数据的提示,需要执行这些操作来收集 WLS 配置所需的一些值:

  • 本教程建议你使用 Windows 程序 LDP.exe。 此程序仅在 Windows 上可用。 对于非 Windows 用户,也可以使用 Apache Directory Studio 来实现同样的目的。
  • 使用 LDP.exe 登录到 LDAP 时,用户名只是 @之前的一部分。 例如,如果用户是 alice@contoso.onmicrosoft.com,则 LDP.exe 绑定操作的用户名是 alice。 此外,让 LDP.exe 保持运行并登录,以便在后续步骤中使用

为外部访问配置 DNS 区域一节中,记下“安全 LDAP 外部 IP 地址”的值。 您可以稍后使用它。

如果安全 LDAP 外部 IP 地址的值并不明显,请使用以下步骤获取 IP 地址:

  1. 在Azure 门户中,找到包含Microsoft Entra 域服务资源的资源组。

  2. 在资源列表中,选择 Microsoft Entra 域服务资源的公共 IP 地址 资源,如以下屏幕截图所示。 公共 IP 地址可能以 aadds.

    显示“资源组”页的 Azure 门户屏幕截图,其中突出显示了“公共 IP 地址”。

在本指南中指示要执行此操作之前,请勿执行清理资源中的步骤。

考虑到这些变体,请为 Microsoft Entra 域服务托管域完成配置安全 LDAP。 现在可以收集需要提供给 WLS 配置的值。

注意

等待安全 LDAP 配置完成处理,然后再转到下一部分。

禁用安全性弱的 TLS v1

默认情况下,Microsoft Entra 域服务启用 TLS v1 的使用,TLS v1 被视为弱,在 WebLogic Server 14 及更高版本中不受支持。

本部分介绍如何禁用 TLS v1 密码。

首先,获取启用 LDAP 的 Microsoft Entra 域服务托管域的资源 ID。 以下命令获取名为 的资源组aadds-rg中命名aaddscontoso.com的 Azure 域服务实例的 ID:

AADDS_ID=$(az resource show \
    --resource-group aadds-rg \
    --resource-type "Microsoft.AAD/DomainServices" \
    --name aaddscontoso.com \
    --query "id" \
    --output tsv)

若要禁用 TLS v1,请使用以下命令:

az resource update \
    --ids $AADDS_ID \
    --set properties.domainSecuritySettings.tlsV1=Disabled

输出显示 "tlsV1": "Disabled" 如下 domainSecuritySettings例所示:

"domainSecuritySettings": {
      "ntlmV1": "Enabled",
      "syncKerberosPasswords": "Enabled",
      "syncNtlmPasswords": "Enabled",
      "syncOnPremPasswords": "Enabled",
      "tlsV1": "Disabled"
}

有关详细信息,请参阅 强化 Microsoft Entra 域服务托管域

注意

如果将锁添加到资源或资源组,则尝试更新托管域时遇到错误消息,例如: Message: The scope '/subscriptions/xxxxx/resourceGroups/aadds-rg/providers/Microsoft.AAD/domainServices/aaddscontoso.com' cannot perform write operation because the following scope(s) are locked: '/subscriptions/xxxxx/resourceGroups/aadds-rg'. Please remove the lock and try again.

记下Microsoft Entra 域服务托管域的以下信息。 将在后面的部分中使用此信息。

properties 说明
服务器主机 此值是完成 “创建”并配置Microsoft Entra ID 域服务托管域时保存的公共 DNS 名称。
安全 LDAP 外部 IP 地址 此值是保存在“配置 DNS 区域以用于外部访问”部分的安全 LDAP 外部 IP 地址值。
主体 若要获取此值,请返回到 LDP.exe ,并使用以下步骤获取仅在云上使用的主体的值:
  1. 在“视图”菜单中,选择“树”
  2. 在“树状视图”对话框中,将“BaseDN”保留为空,然后选择“确定”
  3. 在右侧窗格中单击右键并选择“清除输出”
  4. 展开树视图,选择以 OU=AADDC Users.. 开头的条目。
  5. 在“浏览”菜单中,选择“搜索”
  6. 在出现的对话框中,接受默认值并选择“运行”
  7. 输出显示在右侧窗格中后,选择“关闭”,在“运行”旁边。
  8. 扫描输出, Dn 查找与添加到 AAD DC Administrators 组的用户对应的条目。 它以 Dn: CN=&lt;user name&gt;OU=AADDC Users 开头。
用户基 DN 和组基 DN 在本教程中,这两个属性的值相同:主体 OU=AADDC Users
主体密码 此值是添加到 AAD DC Administrators 组的用户的密码。
Microsoft Entra 域服务 LDAPS 连接的公钥 此值是在完成客户端计算机的“导出证书”部分时要求保存的.cer文件。

配置 WLS

本部分可帮助你从之前部署的 Microsoft Entra 域服务托管域收集参数值。

部署 Azure 虚拟机 上运行 Oracle WebLogic Server 的解决方案中列出的任何Azure 应用程序时,可以按照步骤将 Microsoft Entra 域服务托管域与 WLS 集成。

Azure 应用程序部署完成后,使用以下步骤查找 URL 以访问 WebLogic 管理控制台:

  1. 打开Azure 门户,转到预配的资源组。
  2. 在导航窗格的“设置”部分,选择“部署”。 你将看到此资源组的部署的有序列表,最新的部署在最前面。
  3. 滚动到此列表中最早的条目。 此条目对应于你在上一节中启动的部署。 选择最旧的部署,其名称以类似于 oracle. 的内容开头。
  4. 选择“输出”。 此选项显示部署的输出列表。
  5. adminConsole 值是 WLS 管理控制台的完全限定的公共 Internet 可见链接。 选择字段值旁边的复制图标,将链接复制到剪贴板并将其保存在文件中。

注意

本教程演示如何使用 TLS v1.2 连接到 Microsoft Entra 域服务托管域 LDAP 服务器。 若要确保兼容性,需要为 JDK 8 上的部署启用 TLS v1.2。

若要验证 JDK 版本,请使用以下步骤:

  1. 将 adminConsole 的值粘贴到浏览器地址栏中,然后登录到 WLS 管理控制台。

  2. 在“域结构”下,选择“环境>服务器>管理员>监视>常规,然后查找 Java 版本。

    “WLS 管理控制台监视 > 常规”选项卡的屏幕截图,其中突出显示了“Java 版本”字段。

如果 Java 版本为 8,请使用以下步骤启用 TLS v1.2:

  1. 在“域结构”下,选择“环境>服务器管理员>配置>服务器>启动”。

  2. Arguments 节中,指定值 -Djdk.tls.client.protocols=TLSv1.2

  3. 选择“保存”以保存更改。

  4. 在“更改中心”下,选择“激活更改”以启用该选项。

    WLS 管理控制台配置 > 服务器“开始”选项卡的屏幕截图。

将 Microsoft Entra 域服务托管域与 WLS 集成

运行 WebLogic 管理员服务器,并使用 LDAP 部署和保护Microsoft Entra 域服务托管域后,现在可以启动配置。

上传和导入公共 CA

WLS 使用安全 LDAP(LDAPS)与托管域通信,这是通过安全套接字层 (SSL) 或传输层安全性 (TLS) 的 LDAP。 若要建立此连接,必须将公共证书颁发机构(CA)证书(.cer文件)上传到 WLS 信任密钥存储中。

使用以下步骤将证书上传到运行管理服务器的虚拟机:

  1. 按照快速入门的“连接到虚拟机”部分中的说明启用访问adminVM:在 Azure 虚拟机上部署 WebLogic Server。

  2. 打开 Bash 终端,然后使用以下命令上传证书。 将ADMIN_PUBLIC_IP值替换为可在Azure 门户中找到的实值。 需要输入用于连接计算机的密码。

    export CER_FILE_NAME=azure-ad-ds-client.cer
    export ADMIN_PUBLIC_IP="<admin-public-ip>"
    export ADMIN_VM_USER="weblogic"
    
    cd <path-to-cert>
    scp ${CER_FILE_NAME} "$ADMIN_VM_USER@$ADMIN_PUBLIC_IP":/home/${ADMIN_VM_USER}/${CER_FILE_NAME}
    
  3. 上传证书后,需要将其移动到 WLS 域文件夹 /u01/domains ,并使用以下命令更改其所有权 oracle:oracle

    export RESOURCE_GROUP_NAME=contoso-rg
    export ADMIN_VM_NAME=adminVM
    export CA_PATH=/u01/domains/${CER_FILE_NAME}
    
    az vm run-command invoke \
        --resource-group $RESOURCE_GROUP_NAME \
        --name ${ADMIN_VM_NAME} \
        --command-id RunShellScript \
        --scripts "mv /home/${ADMIN_VM_USER}/${CER_FILE_NAME} /u01/domains; chown oracle:oracle ${CA_PATH}"
    
  4. 将证书导入密钥存储。 Azure 应用程序使用默认信任存储 <jvm-path-to-security>/cacerts预配 WLS。 特定路径可能因 JDK 版本而异。 可以使用以下步骤导入 Microsoft Entra 域服务托管域公共 CA:

    1. 查询用于设置域环境变量的脚本。

      export DOMIAN_FILE_PATH=$(az vm run-command invoke \
          --resource-group $RESOURCE_GROUP_NAME \
          --name ${ADMIN_VM_NAME} \
          --command-id RunShellScript \
          --scripts "find /u01/domains -name setDomainEnv.sh" \
          --query value[*].message \
          --output tsv \
          | sed -n '/\[stdout\]/!b; n; p')
      
      echo $DOMIAN_FILE_PATH
      
    2. 使用以下命令导入 CA。 请注意在上一部分中检查的 Java 版本。

      az vm run-command invoke \
          --resource-group $RESOURCE_GROUP_NAME \
          --name ${ADMIN_VM_NAME} \
          --command-id RunShellScript \
          --scripts ". ${DOMIAN_FILE_PATH};export JVM_CER_PATH=\${JAVA_HOME}/lib/security/cacerts;\${JAVA_HOME}/bin/keytool -noprompt -import -alias aadtrust -file ${CA_PATH} -keystore \${JVM_CER_PATH} -storepass changeit"
      

    应会看到与如下示例类似的输出:

    {
    "value": [
      {
        "code": "ProvisioningState/succeeded",
        "displayStatus": "Provisioning succeeded",
        "level": "Info",
        "message": "Enable succeeded: \n[stdout]\n\n[stderr]\nCertificate was added to keystore\n",
        "time": null
      }
     ]
    }
    

注意

如果自定义信任存储,则必须将 Entra 域服务托管域公共 CA 导入到信任密钥存储中。 无需将证书导入 WLS 托管服务器。 有关详细信息,请参阅 配置 WebLogic 以使用 LDAP

配置 WLS 主机名验证

由于为证书中的主机名使用通配符*.aaddscontoso.com为 Microsoft Entra 域服务托管域配置安全 LDAP,因此必须使用适当的主机名验证配置 WLS 管理员服务器。 使用以下步骤禁用验证。 对于 WLS 14 及更高版本,你可以改为选择 通配符主机名验证

  1. 将 adminConsole 的值粘贴到浏览器并登录到 WLS 管理控制台。
  2. “更改中心”中,选择“ 锁定和编辑”。
  3. 选择“环境>服务器>管理员>SSL>高级”。
  4. 在主机名验证旁边,选择“”。
  5. 选择“ 保存激活更改 ”以保存配置。

解决安全 LDAP 访问的流量

通过 Internet 启用安全 LDAP 访问后,可以更新 DNS 区域,以便客户端计算机可以找到此托管域。 安全 LDAP 外部 IP 地址 值列在托管域的 “属性 ”选项卡上。 有关详细信息,请参阅 配置 DNS 区域以供外部访问

如果没有已注册的 DNS 区域,可以在主机文件中添加一个条目 adminVM ,以解析外部 IP 地址( ldaps.<managed-domain-dns-name> 此处 ldaps.aaddscontoso.com)的流量。 在运行以下命令之前,请更改值:

export LDAPS_DNS=ldaps.aaddscontoso.com
export LDAPS_EXTERNAL_IP=<entra-domain-services-manged-domain-external-ip>

az vm run-command invoke \
    --resource-group $RESOURCE_GROUP_NAME \
    --name ${ADMIN_VM_NAME} \
    --command-id RunShellScript \
    --scripts "echo \"${LDAPS_EXTERNAL_IP} ${LDAPS_DNS}\" >> /etc/hosts"

运行以下命令以重启管理员服务器以加载配置:

az vm run-command invoke \
    --resource-group $RESOURCE_GROUP_NAME \
    --name ${ADMIN_VM_NAME} \
    --command-id RunShellScript \
    --scripts "systemctl stop wls_admin"

az vm run-command invoke \
    --resource-group $RESOURCE_GROUP_NAME \
    --name ${ADMIN_VM_NAME} \
    --command-id RunShellScript \
    --scripts "systemctl start wls_admin"

创建和配置 LDAP 身份验证提供程序

解析证书导入和安全 LDAP 访问流量后,可以使用以下步骤从 WLS 控制台配置 LDAP 提供程序:

  1. adminConsole 值粘贴到浏览器地址栏中,并在 WLS 管理控制台登录。

  2. 在“更改中心”下,选择“锁定”和“编辑”。

  3. 在“域结构”下,选择“安全领域>“提供程序>>新”,并使用以下值创建新的身份验证提供程序。

    • 对于 Name,请填写 AzureEntraIDLDAPProvider
    • 对于 类型,请选择 ActiveDirectoryAuthenticator
  4. 选择“确定”,保存更改。

  5. 在提供程序列表中,选择 AzureEntraIDLDAPProvider

  6. 对于配置>通用>控制标志,请选择“足够”。

  7. 选择“保存”以保存更改。

  8. 对于 配置>提供程序特定,输入之前获取的 Microsoft Entra 域服务托管域连接信息。 获取值的步骤列在“为 Microsoft Entra 域服务托管域配置安全 LDAP”表中。

  9. 填写以下必填字段,保留其他字段的默认值:

    示例值
    主机 托管域 LDAP 服务器 DNS, ldaps.<managed-domain-dns-name> ldaps.aaddscontoso.com
    端口 636 636
    主体 仅限云用户的主体 CN=WLSTest,OU=AADDC Users,DC=aaddscontoso,DC=com
    凭据 仅限云用户的凭据 -
    SSLEnabled 已选中 -
    用户基础 DN 用户群可分辨名称 (DN) OU=AADDC Users,DC=aaddscontoso,DC=com
    来自名称筛选器的用户 (&(sAMAccountName=%u)(objectclass=user)) (&(sAMAccountName=%u)(objectclass=user))
    用户名属性 sAMAccountName sAMAccountName
    User 对象类 user user
    组基 DN 组基 DN。 OU=AADDC Users,DC=aaddscontoso,DC=com
    组成员身份搜索 limit limit
    最大组成员身份搜索级别 1 1
    使用令牌组查找组成员身份 已选中 -
    连接池大小 5 5
    Connect Timeout 120 120
    连接重试限制 5 5
    结果时间限制 300 300
    保持活动状态已启用 已选中 -
    已启用缓存 已选中 -
    缓存大小 4000 4000
    缓存 TTL 300 300
  10. 选择“保存”以保存提供程序。

  11. 选择“配置”旁边的“性能”。

  12. 选择“ 启用组成员身份查找层次结构缓存”。

  13. 选择“ 启用 SID 以对查找缓存进行分组”。

  14. 选择“保存”以保存配置。

  15. 选择“激活更改以调用更改。

注意

请注意 LDAP 服务器的主机名。 它应采用格式 ldaps.<managed-domain-dns-name>。 在此示例中,值为 ldaps.aaddscontoso.com

如果遇到错误,请尝试 [Security:090834]No LDAP connection could be established. ldap://dscontoso.com:636 Cannot contact LDAP server重启 adminVM 以解决该问题。

必须重启 WLS 管理员服务器才能使更改生效。 运行以下命令以重启管理员服务器:

az vm run-command invoke \
    --resource-group $RESOURCE_GROUP_NAME \
    --name ${ADMIN_VM_NAME} \
    --command-id RunShellScript \
    --scripts "systemctl stop wls_admin"

az vm run-command invoke \
    --resource-group $RESOURCE_GROUP_NAME \
    --name ${ADMIN_VM_NAME} \
    --command-id RunShellScript \
    --scripts "systemctl start wls_admin"

注意

如果要使用来自 Microsoft Entra ID 的用户在群集中对应用程序进行身份验证,则必须重启托管服务器以激活提供程序。 可以通过重启托管服务器的虚拟机来执行此操作。

验证

重启管理员服务器后,使用以下步骤验证集成是否成功:

  1. 访问 WLS 管理控制台。
  2. 在导航窗格中,展开树并选择“安全领域”,然后选择“安全领域”。>>
  3. 如果集成成功,则可以找到 Microsoft Entra ID 提供程序,例如 AzureEntraIDLDAPProvider
  4. 在导航窗格中,展开树并选择“安全领域>”,即“用户>和组”。
  5. 如果集成成功,可以从 Microsoft Entra ID 提供程序中找到用户。

注意

首次访问 用户和组时,加载用户需要几分钟时间。 WLS 会缓存用户,并在下次访问时速度更快。

锁定通过 Internet 进行的安全 LDAP 访问

在前面的步骤中站稳安全 LDAP 时,请将源设置为网络安全组中规则的“任何AllowLDAPS”。 现在,WLS 管理服务器已部署并连接到 LDAP,请使用Azure 门户获取其公共 IP 地址。 重新访问锁定通过 Internet 进行的安全 LDAP 访问,并将“任意”更改为 WLS 管理服务器的特定 IP 地址

清理资源

现在,可以按照配置 Microsoft Entra 域服务托管域的安全 LDAP 的“清理资源”部分中的步骤进行操作。

后续步骤

了解将 WebLogic Server 应用迁移到 Azure 的其他方面。