簡體   English   中英

Spring 引導中匿名用戶的 oAuth 令牌

[英]oAuth Token for Anonymous User in Spring boot

團隊

使用 Spring 引導我能夠完成工作流,其中 oAuth 服務器可以為登錄用戶生成令牌。 但是,oAuth 服務器如何為每個匿名用戶生成唯一的令牌?

例如,如果 2 個並發用戶試圖從他們各自的瀏覽器訪問資源服務器,那么我希望資源服務器在他們發出的每個后續請求中識別 2 個不同的用戶。 為此,我想為每個匿名用戶生成不同的令牌。 那有可能嗎?如果可以,那怎么辦?

這是簡單的事情,你讓它變得復雜。

我想為每個匿名用戶生成不同的令牌。 那可能嗎

生成有效令牌后,用戶將成為經過身份驗證的用戶。

您可能會考慮驗證令牌並設置ROLE='ROLE_ANONYMOUS' 正如我所說,這就像把簡單的事情變得復雜。 將經過身份驗證的用戶設置為匿名用戶並不是一個好方法。 您可以創建一個新角色,如ROLE_SEMIANONYMOUS並授予對 ANONYMOUS 用戶開放的權限。

(但這種方法對我來說沒有任何意義,因此解釋實現您識別 AnonymousUser 要求的替代方法)

作為“匿名用戶 = 未經身份驗證的用戶”。

對於匿名用戶,如果您打印主體

String principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

主體 = "anonymousUser"

您可以為匿名用戶創建一個 session 來識別他,如下所示

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Object principal = authentication.getPrincipal();

if(principal instanceof String && ((String)principal).equalsIgnoreCase("anonymousUser"))
{
    if(request.getSession(false) == null)
    {
        HttpSession session = request.getSession();
        session.setMaxInactiveInterval(300); // As per Your requirement
    //  store session id from session and ip address from request in to DB or cache if required and use it
    }
    else
    {
        //identify anonymous user against session id and stored details
    }
}

您可以通過注冊過濾器來實現此目的

  • 在傳統的 spring 過濾器順序應該在 springSecurityFilterChain 之后。
  • 在 spring 引導中,您可以通過FilterRegistrationBean實現它

暫無
暫無

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

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