2017-08-28 279 views
0

我有一個使用OAuth2的Implicit Grant進行身份驗證的Web應用程序。OAuth2:使用PKCE而不是client_secret

我希望能夠使用刷新令牌長時間保持我的會話處於活動狀態。但由於我無法安全地將一個client_secret存儲在一個web應用程序中,因此我無法使用傳統的Authorization Code grant

使用PKCE代替client_secret是否安全?還是我在這樣做時失去了某種程度的安全性?

回答

2

是的。雖然PKCE比不使用它更安全;帶有PKCE的隱式授權仍然使得訪問令牌可能暴露給資源所有者,也可能暴露在同一設備上的其他應用程序。

PKCE主要用於防止攻擊者截獲未受傳輸層安全性(TLS)保護的通信路徑內從授權端點返回的授權碼。

隱流只適用於那些基於瀏覽器或JavaScript 移動設備,或者可以使用一個授權碼格蘭特

+0

爲什麼JavaScript應用程序不能在PKCE中使用授權碼授權? –

+0

你可以。假設您正在使用一個易受授權代碼攔截攻擊的「公共客戶端」。如果您正在使用機密的客戶端和TLS以及正當性,我不確定安全性是否有所提高。 – jwilleke

0

使用隱式授予的其他應用程序,你可以使用既不PKCE,也刷新OAuth客戶端應用程序令牌。如果您想提高安全性,那麼您應該爲您的Web應用程序添加一個後端,該應用程序可以存儲client_secret(或使用另一種客戶端身份驗證方法)。 PKCE將不需要。

+0

但是,如何使用授權碼授權與一個空的祕密? PKCE是否足以取代祕密,因爲這無法安全存儲?添加後端將需要單獨的認證過程和會話來保護它,並且我只想使用OAuth進行認證。 –

+0

PKCE用作擁有認證碼的證據,以防止認證碼攔截攻擊。它不能用於客戶端身份驗證,因爲任何客戶端(甚至是惡意客戶端)都可以使用身份驗證請求發送身份驗證碼質詢。 @JW。 –