簡體   English   中英

手動實現 Oauth2 授權代碼授予流程

[英]Implementing Oauth2 Authorization Code Grant flow Manually

我計划手動實施 Oauth2 授權代碼授予流程(使用 PKCE)。 我的問題部分與有關。 我正在使用 Java,Springboot。

我想用 Oauth 保護我的后端 API。 這些 api 由本機應用程序調用。 授權代碼授予的大多數 Oauth 實現都需要用戶交互。 我想知道是否有可能避免這種情況。 由於我的應用程序在本機應用程序上運行,我不希望用戶被重定向到瀏覽器進行身份驗證。 我的應用程序具有注冊/登錄功能。

我計划實現一個過濾器,其中的邏輯看起來與此類似

if(uri contains authorize){
    get all details from request
    generate a uuid and store details in db with ttl
    return uuid as code.
}

else if(uri contains token){
    get all details from request
    extract code from request and check for validity in database.
    if(code valid) {
       generate a JWT with access_token with ttl and refresh_token
       return JWT
    }
}

else{
    check if JWT is present and valid
    if valid proceed
}

我還將有一個刷新令牌的邏輯。 我想知道

  1. 這樣做是否有任何安全漏洞
  2. 是否有其他替代方法可以在沒有用戶交互的情況下實現授權代碼授予流程。
  3. 關於 PKCE。 使用 PKCE 通過不創建/存儲客戶端機密來減輕授權代碼被攔截的威脅。 但是是什么阻止用戶使用他/她自己的代碼挑戰向授權端點發送請求? 本機應用程序中的客戶端 ID 有多安全?

首先

不要,我再說一遍,不要嘗試自己實現某種形式的自定義安全性

這是你能做的最糟糕的事情之一。 安全性很復雜,通常需要多個團隊來實施。 這就是我們為它提供標准庫的原因。 使用彈簧安全。

你的問題的答案:

  1. 安全漏洞無處不在。 安全性遠不止您發布的一小段代碼。 oauth2 是一個標准,對於驗證和檢查事物的內容和方式有確切的規則。 所以我的快速回答是肯定的,你沒有遵循標准。 所以是的,它是不安全的。 使用彈簧安全。

  2. 不,當你說用戶交互時,我不知道你在說什么。 您需要遵循定義的流程,如果您選擇自動化流程,則取決於您。 描述你真正想做的事情。

  3. ClientIds 或與此相關的任何內容在任何應用程序中都永遠不會安全。 這一切都取決於您正在尋找的安全級別。 如果我們談論的是企業安全性,您通常將所有機密存儲在后端,並為包含所有客戶端機密的前端應用程序實現某種 BFF,並執行交換。 唯一存儲在客戶端的是不同類型的安全 cookie。

因此,如果您選擇由您的實際本機應用程序進行交換,或者某種代理服務由您決定。 但是,不,任何客戶都沒有安全的秘密。

暫無
暫無

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

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