如何在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
相关产品推荐
相关产品推荐

