移动端调用自有后端时Azure单应用注册的可行性
Azure AD单应用注册实现移动端-API认证方案
可行性说明
Azure AD支持单应用注册同时作为移动端客户端和自有API的资源载体,这种方案安全且适配你的场景——前后端属于同一整体、无细分角色、无需多权限范围。核心是让移动端获取针对该应用自身的访问令牌,而非Microsoft Graph的令牌,以此实现API的授权验证。
具体配置步骤
1. 注册单个Azure AD应用
- 在Azure AD门户创建应用注册,账户类型根据业务需求选择(如仅组织内部账户或所有Microsoft账户)。
- 进入「身份验证」页面,添加移动端平台(iOS/Android),配置对应重定向URI(例如
msal{你的客户端ID}://auth,格式遵循MSAL库要求)。 - 进入「公开API」页面,点击「添加范围」:
- 范围名称设为自定义值(如
access_as_user),填写描述信息; - 同意类型选择「管理员和用户同意」(后续可配置免用户同意);
- 最终生成的范围标识符为
api://{你的客户端ID}/access_as_user,记下来供移动端使用。
- 范围名称设为自定义值(如
2. 移动端获取访问令牌
使用MSAL移动端库(MSAL for iOS/Android)发起授权码流请求(必须配合PKCE,确保公共客户端安全),请求范围指定为上述生成的api://{你的客户端ID}/access_as_user,而非Graph API的范围。此时获取到的访问令牌受众(aud字段)将是你的应用客户端ID或api://{你的客户端ID},完全匹配自有API的验证需求。
API端令牌验证逻辑
API只需验证以下核心字段即可完成安全授权,和你在Okta的实践逻辑一致:
- 发行方(
iss):验证是否为你的Azure AD租户发行URL(例如https://login.microsoftonline.com/{租户ID}/v2.0); - 受众(
aud):验证是否匹配你的应用客户端ID或api://{你的客户端ID}; - 签名有效性:确认令牌由Azure AD签发,可通过Azure AD公开密钥端点获取公钥验证;
- 过期时间(
exp):确保令牌未过期。
由于无细分角色需求,无需验证权限范围,只要令牌符合上述条件,即可判定用户已通过认证并允许访问API。
关于ID令牌的注意事项
Azure AD文档明确禁止将ID令牌用于API授权,原因是ID令牌的设计目标是供移动端客户端确认用户身份,其受众为客户端ID,无法证明该令牌是专门针对API请求签发的,存在被复用的安全风险。因此必须使用访问令牌作为API的Bearer令牌。
简化用户同意流程
若需跳过用户同意步骤,可由租户管理员预先完成权限同意:
- 进入应用的「API权限」页面,点击「添加权限」>「我的API」,选择自己的应用并添加
access_as_user范围; - 点击「授予管理员同意」,完成后用户登录时将不再弹出同意窗口。
内容的提问来源于stack exchange,提问作者metalheart
相关产品推荐
相关产品推荐

