2017-10-06 69 views
0

這個問題是爲了驗證我是否正確理解某些東西。我目前正在設計一個基於Web的應用程序,其中涉及多個頁面(想想,在同一個域下的不同SPA),我想只有一個驗證點。驗證頁面請求沒有cookie

我的問題,那麼,是這樣的:當在一個SPA,可以存儲在本地/會話存儲認證令牌,據我所知認證頁面請求(鏈接到其他網頁的唯一途徑,而不是一個異步請求)是用Cookie來完成的,無論我使用的是哪種身份驗證方法(Basic,OAuth,JWT等)。

我正確嗎?這是唯一可用的方法嗎?

回答

1

這是一個廣泛的問題,但我會說通常答案可能是'不'。你可以做很多事情。

當您提到「一個身份驗證點」時,我會假設您的意思是「單點登錄」。有很多系統可以啓用單點登錄。

在廣泛的層面上,這是怎麼可能的工作:

  1. 用戶進入你的應用程序之一。
  2. 用戶自動重定向到身份驗證頁面(在中央域上)。
  3. 用戶登錄,登錄信息存儲在(例如)LocalStorage中。這允許存儲這些信息。
  4. 單點登錄系統將用戶重定向回原始應用程序,並在url中嵌入單次使用令牌。
  5. 原始應用程序使用令牌來獲取多用途令牌。

這是OAuth2中非常常見的流程。

+0

要看看,如果我理解正確的話,有一個GET(頁面)請求的單一使用的令牌,我承擔在地址欄中是否可見,並由腳本捕獲並用於異步獲取更敏感的憑據? –

+0

@PabloBarríaUrenda是的,這是一種常見的情況。我強烈建議閱讀OAuth2規範,因爲大部分問題已經由花費很長時間思考此事的人解決。此外,您還可以從客戶端和服務器借用大量現有的OAuth2代碼。 – Evert

+0

嗨,非常感謝。由於我誤解了賞金的工作原理,我沒有給你50分,所以我會在幾個小時內給你100分。 –

0

我知道幾個選項:

  • 餅乾(不需要解釋)
  • 基本HTTP認證

    它是安全的使用基本身份驗證與HTTPS結合。 身份驗證頭在請求之間重複,因此憑據只輸入一次。 唯一的問題是醜陋的瀏覽器彈出請求憑據

  • 由JavaScript或通過服務器端的HTML處理

    例如添加令牌/簽名的各個環節使用jQuery,請注意,代碼是簡化

    $(document.body).click('a', e => { 
        var $a = $(e.target).closest('a'); 
        if($a.length) { 
         e.preventDefault(); 
         document.location = $a.attr('href') + '&token=' + secretToken; 
        } 
    }) 
    

請找good article explaining available authentification methods here