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

如何在Business Central代码单元(AL代码)中获取OAuth令牌

Business Central AL代码获取OAuth2令牌(客户端凭证模式)可运行示例

以下是基于客户端凭证模式的完整可运行AL代码单元示例,适配Business Central最新版本:

codeunit 50100 "OAuth Token Manager"
{
    procedure GetOAuthToken(): Text
    var
        OAuth2: Codeunit OAuth2;
        ClientId: Text;
        ClientSecret: Text;
        TokenEndpoint: Text;
        Scope: Text;
        TokenResponse: Dictionary of [Text, Text];
        AccessToken: Text;
    begin
        // 替换为你的实际凭据和配置
        ClientId := '你的客户端ID';
        ClientSecret := '你的客户端密钥';
        TokenEndpoint := 'https://login.microsoftonline.com/你的租户ID/oauth2/v2.0/token';
        Scope := '目标API的权限范围(例如https://graph.microsoft.com/.default)';

        // 调用客户端凭证模式获取令牌
        if OAuth2.AcquireTokenWithClientCredentials(ClientId, ClientSecret, TokenEndpoint, Scope, TokenResponse) then begin
            if TokenResponse.Get('access_token', AccessToken) then
                exit(AccessToken);
            Error('令牌响应中未找到access_token字段');
        end else begin
            Error('获取OAuth令牌失败:%1', OAuth2.GetLastErrorText());
        end;
    end;
}

关键说明:

  • 参数替换:必须将代码中的ClientId、ClientSecret、TokenEndpoint、Scope替换为你在Postman中使用的有效参数
  • 错误处理:通过OAuth2.GetLastErrorText()可以获取详细的错误信息,方便排查问题
  • 权限验证:确保你的客户端应用已被授予目标API的对应应用权限(客户端凭证模式不需要用户交互,需配置应用级权限)

测试方法:

可以在页面或代码单元中调用该过程,例如:

procedure TestTokenRetrieval()
var
    OAuthTokenManager: Codeunit "OAuth Token Manager";
    Token: Text;
begin
    Token := OAuthTokenManager.GetOAuthToken();
    Message('获取到的令牌:%1', Token);
end;

常见问题排查:

  • 如果提示权限不足,检查Azure AD中客户端应用的权限配置是否正确,且已完成管理员同意
  • 如果令牌端点错误,确认租户ID和端点版本(v2.0或v1.0)是否与Postman一致
  • 如果客户端密钥错误,重新生成并复制正确的密钥值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:50:24