iOS平台MSAL/ADAL库配置问题及AADSTS90130错误排查
Azure AD集成问题解决方案
嘿,我来帮你搞定这两个实际开发中常见的Azure AD集成问题,咱们一步步拆解:
一、配置MSAL Objective-C iOS示例项目
要跑通官方的MSAL Objective-C示例,关键是把Azure AD应用的信息正确填到项目里,步骤如下:
- 拿到官方示例项目后,打开项目找到配置入口:一般是在
SampleMSAL.xcconfig文件,或者直接在代码里找MSALPublicClientApplication的初始化代码 - 配置核心参数:
clientId:替换成你在Azure AD里注册的应用客户端ID(就是那串字母数字组成的ID)tenantId:如果是客户的单租户应用,填客户的租户ID;如果是多租户应用,填common即可redirectUri:必须和Azure AD应用注册里配置的重定向URI完全一致,iOS端格式一般是msauth.<你的BundleID>://auth
- 配置Info.plist:
- 添加URL类型:URL Schemes填
msauth.$(PRODUCT_BUNDLE_IDENTIFIER),保证Azure登录后能跳回你的App - 添加
LSApplicationQueriesSchemes数组,里面加上msauthv2,确保App能唤起Azure的登录页面
- 添加URL类型:URL Schemes填
- 最后运行项目,点击登录按钮,就能正常进入Azure AD的登录流程了
二、Swift 3.0项目集成ADAL后报错AADSTS90130
这个错误AADSTS90130本质是重定向URI不匹配,或是应用配置存在问题,咱们逐个排查:
错误说明:AADSTS90130是Azure AD返回的提示,意思是你请求里带的重定向URI,和Azure门户里应用注册的URI完全对不上,导致Azure不知道该把登录结果发回哪里
解决步骤:
- 先核对重定向URI:
打开Azure门户里客户的应用注册页面,找到“重定向URI”配置,确保你Swift代码里设置的redirectUri和这里的内容完全一致(大小写、符号、BundleID都不能错)。iOS端ADAL的重定向URI格式必须是msauth.<你的BundleID>://auth,而且要选“移动和桌面应用”类型 - 检查租户配置:
如果客户的应用是单租户,那初始化ADAL的时候必须指定客户的租户ID,不能用common。比如代码里要这么写:let authority = "https://login.microsoftonline.com/<客户的租户ID>" let context = ADAuthenticationContext(authority: authority, error: nil) - 核对Bundle ID:
确保Xcode项目里的Bundle ID,和Azure AD应用注册里关联的Bundle ID一致(有些场景需要在Azure里明确配置App的Bundle ID) - 配置Info.plist:
添加URL Scheme为msauth.<你的BundleID>,同时在LSApplicationQueriesSchemes数组里加入msauth,保证ADAL能正常唤起登录页面 - 代码示例参考:
let clientId = "<客户的应用客户端ID>" let redirectUri = URL(string: "msauth.com.yourcompany.customerapp://auth")! let resourceUri = "<你要访问的API资源URI>" // 比如客户的企业API地址 let authority = "https://login.microsoftonline.com/<客户租户ID>" let context = ADAuthenticationContext(authority: authority, error: nil) context.acquireToken(withResource: resourceUri, clientId: clientId, redirectUri: redirectUri, completionBlock: { (result, error) in if let error = error { print("登录错误:\(error.localizedDescription)") return } // 拿到令牌后处理业务逻辑 guard let accessToken = result?.accessToken else { return } print("获取到令牌:\(accessToken)") })
内容的提问来源于stack exchange,提问作者Sergio Armisén
相关产品推荐
相关产品推荐

