成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

網易二面:token是用來鑒權的,那session是用來干什么的?

開發 前端
JWT用于無狀態的用戶認證,提供便捷和擴展性;Session作為輔助,提供額外的安全性和狀態管理。通過這種結合,可以充分利用兩者的優點,確保系統既具備高擴展性,又能提供細致的安全控制。

使用JWT進行用戶認證和授權,而Session在一定程度上起到了輔助作用。讓我們詳細討論JWT和Session在這種結合模式中的各自作用以及為什么需要Session。

JWT的作用

  • 用戶認證: JWT包含了用戶的身份信息和權限信息,客戶端每次請求時將JWT發送給服務器,服務器通過驗證JWT來確認用戶身份。
  • 無狀態性: JWT不需要在服務器端存儲用戶會話信息,因此服務器可以是無狀態的,便于擴展和負載均衡。

Session的作用

  • 附加的安全層: 即使JWT是無狀態的,但在某些應用場景中,僅依賴JWT可能存在一些安全問題,例如Token的泄露或濫用。Session可以作為一個額外的安全層,確保Token即使有效,也必須在服務器的Session管理器中存在對應的會話。
  • 管理Token的生命周期: 通過Session,可以更方便地管理Token的生命周期,例如強制用戶重新登錄、手動注銷Token等操作。
  • 控制“記住我”功能: 如果用戶選擇了“記住我”選項,Session可以記錄這個狀態,并在JWT過期后,通過Session來決定是否允許繼續使用舊的Token。

為什么需要創建Session

盡管JWT可以在無狀態環境中使用,但Session的引入帶來了以下好處:

  • 防止Token濫用: 通過在服務器端驗證Session,可以確保即使Token有效,也必須是經過服務器端認證的,從而防止Token被惡意使用。
  • 支持用戶主動注銷: 當用戶選擇注銷時,可以直接刪除服務器端的Session記錄,確保Token即使沒有過期,也無法再被使用。
  • 提供更精細的控制: 通過Session,可以實現更精細的權限控制和用戶狀態管理,例如強制下線、會話過期時間控制等。
  • 狀態追蹤: 在某些場景下,追蹤用戶狀態是必要的,例如監控用戶的活躍度、登錄歷史等,這些信息可以通過Session進行管理。

結合JWT和Session的優勢

結合使用JWT和Session,可以同時利用兩者的優點,實現安全性和擴展性的平衡:

  • 無狀態認證: JWT可以實現無狀態認證,便于系統的水平擴展和負載均衡。
  • 狀態管理和安全性: Session可以提供額外的狀態管理和安全性,確保Token的使用更加安全可靠。

代碼示例

以下是一個簡化的代碼示例,展示了如何在用戶登錄時創建JWT和Session:

public LoginResponse login(String username, String password) throws AuthException {
    // 驗證用戶名和密碼
    User user = userService.authenticate(username, password);
    if (user == null) {
        thrownew AuthException("Invalid username or password");
    }
    
    // 生成JWT Token
    String token = createJwt(user.getId(), user.getRoles());
    
    // 創建會話
    sessionManagerApi.createSession(token, user);
    
    // 返回Token
    returnnew LoginResponse(token);
}

public void createSession(String token, User user) {
    LoginUser loginUser = new LoginUser();
    loginUser.setToken(token);
    loginUser.setUserId(user.getId());
    loginUser.setRoles(user.getRoles());
    
    sessionManagerApi.saveSession(token, loginUser);
}

在請求驗證時,首先驗證JWT的有效性,然后檢查Session中是否存在對應的會話:

@Override
public DefaultJwtPayload validateToken(String token) throws AuthException {
    try {
        // 1. 先校驗jwt token本身是否有問題
        JwtContext.me().validateTokenWithException(token);

        // 2. 獲取jwt的payload
        DefaultJwtPayload defaultPayload = JwtContext.me().getDefaultPayload(token);

        // 3. 如果是7天免登陸,則不校驗session過期
        if (defaultPayload.getRememberMe()) {
            return defaultPayload;
        }

        // 4. 判斷session里是否有這個token
        LoginUser session = sessionManagerApi.getSession(token);
        if (session == null) {
            thrownew AuthException(AUTH_EXPIRED_ERROR);
        }

        return defaultPayload;
    } catch (JwtException jwtException) {
        if (JwtExceptionEnum.JWT_EXPIRED_ERROR.getErrorCode().equals(jwtException.getErrorCode())) {
            thrownew AuthException(AUTH_EXPIRED_ERROR);
        } else {
            thrownew AuthException(TOKEN_PARSE_ERROR);
        }
    } catch (io.jsonwebtoken.JwtException jwtSelfException) {
        thrownew AuthException(TOKEN_PARSE_ERROR);
    }
}

總結

在這個場景中,JWT用于無狀態的用戶認證,提供便捷和擴展性;Session作為輔助,提供額外的安全性和狀態管理。通過這種結合,可以充分利用兩者的優點,確保系統既具備高擴展性,又能提供細致的安全控制。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2023-09-21 15:54:55

數據中心

2020-11-04 16:00:22

文件系統

2022-05-19 20:04:03

5GIoT領域6G

2022-03-30 08:08:30

數字孿生制造業

2024-01-16 23:30:46

?fractionsPython分數

2018-07-18 08:48:11

2021-01-09 23:06:51

大數據消費技術

2018-03-06 16:36:43

2018-07-18 15:05:01

2021-03-04 10:20:41

運維工程師互聯網

2022-02-09 10:56:09

ReactJS組件前端

2024-10-10 12:21:56

JWTSession擴展性

2020-04-22 13:29:35

基帶射頻信號

2019-09-06 09:05:25

TCP協議通信

2021-03-03 13:25:35

CookieSessionToken

2021-04-25 09:58:48

mmapJava面試

2021-03-17 15:54:32

IO零拷貝方式

2023-09-03 17:08:32

2018-05-14 14:07:57

2020-09-07 19:45:37

Linux顯示服務器黑話解釋
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久久久久一区二区 | 一区二区三区国产视频 | 精品国产亚洲一区二区三区大结局 | 国产精品一区二区三区四区五区 | 国产激情毛片 | 黄色日批视频 | av毛片在线播放 | 女人一区| 在线免费观看黄色 | 男人久久天堂 | 一级片免费视频 | 免费性视频 | 黄色小视频大全 | 青春草在线| 北条麻妃99精品青青久久主播 | 亚洲一区日韩 | 精品久久香蕉国产线看观看亚洲 | 在线婷婷| 久在线视频| 黄色片亚洲 | 国产亚洲一区二区三区 | 日韩午夜在线观看 | 日韩精品专区在线影院重磅 | 九九久久久 | 欧美日韩精品影院 | 欧美视频成人 | 91精品在线播放 | 国产毛片毛片 | 亚洲视频 欧美视频 | 在线免费观看成年人视频 | 亚洲男人的天堂网站 | 国产 欧美 日韩 一区 | 日韩一级免费看 | 在线不卡视频 | 中文字幕 亚洲一区 | 欧美日韩成人一区二区 | 久久午夜精品 | 中文字幕一区二区三区在线观看 | 国产成人精品一区二区 | 国产免费一二三区 | 亚洲欧美中文日韩在线v日本 |