2016-08-14 35 views
1

如果我使用RESTful後端創建Web應用程序,是否確實需要OAuth 2.0,因爲我不想與社交媒體(Facebook,Google +等)連接?我在想拋棄的OAuth2.0,並執行以下操作:我是否需要使用登錄系統爲Web應用程序實現OAuth服務器實現?

  • 生成JWT成功登錄後
  • 存儲此令牌,在Redis的(或數據庫,還沒有決定)令牌
  • 有一個過濾器,檢查JWT令牌並將令牌與redis/db中的令牌相匹配。
  • 如果令牌存在,允許用戶如果希望訪問該資源
+0

您可以使用像https://auth0.com/這樣的服務,它將作爲您的身份驗證服務器向您返回JWT。智威湯遜的美妙之處在於,您可以直接使用它們並使用'.sub'聲明映射到用戶。然後,您可以選擇進行社交註冊(並且Auth0將爲您處理整體幫助您在幾分鐘內部署)(披露:我爲Auth0工作) – ShrekOverflow

回答

1

可以手動生成JWT令牌,但它會更好,讓一個OAuth 2.0實現處理JWT產生。

您不需要堅持令牌。只需檢查JWT的簽名簽名,就不需要檢查數據庫,因爲JWT的要點是用於無狀態身份驗證。

+0

因此,我仍然應該實現自己的OAuth2服務器,但使用JWT令牌?並且您建議將標記保存在內存中以進行身份​​驗證?如果我沒有以某種方式在服務器上存儲令牌(內存,緩存或db),那麼我怎麼知道哪個用戶擁有哪個令牌?那意味着用戶A可以訪問用戶B的數據? –

+0

@JakeMiller如果你找不到已經實現的OAuth2庫,你可以避免它,只發布你自己的JWT。您可以通過將其用戶名添加到JSON來知道誰擁有發佈的令牌。你會知道用戶沒有說謊,因爲簽名是由你簽署的。 – HelloKitty

0

OAuth 2.0 3 legged flow主要用於解決第三方應用程序無法與第三方應用程序共享資源所有者憑據而獲得資源所有者訪問權。例如,照片打印應用程序想要訪問資源所有者(用戶)代表資源所有者閃爍帳戶而不共享資源所有者閃爍帳戶憑據。

在傳統的客戶端服務器身份驗證中,您可以考慮使用OAuth 2.0 2 legged資源所有者授予,其中OAuth 2.0客戶端應用程序可以請求OAuth 2.0服務器創建OAuth訪問令牌。在這種情況下,您可以將JWT令牌用於OAuth訪問令牌。這個流程幾乎已經提到,但只有標準的OAuth 2.0資源所有者請求和響應。請參閱https://tools.ietf.org/html/rfc6749#section-4.3.2的資源所有者請求和響應詳細信息。如果您使用標準的2段OAuth流程,則客戶端和服務器集成將變得簡單且可以互操作。

如果您不想支持終止(撤銷)令牌操作,那麼您不需要將令牌存儲在數據庫或任何其他地方。在這種情況下,令牌可以自行過期但不能終止。 即使您對終止令牌有要求,也不要存儲整個令牌並只存儲令牌uuid(隨機ID),並將令牌uuid設置爲JWT令牌申明之一。

相關問題