2017-10-08 107 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是正確的。
相關問題