簡體   English   中英

Angular 2 + Rails + Auth0

[英]Angular 2 + Rails + Auth0

我試圖弄清楚如何在Angular / Rails應用程序中使用Auth0。

我已經使用僅Angular的應用程序設置了Auth0,並且工作正常。 我可以看到RailsAuth0文檔,據我所知。

我不了解如何將前端身份驗證與Rails連接起來,因為在任何地方都找不到有關此文檔的文檔。

好的,我知道了。 如果我使用Auth0在Angular端進行身份驗證,然后向我的Rails服務器發出HTTP請求,則該HTTP請求將具有一個Authorization標頭,其值如下所示:

承載eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JlbmZyYW5rbGlubGFicy5hdXRoMC5jb20vIiwic3ViIjoiYXV0aDB8NTgzMDZmOTFjMDg4MTRlMDEwMTVmNDM0IiwiYXVkIjoiajNKdHpjYnNpTUkyR0JkRnZGb3FFTjM4cUtTVmI2Q0UiLCJleHAiOjE0Nzk4OTc3OTYsImlhdCI6MTQ3OTg2MTc5Nn0.2cGLY_e7jY0WL-ue4NeT39W4pdxJVSeOT5ZGd_xNmJk

“ Bearer”之后的部分(以“ eyJ0”開頭)是JSON Web令牌 從今以后,我將把JSON Web令牌簡稱為“令牌”。

當Rails收到HTTP請求時,它可以獲取並解碼令牌。 就我而言,我正在使用Knock

Knock希望我的User模型定義from_token_payload方法。 這是我的樣子:

class User < ApplicationRecord
  def self.from_token_payload(payload)
    User.find_by(auth0_id_string: payload['sub'])
  end
end

我的user表具有auth0_id_string列。 如果我手動創建一個auth0_id_string與我在解碼的Auth0令牌中的sub下找到的用戶匹配的用戶,則我的from_token_payload方法將找到該用戶,並且Knock會為我對該令牌表示贊許。 如果找不到用戶,請豎起大拇指。

因此大致如下:

  1. Angular要求Auth0認證用戶
  2. Auth0發回JSON Web令牌
  3. Angular將JSON Web令牌發送到Rails
  4. Rails對該令牌進行解碼
  5. Rails試圖找到與該令牌中的數據匹配的用戶
  6. Rails發送200或401,具體取決於是否找到了匹配的用戶

有一些遺漏的地方,但這就是要點。 我可能最終會寫一篇有關Angular + Rails + Auth0身份驗證的教程,因為據我所知,目前還不存在。

根據您提供的信息,我假設您想要一個具有在Angular中實現的前端並使用基於Rails的API來為Angular前端提供所需服務的應用程序。

在這種情況下,您可以從Auth0端將此模型建模為單個(客戶端)應用程序,並執行以下操作之一:

  1. 將身份驗證產生的ID令牌用於兩個目的:
    • 向Angular應用程序提供有關當前經過身份驗證的用戶的信息,以便它可以滿足任何適用的用戶界面要求
    • 作為一種對Angular應用程序對Rails API進行的調用進行身份驗證的方法,也就是說,Rails API使用基於令牌的身份驗證系統,該系統接受Auth0發出的ID令牌。
  2. 在Rails API上公開一個終結點,Angular可以使用該終結點來交換用戶身份驗證時通過任何其他憑據獲得的ID令牌,這些憑據隨后可以用於訪問該API。

第一個選項最容易實現,但是您必須在每個請求中都包含ID令牌。 第二個方面增加了您的復雜性,但可能會給您帶來更大的靈活性。

如果這不能解決您的所有問題,能否請您提供有關您要完成的確切方案的更多詳細信息,以更新問題。


最后要注意的是,如果您打算提供一個API,以后可以供不同范圍的應用程序使用,則最安全的方法是使用基於令牌的系統,其中令牌將由授權服務器發行符合OAuth2。

擁有自己的OAuth2授權服務器很難維護,因此Auth0正在啟用它作為一項附加服務,該服務已經可以在預覽模式下用於美國地區的帳戶。 基本上,這將允許作為身份驗證過程的一部分,獲取客戶端應用程序用來了解當前已驗證用戶的ID令牌以及允許對指定API進行調用的訪問令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM