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

Android Java应用使用MS Graph API 6.12时如何获取authorizationCode?

在Android Java中获取AuthorizationCode用于AuthorizationCodeCredentialBuilder

1. 配置Azure AD应用

  • 登录Azure门户,在应用注册中创建/使用目标Android应用,确保:
    • 重定向URI设置为msal{CLIENT_ID}://auth(需与代码中REDIRECT_URL完全一致)
    • 启用授权码流,并添加“移动和桌面应用”平台
    • 为应用授予Files.Read.All等OneDrive相关权限,按需勾选“管理员同意”

2. 通过MSAL Android库发起授权请求

Android属于公共客户端,需借助MSAL库完成用户授权并获取授权码:

  • 先在项目build.gradle中添加MSAL依赖:
    dependencies {
        implementation 'com.microsoft.identity.client:msal:4.14.0'
    }
    
  • 初始化MSAL客户端并发起授权:
    // 初始化PublicClientApplication
    PublicClientApplication pca = new PublicClientApplication.Builder(context)
            .clientId(CLIENT_ID)
            .authority("https://login.microsoftonline.com/" + TENANT_ID)
            .build();
    
    // 定义需要的权限,offline_access用于获取刷新令牌
    List<String> scopes = Arrays.asList("Files.Read.All", "offline_access");
    
    // 发起授权请求
    pca.acquireToken(getActivity(), scopes, new AuthenticationCallback() {
        @Override
        public void onSuccess(IAuthenticationResult authenticationResult) {
            // 此处获取到的就是所需的authorizationCode
            String authorizationCode = authenticationResult.getAuthorizationCode();
            // 传入AuthorizationCodeCredentialBuilder使用
            initGraphCredential(authorizationCode);
        }
    
        @Override
        public void onError(MsalException exception) {
            // 处理授权失败逻辑
        }
    
        @Override
        public void onCancel() {
            // 用户取消授权逻辑
        }
    });
    

3. 关键注意事项

  • Android是公共客户端,禁止在代码中硬编码clientSecret,需移除AuthorizationCodeCredentialBuilder中的.clientSecret(CLIENT_SECRET_VALUE)参数,修正后的代码:
    final AuthorizationCodeCredential credential = new AuthorizationCodeCredentialBuilder()
            .clientId(CLIENT_ID)
            .tenantId(TENANT_ID)
            .authorizationCode(authorizationCode)
            .redirectUrl(REDIRECT_URL)
            .build();
    
  • 授权码为一次性有效,使用后会失效,需重新发起授权获取新的code
  • 确保Azure应用注册的重定向URI与代码中REDIRECT_URL完全匹配,否则授权会失败

内容的提问来源于stack exchange,提问作者GGK stands for Ukraine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:34:53