2017-08-11 101 views
1

我正在嘗試爲基於JavaScript的應用程序實現RFC 6749(OAuth 2.0)中描述的授權碼流程。我知道我應該使用Web服務器後端作爲機密客戶端,以便它可以保護授權服務器返回的訪問令牌和刷新令牌,並且不會將它們傳遞到JavaScript前端。然後,從前端到受保護資源的所有請求都將通過Web服務器後端進行,後端將訪問令牌附加到請求並對其進行代理。如何在網絡應用程序中保護持票人令牌

我的問題是如何讓JavaScript前端以安全的方式使用這些令牌?我假設我必須做一些事情,比如在Web服務器上建立一個會話並傳回一個標識會話的cookie。但是這意味着JavaScript應用程序具有一個cookie,它賦予它們相同的特權,就好像它們只是直接訪問存儲在Web服務器中的承載令牌一樣。如何讓Web服務器持有令牌可提供額外的安全性?

+1

您是否必須使用授權碼流或您是否選擇了它? –

+0

我需要支持刷新標記,規範中的[4.2節](https://tools.ietf.org/html/rfc6749#section-4.2)表明隱式授權類型不支持它們。 –

回答

0

我明白,我應該使用Web服務器後端的機密客戶,以便它可以保護訪問令牌和刷新授權服務器令牌返回,而不是將它們傳遞給JavaScript前端。

不,這是對OAuth2流程和目標的誤解。

這裏是的OAuth2主要目標:您的應用程序(例如可以將JavaScript程序運行在瀏覽器,Web服務器,都等)不得需要知道用戶的證書(最的時間登錄/密碼對)代表用戶訪問服務。

這裏是OAuth2用戶必須使用來實現這一目標方式:根據您的需要,這是一種在瀏覽器中運行一個基於JavaScript的應用程序(即節點

  • .js應用程序),則需要使用OAuth2 隱式流程,而不是授權碼流。但是,當然,因爲您的應用程序正在瀏覽器中運行,它將無法持續憑據訪問服務提供商提供的資源。用戶將不得不向服務提供商驗證應用程序上的每個新會話。

  • 當您的應用程序需要在用戶未登錄時訪問服務提供程序,或者當您的應用程序能夠保留憑據(因爲您的應用程序有自己的憑證系統來標識其用戶)時,您的應用程序不會只依賴瀏覽器中運行的JavaScript程序。它可能僅依靠Web服務器,或者依賴Web服務器和與此服務器通信的JavaScript程序。因此,在這些情況下,您必須使用授權碼流程

所以,作爲一個結論,你已經決定到Web服務器添加到您的應用程序,因爲你以爲你不得不使用授權碼流。但就你而言,你可能不需要使用這個代碼流,因此你應該爲你的應用程序選擇適當的代碼流:隱式代碼流。這樣,您不必添加Web服務器來運行您的應用程序。

如何讓Web服務器持有令牌可提供額外的安全性?

這並不提供額外的安全性。有一個Web服務器來存放令牌只是一種讓用戶代表用戶在後臺訪問服務的方式,當用戶沒有登錄到應用程序時。

+0

但是OP想要使用隱式流不支持的刷新令牌。在這種情況下,我認爲他的應用程序需要自己的Web服務器會話,並由它自己的憑據集保護,因此它可以安全地將令牌存儲在服務器上。這似乎消除了使用OAuth2委派身份驗證過程的好處,因爲您首先需要爲會話單獨進行身份驗證過程。還是我誤會了? –

相關問題