Android使用MSAL访问Azure App Proxy注册的IIS服务返回登录页
问题描述
我们已将IIS服务注册至Azure App Proxy,在Android端通过MSAL获取Access Token后,将其放入Authorization: Bearer请求头中发起SOAP请求。MSAL可正常返回Token,但调用该服务时(包括Postman测试)均返回微软登录页面。使用的MSAL库为AzureAD官方Android版本。
相关截图说明:
- Postman测试请求返回微软登录页面的截图
- 成功获取到的Access Token信息截图
核心代码片段
获取账号及登录逻辑:
mSingleAccountApp.getCurrentAccountAsync(new ISingleAccountPublicClientApplication.CurrentAccountCallback() { @Override public void onAccountLoaded(@Nullable IAccount activeAccount) { if (activeAccount == null) { final SignInParameters signInParameters = SignInParameters.builder() .withActivity(getActivity()) .withCallback(getAuthInteractiveCallback()) .withScopes(Arrays.asList(scopes)) .withLoginHint(pwdMailAdder) .build(); mSingleAccountApp.signIn(signInParameters); } else { mAccount = activeAccount; } } }
认证回调逻辑:
private AuthenticationCallback getAuthInteractiveCallback() { return new AuthenticationCallback() { @Override public void onSuccess(IAuthenticationResult authenticationResult) { ...} } }
排查建议
- 验证Token受众(Audience):解码Access Token,检查
aud声明是否与Azure App Proxy对应企业应用的Application ID URI完全匹配。受众不匹配会直接触发登录跳转。 - 检查请求权限范围(Scopes):请求Token时的scopes必须为目标Azure App Proxy应用的专属范围,格式为
{应用的Application ID URI}/.default,避免使用User.Read这类通用Graph API范围。 - 确认Azure App Proxy预身份验证设置:确保企业应用的预身份验证模式设为“Azure Active Directory”,未配置额外的访问控制规则拦截合法Token。
- 校验Token有效性:解码Token查看是否过期,以及是否包含
oid(用户对象ID)、tid(租户ID)等必要声明,确保签名合法有效。 - Postman请求细节排查:确认
Authorization头格式为Bearer {Token},无多余空格或拼写错误;请求URL必须使用Azure App Proxy分配的外部访问地址,不能直接访问内部IIS地址。 - Android端Token获取校验:在
onSuccess回调中确认获取的是authenticationResult.getAccessToken(),而非ID Token或其他类型令牌。
内容的提问来源于stack exchange,提问作者성체 유미
相关产品推荐
相关产品推荐

