You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel VBA中实现基于Azure AD的SAML 2.0单点登录?

可行性结论

完全可以实现,无需修改原有Oracle Fusion SOAP接口的调用逻辑,仅需要调整身份凭证的获取和提交逻辑即可。

你当前使用的基础认证方式是把手动输入的账号密码编码后放在请求头中完成校验,替换为Azure AD SAML 2.0单点登录的核心逻辑是先向Azure AD请求合法的身份凭证,再用该凭证替换原有Basic认证头调用Oracle Fusion接口,Oracle Fusion本身原生支持SAML断言作为身份校验凭证,也支持和Azure AD做预集成的SSO配置。

前置准备工作
  • 在Azure AD侧完成Oracle Fusion应用的SAML 2.0集成配置,记录租户ID、应用ID、SAML端点等核心参数
  • 在Oracle Fusion侧完成Azure AD作为可信身份提供商的配置,确保Azure AD签发的SAML断言可以被Oracle Fusion正常识别为合法登录凭证
  • 确保Excel运行环境的网络可以正常访问Azure AD的认证端点
代码修改方案

原有代码仅需要替换Authorization请求头的生成逻辑即可,不需要调整SOAP报文内容,核心修改后的代码示例如下:

Dim vFlag As Integer
Dim tmpReport As String
Dim documentID As String
Dim sURL As String
Dim xmlhtp As New MSXML2.XMLHTTP60
vFlag = 0
Dim xmldoc As Object
Set xmldoc = CreateObject("Microsoft.XMLDOM")
xmldoc.SetProperty "SelectionLanguage", "XPath"
xmldoc.async = False
Dim xml As String
sURL = Constants.EXT_REPORT_SERVICE_URL
setStatus ("Calling report ..." & sURL)

' 原有基础认证逻辑删除,替换为从Azure AD获取SAML断言
Dim samlAssertion As String
' 此处调用封装好的Azure AD认证方法获取SAML断言,方法内部实现Azure AD SAML请求构造、响应解析
samlAssertion = GetAzureADSAMLAssertion()

' 构造SOAP报文逻辑和原有完全一致
tmpReport = tmpReport & vbCrLf & "<soapenv:Envelope xmlns:soapenv=""http://www.w3.org/2003/05/soap-envelope"" xmlns:pub=""http://xmlns.oracle.com/oxp/service/PublicReportService""> "
tmpReport = tmpReport & vbCrLf & "   <soapenv:Header/>                                                                                                                               "
tmpReport = tmpReport & vbCrLf & "   <soapenv:Body>                                                                                                                                  "
tmpReport = tmpReport & vbCrLf & "      <pub:validateLogin/>                                                                                                                        "
tmpReport = tmpReport & vbCrLf & "   </soapenv:Body>                                                                                                                                 "
tmpReport = tmpReport & "</soapenv:Envelope>"

With xmlhtp
    .Open "post", sURL, False
    .SetRequestHeader "Content-Type", "application/soap+xml; charset=UTF-8"
    .SetRequestHeader "soapAction", "validateLogin"
    ' 替换原有Basic认证头,使用SAML断言作为认证凭证
    .SetRequestHeader "Authorization", "Bearer " & samlAssertion
    .Send tmpReport
    xml = .ResponseText
    If InStr(1, xml, "true", vbTextCompare) Then
        vFlag = 1
    End If
    validateLogin = vFlag
End With
End Function
注意事项
  • SAML断言存在有效期,需要根据返回的过期时间定时刷新凭证,不要硬编码断言内容
  • 如果你更熟悉OAuth2.0逻辑,也可以从Azure AD获取OAuth2.0访问令牌,用同样的方式替换认证头即可,调用逻辑完全一致
  • 原有SOAP报文、接口地址、调用方式都不需要做任何修改,仅需要调整认证头部分的逻辑

内容的提问来源于stack exchange,提问作者Nirbhay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:09:03