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

无Azure AD管理权限下iOS端MSAL集成问题咨询

项目背景

客户已切换使用Azure AD,我方需更新自有应用适配该身份体系,当前无客户方Azure AD管理门户访问权限,也无可用测试用户凭据,仅掌握以下已知信息:

  • 登录入口地址:https://myapplications.microsoft.com
  • 浏览器端登录流程共三步:第一步输入邮箱地址,第二步输入密码,第三步输入短信下发的OTP验证码,同时支持Microsoft Authenticator完成验证
  • 认证流程走完后默认跳转至Azure应用列表页面,我方需求为自有应用中不展示该页面:用户输入OTP完成Microsoft Graph API认证后,应用直接接管后续流程,认证所用webview需在认证完成后自动关闭。

我方前期调研了大量MSAL相关资料,因无测试凭据、无Azure AD管理权限,只能在无验证环境下开展盲开发。开发参考为Objective-C版本MSAL官方开源仓库(https://github.com/AzureAD/microsoft-authentication-library-for-objc),开发环境为Xcode 13.4.1 + Swift。

当前MSAL常量配置

通过Safari网页检查器抓取目标Azure AD应用的请求数据,已配置如下MSAL常量:

let kClientID = "2793995e-0a7d-40d7-bd35-6968ba142197" // 可能不正确,见下文问题1
let kGraphEndpoint = "https://graph.microsoft.com/" // 未在网页检查器数据中找到,参考多数MSAL示例代码配置
let kAuthority = "https://login.microsoftonline.com/common/" // 从网页检查器数据中获取
let kRedirectUri = "https://myapplications.microsoft.com" // 认证完成后跳转的URL
let kScopes: [String] = ["User.Read"] // 未在网页检查器数据中找到,参考多数MSAL示例代码配置
待解决问题
  1. 前述登录入口页面中固定展示client_id为2793995e-0a7d-40d7-bd35-6968ba142197,按照认知每个Azure AD应用都有独立client_id,因此该通用client_id应该不正确,能否通过Safari网页检查器抓取的目标应用数据定位到正确的client_id?
  2. 当前配置的常量可正常拉起登录流程,但测试人员完成登录后,展示所有Azure AD应用的最终页面会持续停留;而公开的MSAL示例代码在用户输入凭据完成认证后会自动关闭认证页面,请问认证webview的自动关闭是由服务端(Azure AD配置)控制还是客户端控制?
  3. 测试人员通过应用完成登录后,若通过应用切换器将应用挂起再重新打开,需要重新走完完整的登录流程,acquireTokenSilently静默登录功能不生效,但在Safari浏览器中静默登录可正常工作,该问题是什么原因导致的?
  4. 能否通过Safari网页检查器抓取的数据获取所需的产品bundle identifier,用于配置msauth.$(PRODUCT_BUNDLE_IDENTIFIER)格式的重定向URI?
核心诉求
  • 认证完成后不展示Graph API门户的应用列表页面
  • 应用从挂起状态恢复后可保持登录状态,acquireTokenSilently()接口正常工作
  • 若设备安装了Microsoft Authenticator,优先使用该应用完成认证

我方此前从未接触过Azure AD相关开发,需要关于配置错误、认知误区的相关提示。


2022年7月27日更新

再次明确前提:我方既无Azure AD门户访问权限,也无任何测试凭据(用户名、密码、短信OTP码),经过大量测试与模拟仍未解决问题。

普通用户在Safari浏览器中的正常登录流程

  1. 访问https://myapplications.microsoft.com
  2. 输入组织专属邮箱地址启动认证流程
  3. Azure识别对应租户,校验邮箱地址存在性后要求输入密码
  4. 后续根据设备配置,要么下发短信OTP验证码,要么拉起Microsoft Authenticator代理完成验证,具体验证方式由设备配置决定
  5. 最终跳转至Azure应用列表页面

iOS端当前异常现象

在iOS/macOS端(Xcode开发的自有应用)中上述流程表现类似,但MSAL调试日志显示未返回任何token,acquireToken()接口仅在webview被手动取消时才会完成回调,返回MSAL错误码-50005,我方推测Web应用本身不需要使用token?

当前我方在iOS应用中仅需要获取到访问token,即可在URL请求中携带Bearer令牌访问对应Web应用,现有两个疑问:

  • 如何在不跳转至不返回token的应用列表页面的前提下,获取该Web应用对应的访问token?
  • Azure AD是否支持使用获取到的token访问该Web应用?

我方已知对应的服务端解决方案是在Azure AD认证配置板块添加对应MY_BUNDLE_ID的重定向URI,但我方无法进行该服务端配置操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:24:34