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

Expo-Auth-Session安卓端登录后无法重定向回应用,iOS正常求助

Expo Azure登录安卓端重定向异常修复

问题根因

安卓端通过Chrome完成Azure登录后无法正常重定向回Expo应用,本质是安卓端深链接/重定向URI配置不匹配,以及Expo在安卓、iOS端处理外部浏览器跳转的逻辑差异导致的。

具体修复步骤

  1. 修正重定向URI的平台配置

    • 确保EXPO_PUBLIC_REDIRECT_URI为exp://开头的Expo深链接(如exp://127.0.0.1:19000)或自定义Scheme(裸机应用);
    • 登录Azure Portal,找到对应应用注册,将该URI添加到移动和桌面应用平台下的重定向URI列表,不要放到Web平台分类中。
  2. 调整AuthRequest配置

    • 明确指定平台参数,确保安卓端的认证流程适配外部浏览器跳转,同时强制启用PKCE(Expo推荐的安全认证方式):
      import { Platform } from 'react-native';
      
      // Endpoint
      const discovery = useAutoDiscovery(`https://login.microsoftonline.com/${tenantID}/v2.0`);
      
      // Request
      const [request, response, promptAsync] = useAuthRequest(
        {
          clientId: process.env.EXPO_PUBLIC_CLIENT_ID,
          scopes: ["openid", "profile", "email", "offline_access", "User.Read.All"],
          redirectUri: process.env.EXPO_PUBLIC_REDIRECT_URI,
          platform: Platform.OS === 'android' ? 'android' : undefined,
          usePKCE: true,
        },
        discovery
      );
      
  3. 配置Expo深链接支持

    • 若使用自定义Scheme,在app.json中添加Scheme配置:
      {
        "expo": {
          "scheme": "yourappcustomscheme"
        }
      }
      
    • 确保Azure Portal中注册的重定向URI与该Scheme完全匹配(如yourappcustomscheme://auth)。
  4. 增强错误捕获与调试

    • 在登录逻辑中添加更详细的日志输出,排查重定向后的参数异常:
      const handleLogin = async () => {
        try {
          const codeResponse = await promptAsync();
          console.log('Auth Callback Response:', codeResponse);
      
          if (request && codeResponse?.type === "success" && discovery) {
            const res = await exchangeCodeAsync(
              {
                clientId: process.env.EXPO_PUBLIC_CLIENT_ID,
                code: codeResponse.params.code,
                extraParams: request.codeVerifier
                  ? { code_verifier: request.codeVerifier }
                  : undefined,
                redirectUri: process.env.EXPO_PUBLIC_REDIRECT_URI,
              },
              discovery
            );
      
            setToken(res.accessToken);
            await gettingAllDatas();
          } else if (codeResponse?.type === 'error') {
            console.error('Auth Flow Error:', codeResponse.error, codeResponse.errorDescription);
          }
        } catch (error) {
          console.error("Login Error Full Details:", JSON.stringify(error, null, 2));
        }
      };
      
  5. 测试验证

    • 安卓端测试时使用Chrome浏览器,确保Expo Go或打包后的应用能被重定向URI正常唤起;
    • 检查Azure的应用注册中是否开启了“允许公共客户端流”(在“认证”>“高级设置”中)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:55:38