【问题标题】:How to specify the Redirect URI for React Native Bare workflow如何为 React Native Bare 工作流指定重定向 URI
【发布时间】:2021-03-13 22:02:50
【问题描述】:

我刚刚开始使用 Bare 工作流程(不使用 Expo 框架)构建 React Native 移动应用程序。 我已经成功地在我的应用程序上集成了登录和注销系统与 react-native-auth0 依赖项。但是,我正在努力使用 API 授权来获取经过身份验证的用户的令牌,以便控制对每个端点的访问。

我正在使用基于 Auth0 文档的 PKCE 来跟踪授权代码流程。除了前面标题中提到的重定向 uri 之外,我几乎所有东西都可以正常工作。

我尝试使用 expo-auth-session 依赖项手动指定 uri,如下所示。

const redirectUri = AuthSession.makeRedirectUri({
    native: `${REDIRECT_URI}`,
    useProxy,
});

const params = {
    audience: `${AUTH0_API_AUDIENCE}`,
    scope: ['openid', 'profile', 'email', 'offline_access'],
    response_type: 'code',
    client_id: `${AUTH0_CLIENT_ID}`,
    redirect_uri: redirectUri,
    code_challenge: `${code_challenge}`,
    code_challenge_method: 'S256',
    state: `${state}`
};

但是,它返回错误消息说

错误:找不到默认返回 URL。如果您使用的是裸工作流,请提供options.returnUrl。 getDefaultReturnUrl@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:179940:24 startAsync$@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:177411:84

我已使用npx uri-scheme list 检查了我的 uri。 目前,我有一个${applicationId}://。 这是否等同于redirect_uri,不是吗?

我也检查了Auth0.Android。 不过,这一定和Android Native App开发有关?! 无论如何,任何人以前使用过相同的架构?在哪里可以为使用 React Native 构建的 Android 应用程序指定重定向 URI? 我认为 Bare 工作流程不支持 AuthSession API。即使文档强调,它也阐明了裸工作流的演练,我试了一下。但是,它不起作用并引发了错误。

我相信这应该以本地方式完成?!?爪哇??我正在努力寻找解决方案,甚至不知道在哪里看。我将衷心感谢您的帮助! :-)

【问题讨论】:

    标签: android react-native auth0


    【解决方案1】:

    免责声明:我真的不熟悉 React Native(实际上也不熟悉移动设备),但我确实知道一些关于 OAuth 和 OIDC 的事情,并且我过去使用过 Auth0,所以这里有一些想法,希望对您有所帮助。

    我已经用 npx uri-scheme 列表检查了我的 uri。目前,我有一个 ${applicationId}://。这是否等同于redirect_uri,不是吗?

    根据 Auth0 文档,回调 URL(即到本地设备的重定向 URL)应类似于 {YOUR_APP_PACKAGE_NAME}://${YOUR_AUTH0_APP_NAME}.auth0.com/android/{YOUR_APP_PACKAGE_NAME}/callback 所以我的理解是${applicationId}://不等同于重定向URL,而只是它的前缀。

    您是否尝试过使用${applicationId}://{YOUR_AUTH0_APP_NAME}.auth0.com/android/${applicationId}/callback (将 ${YOUR_AUTH0_APP_NAME} 替换为您的 Auth0 项目名称的实际值)?

    【讨论】:

    • 嗨塞巴斯蒂安!谢谢你的回答。我花更多的时间来调查这个问题,我可能不得不放弃 Auth0,这似乎与 Expo 一起不是一个很好的选择。我找不到两个技术堆栈的许多用例和许多不确定的方面。此外,由于我缺乏认证和原生开发方面的知识,在裸模式下根本找不到returnUrl(即使我在运行一个简单的代理服务器后成功获取代码)。所以我又回到了托管模式。哈哈,但是,正如我提到的,我认为它们是不兼容的,因为 expo 不太支持 Auth0
    • 我不熟悉 Expo 对此发表评论,但简而言之,要使其在移动设备上运行,您需要您的应用程序能够“读取”重定向的 URL,例如当{applicationId}://anything 之类的 URL 被打开时,它应该由您的应用程序打开。此 redirectURL 是身份提供者(例如 Auth0)返回身份验证代码的位置。然后客户端(您的应用程序)可以查询 Auth0(使用 PKCE 代码)以最终获得身份验证令牌。对于 OpenID Connect(使用 Auth0 或其他提供程序),此流程将始终相同
    • 这就是易受攻击的“公共”端(用户身份验证 + 网页)从不携带完整身份或访问令牌的方式,只有一个身份验证码,可以在安全通道上使用,以最终获得令牌您的代码将能够代表最终用户进行调用(或收集有关它们的身份信息)Tl:DR:必须始终提供redirectURL,并且必须是“允许”中允许的URL之一Auth0 应用程序的回调 URL 设置。 (此允许列表必须包含 确切 URL:无通配符,完整路径)
    • 是的,从代理服务器获取授权码是成功的。但是,在简单的工作流程中,我无法理解 returnUrl。我怀疑这可能与 Android 中的 DeepLinking 或其他有关。由于我没有太多的原生移动开发经验,在网上找不到太多有用的信息,我不得不放弃裸露的工作流程。现在我回到了托管工作流程。如果是网页,我可以轻松获取 URL 参数。
    • 但是,当我在移动端工作时,不确定性太多,我自己几乎得出结论,仅靠 RN 不足以构建原生应用程序。我从这次经历中学到了很多关于身份验证和授权的知识。哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多