2017-01-02 77 views
2
賬號

當授權用戶對第一方的移動應用程序的API,我發送以下請求:創建的client_id和註冊使用OAuth

localhost:5000/oauth/token?client_id=9qFbZD4udTgFVYo0u5U9kZX2iuzbdcJDRAquTfRk&grant_type=password&username=MyUsername&password=MyPassword

這樣做的問題是,我需要已經有創建的帳戶以及可用的client_id。

我的問題是,當用戶下載我的應用程序時,我應該如何向我的API發送一個請求來創建客戶端記錄(這需要用戶創建,因爲我有一個將客戶端鏈接到用戶ID的外鍵)和用戶記錄在我的數據庫,因爲沒有授權令牌?謝謝。

回答

0

當任何客戶端安裝應用程序,你可以先讓客戶寄存器到應用程序中。當客戶端註冊時,它會碰到必須創建客戶端詳細信息到系統中的API之一。客戶端註冊後,您可以允許他登錄並繼續進行令牌認證。

用戶可以註冊到你的應用或使用第三方登錄Facebook或谷歌用於註冊到系統提供的應用程序信任這些身份提供者。

+0

所以基本上我應該有我的API暴露在外的OAuth在我的數據庫中創建一個客戶記錄,然後從中獲取狙擊前那裏,允許用戶訪問註冊? –

+0

最後只是爲了保護一些您不希望未經授權的用戶訪問的信息。因此,只要您使用oauth保護您的重要信息,API將受到令牌的保護。但就註冊而言,您可以讓用戶提供註冊憑證,否則無法知道誰是有效用戶。我們不會手動添加用戶,因爲它會限制系統可以獲得的用戶數量。 –

+0

對,我看到了,是否有人會出現安全問題,有人反向工程我的私人API,並填充我的數據庫與大量的垃圾郵件用戶? –

2

好了,你在這裏使用password交付式,這意味着用戶瞭解和信任您的OAuth服務器,並通過用戶名/密碼給它。其他的事情是,client_id不是唯一的每個用戶,它的和應用程序的用戶將使用的id,所以是的 - 它通常在集成客戶端應用程序和授權服務器期間得到一次。

我相信你應該看看authorization_code交付式。

+0

授權碼授權類型唯一的問題是我必須重定向到不同的頁面來確認請求,這很奇怪,因爲這是我自己的API。實施密碼授權不是更好嗎?我知道client_id對於每個移動應用程序實例都是唯一的,但是我不知道如何確保創建帳戶或在沒有access_token時登錄,因爲我需要電子郵件和密碼憑據來執行此操作。 –

+0

您可以使用密碼授權但你不會忽略創建一個帳戶:)因爲你寫的每個請求只是創建一個新的帳戶可能是危險的。但是你可以重定向到你自己的「授權」頁面+在那裏註冊用戶+在電子郵件等上確認。也許你應該把你的用例的更多細節,所以它會更容易幫助。 – freakman

0

從閱讀了對答案和評論,如果您也實現了這一個自定義的後端,豈不是更好,如果你只是發送嗎?

localhost:5000/oauth/token?client_id=9qFbZD4udTgFVYo0u5U9kZX2iuzbdcJDRAquTfRk 

從這裏開始,在您的後端,只需要一個存儲此令牌的用戶表並檢查是否存在匹配的令牌。如果沒有,則創建一個新的用戶對象並讓用戶填寫相應的響應(電子郵件,密碼等)以完成註冊。

要解決spambot問題,要麼有機器人驗證程序,某些失敗的嘗試會將用戶踢出並刪除temp用戶obj,或讓後端向收到的電子郵件地址發送驗證電子郵件,以確保電子郵件已驗證。

如果你想做/原因需要在您的網址在你的問題使用的client_id +用戶+密碼一樣,可以做多檢查,其中

  1. CLIENT_ID是新的或已存在
  2. 用戶名存在

從那裏還是將它們發送到註冊頁面並填寫新的用戶,如果它是採取或預先填寫用戶名和密碼,他們指定

爲了增加安全性,我建議你爭我奪用戶的密碼,您作出這樣的請求,或者它可以通過分組窺探者