【问题标题】:Which OAuth flow should I use for my native app?我应该为我的本机应用程序使用哪个 OAuth 流程?
【发布时间】:2018-03-19 14:56:09
【问题描述】:

我正在使用 React Native 开发一个应用程序,但我找不到任何教程来根据我自己的服务对我的用户进行身份验证(我认为这称为第一方应用程序)。用户需要能够使用用户/密码以及他们的 Facebook 帐户进行身份验证。

我一直在研究它,发现我应该使用应该以这种方式工作的授权代码授予流程:

  1. 使用应用的客户端 ID、重定向 URL 和状态参数创建登录链接
  2. 用户看到授权提示并批准请求
  3. 用户被重定向回应用程序的服务器并带有授权码
  4. 应用程序将身份验证代码交换为访问令牌

据我了解,我所有的重定向链接都应该以 myapp://uri 在本机浏览器中打开它开始。但我真的不需要第二步,不是吗?为什么要向用户请求相同服务的权限?

我不明白的另一件事是,要交换身份验证码以获取访问令牌,我需要传递我的客户端 ID 和客户端密码。但我了解到我不必将客户端机密存储在本机应用程序中,因为它可能会被泄露。

【问题讨论】:

  • 您是否希望用户同时使用用户 ID/密码和 facebook 登录,并希望创建自己的涵盖这两种登录类型的“OAuth2”流程?还是您在这里只讨论 Facebook 的登录流程?

标签: android authentication react-native oauth


【解决方案1】:

您是如何启动您的 react 原生应用的?通过create-react-native-appExpo XDE 或通过react-native init?如果前两个选项中的任何一个,Facebook Auth 变得非常简单。这是Expo's Facebook Auth Docs 的链接。这是一个复制/粘贴示例,它看起来像......

async function logIn() {
  const { type, token } = await Expo.Facebook.logInWithReadPermissionsAsync('<APP_ID>', {
      permissions: ['public_profile'],
    });
  if (type === 'success') {
    // Get the user's name using Facebook's Graph API
    const response = await fetch(
      `https://graph.facebook.com/me?access_token=${token}`);
    Alert.alert(
      'Logged in!',
      `Hi ${(await response.json()).name}!`,
    );
  }
}

这将(默认情况下)尝试通过“网络”进行身份验证,这意味着它会尝试通过模式 UIWebView 弹出窗口登录。还有其他方法,但它们仅对独立应用程序有效(请参阅行为选项)。

我知道您说您想使用自己的服务进行身份验证,但我认为至少通过Auth0 React Native SDK Tutorial 了解如何保护客户端 ID 和机密以及全面了解良好的身份验证流程是什么样的。然后决定是自己重建所有东西作为自己的服务还是使用他们的服务。

【讨论】:

    【解决方案2】:

    OAuth 2.0 不是身份验证协议,它用于授权。这就是您在第 2 步遇到问题的原因。This 可能会很有趣。

    对于您的流程,我认为您有 2 个选项。

    1. 隐式流,没有客户端密码。 (这将是我的第一选择)
    2. 使用授权码授予流程,不要关心秘密。如果重定向网址正确,请务必检查您的服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-10
      • 2011-04-17
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      相关资源
      最近更新 更多