React Native请求Azure AD授权令牌时遇[Error: Data intent is null]错误
解决React Native App Auth对接Azure AD时的[Error: Data intent is null]问题
针对你遇到的问题,从代码和配置里能看到几个关键错误,逐一排查修复:
1. 修正Scope拼写错误
你代码里的opened是拼写错误,OIDC认证必须的正确Scope是openid,这个错误会导致认证流程返回异常数据,触发后续的intent解析错误。
2. 移除Client Secret
React Native移动端属于公共客户端,Azure AD不允许公共客户端使用Client Secret(无法安全存储),直接去掉clientSecret配置项,否则会破坏OAuth2流程。
3. 避免手动处理PKCE
react-native-app-auth库已经内置了PKCE流程的自动处理,不需要额外引入react-native-pkce-challenge,手动传入code_challenge会和库的自动逻辑冲突。
4. 统一Issuer和服务端点配置
你同时配置了issuer(指定具体租户)和serviceConfiguration(用common租户),两者不一致会导致端点解析异常。要么统一用具体租户ID,要么统一用common:
- 如果是单租户应用:把serviceConfiguration的端点里的
common替换成你的租户ID - 如果是多租户应用:把issuer改成
https://login.microsoftonline.com/common
5. 确保Android端Intent Filter配置正确
在AndroidManifest.xml里的主Activity中添加对应重定向URI的intent-filter,确保应用能捕获认证后的跳转:
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="com.sham" /> </intent-filter>
修正后的代码示例
import { authorize } from "react-native-app-auth"; // 多租户配置示例,单租户把common换成你的租户ID const config = { clientId: 'MY_CLIENT_ID_AT_AAD', issuer: 'https://login.microsoftonline.com/common', redirectUrl: 'com.sham://com.sham/android/callback', scopes: [ 'openid', 'profile', 'email', ], additionalParameters: {prompt: 'select_account'}, }; try { const result = await authorize(config); console.log('认证成功:', result); } catch (err){ console.log('认证错误:', err) }
按以上步骤修复后,重新运行应用,应该能正常完成OAuth2授权码流程并获取到令牌。
内容的提问来源于stack exchange,提问作者Arsalan Ahmad Ishaq
相关产品推荐
相关产品推荐

