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

如何在Excel VBA中实现Microsoft单点登录功能?

可行性结论

完全可以通过现有SOAP API兼容实现微软单点登录需求,无需重构现有接口调用逻辑,仅需修改认证凭证生成部分即可。

核心实现逻辑

你当前使用的Oracle Fusion PublicReportService SOAP接口本身支持OAuth 2.0令牌认证,微软单点登录本质是通过Azure AD发放符合Oracle Fusion信任规则的访问令牌,替换原有基础认证的凭证即可:

  • 前置配置需要企业IT管理员在Azure AD中完成两个注册操作:将Oracle Fusion配置为支持SSO的企业应用,同时将你的Excel VBA程序注册为公开客户端,授予其访问Oracle Fusion API的权限
  • 原有请求逻辑保持不变,仅需要把原来的Authorization: Basic <Base64编码的用户名密码>请求头,替换为Authorization: Bearer <Azure AD发放的访问令牌>即可
代码修改示例

第一步:新增获取Azure AD访问令牌的VBA函数

Function GetAzureADAccessToken() As String
    Dim xmlhtp As New MSXML2.XMLHTTP60
    Dim tenantId As String, clientId As String, scope As String
    Dim requestBody As String
    
    ' 以下参数由IT管理员配置后提供
    tenantId = "你的Azure AD租户ID"
    clientId = "注册的Excel客户端应用ID"
    scope = "Oracle Fusion应用的API权限范围"
    
    requestBody = "grant_type=authorization_code" & _
                  "&client_id=" & clientId & _
                  "&scope=" & scope & _
                  "&code=<用户登录后获取到的授权码>" ' 授权码通过系统默认浏览器跳转登录后捕获
    
    With xmlhtp
        .Open "POST", "https://login.microsoftonline.com/" & tenantId & "/oauth2/v2.0/token", False
        .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .Send requestBody
        
        ' 解析返回JSON获取access_token,可引入VBA-JSON库解析,此处省略解析逻辑
        GetAzureADAccessToken = "解析得到的访问令牌"
    End With
End Function

第二步:修改原有认证逻辑

将原有代码中设置基础认证头的行:

.SetRequestHeader "Authorization", "Basic " & Base64.EncodeTextBase64(username + ":" + password)

替换为SSO令牌认证:

.SetRequestHeader "Authorization", "Bearer " & GetAzureADAccessToken()
注意事项
  • 桌面端VBA场景推荐使用OAuth 2.0授权码流实现登录,避免直接处理用户密码,符合企业安全规范
  • 访问令牌有固定有效期,可新增本地缓存逻辑,过期后再重新获取,无需每次调用接口都触发登录流程
  • 若企业采用SAML协议的SSO方案,也可通过获取SAML断言后转换为Oracle Fusion接受的认证头实现,逻辑和OAuth方案类似

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:27:03