【问题标题】:Can I use Authorization Code with PKCE Flow for mobile app?我可以将授权码与 PKCE Flow 一起用于移动应用程序吗?
【发布时间】:2021-07-09 11:29:10
【问题描述】:

我知道带有 PKCE Flow 的 OAuth 2.0 授权代码是 OAuth 的最佳实践。我们计划将它用于我们的 WEB 应用程序。 但我不明白如何在不使用浏览器进行身份验证的情况下将此流程用于我的移动应用程序的原生 UX (https://medium.com/klaxit-techblog/openid-connect-for-mobile-apps-fcce3ec3472) 在我们的案例中,使用浏览器是不可接受的。 移动应用程序有一个登录页面,用户可以在其中输入他们的凭据,而不是 3 方授权。

是否可以将授权代码与 PKCE 流一起使用,或者在我的情况下我应该使用 OAuth2 资源所有者密码授予吗? 还有其他选择吗?

【问题讨论】:

    标签: mobile oauth openid-connect


    【解决方案1】:

    这里有两个主要选项:

    1.授权码流 + PKCE

    这通常通过插入 AppAuth 库并使用 Chrome 自定义选项卡或 ASWebAuthenticationSession 窗口来完成,以便用户体验感觉集成。这些是主要优点:

    • 登录往往更加用户友好,密码自动填充和跨多个应用单点登录等功能效果最佳

    • 您可能支持many authentication options 而不仅仅是用户名和密码

    • 它将在第三方安全审查(如果适用)中做得更好,因为它是标准选项 - 例如 Google 将其用于移动 Gmail

    不过,实施它有一个学习曲线。此外,它具有使用授权服务器和外部化登录用户体验的先决条件。在某些公司,这在政治上可能难以管理。

    2。资源所有者密码授予

    这也可以作为一个短期解决方案,但它是deprecated in OAuth 2.1,并且在安全审查中表现不佳。它将您限制为基于密码的登录,并且有时会导致长期访问令牌(如果不支持刷新令牌)。优点是您可以更好地控制品牌和登录屏幕行为。

    接下来的实际步骤

    如果您想查看一些使用 Code Flow + PKCE 的工作应用程序,请随时通过我的Quick Start Page 运行这些应用程序。也许那时您可以根据用户体验以及对利益相关者最重要的因素等因素做出明智的决定。

    【讨论】:

    • 非常感谢您的回答!我们将在我们的团队中讨论它。
    • 根据 OAuth 2.1,“原生应用必须使用外部用户代理来执行 OAuth 授权请求。” “InApp 浏览器”解决方案不再有效。
    • 我真的建议不要使用 RESOURCE OWNER PASSWORD GRANT,它有很多安全漏洞。
    【解决方案2】:

    如果您只是在寻找第一方注册和登录,Ory Kratos 是一种开源解决方案,它不使用 OAuth2.0 进行第一方流程。 所以你可以完全跳过 OAuth2.0 的复杂性! 一个不错的好处是您不需要打开浏览器窗口(因为您总是需要使用 OAuth2.0,所以没有办法绕过它)。 查看本教程了解一些具体的实现细节: https://www.ory.sh/login-react-native-authentication-example-api/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 2019-09-21
      • 1970-01-01
      相关资源
      最近更新 更多