2017-10-08 70 views
0

我正在开发一个使用React Native的应用程序,我无法找到任何教程来验证我的用户对我自己的服务(我认为这被称为第一方应用程序)。用户需要能够使用用户/密码和他们的Facebook帐户进行身份验证。我应该使用哪种OAuth流程用于我的本机应用程序?

我一直在研究它,并找出我应该使用授权代码授予流应该以这种方式工作:

  1. 对数与应用程序的客户端ID链接创建,重定向URL,和状态参数
  2. 用户看到授权提示并批准
  3. 用户被重定向回到应用程序的服务器的AUTH码
  4. 该应用程序交换的AUTH码访问令牌
  5. 请求3210

据我所知,我所有的重定向链接应该从开始myapp:// uri在本地浏览器中打开它。但我真的不需要第二步,或者我呢?为什么我应该向用户询问相同服务的权限?

我还不明白的一件事是交换认证代码的访问令牌,我需要通过我的客户端ID和客户端密钥。但我已经读过,我不必将本机应用程序的客户机密保存在内,因为它可能会受到攻击。

+0

您是否希望用户使用用户名/密码和脸书登录,并且想要创建自己的“OAuth2”流程,其中包含两种类型的登录?或者你在这里只讨论Facebook的登录流程? –

回答

0

你是如何发起你的反应本机应用程序?通过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和秘密以及获取一个好的认证流程看起来像一个整体的想法。然后决定是否将自己的一切重建为自己的服务或是否使用他们的服务。

0

OAuth 2.0不是身份验证协议,而是授权。这就是为什么你在步骤2时遇到问题。This可能有趣。

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

  1. 隐式流程,没有客户端秘密。 (这将是我的第一选择)
  2. 使用授权代码授权流程,不关心秘密。确保你检查你的服务器,如果redirecturl是正确的。
相关问题