API 安全机制 | 登录

基于 Token 的身份认证

API 安全机制 | 登录_第1张图片
Token 机制.png

基于 Cookie 和 Session 的身份认证

API 安全机制 | 登录_第2张图片
Cookie & Session.png
缺点
  • 只能针对浏览器,手机 APP,第三方服务调的话,这套机制就没用了;
  • 服务器向浏览器传递 sessionId 的时候,不是绝对安全的,容易被劫持;
  • 如果后端的 Servlet 容器有多台,那么 Session 信息无法在多台 Servlet 容器之间共享;

Session Fixation 攻击

API 安全机制 | 登录_第3张图片
Session Fixation 攻击.png
防 Session Fixation 攻击的代码
/**
 * request.getSession() 的逻辑:
 * 根据浏览器传来的 sessionId 在内存中找对应的 Session;
 * 如果有现成的 Session,就返回;
 * 如果没有现成的 Session,就创建一个新的返回;
 * @param user
 * @param request
 * @throws IOException
 */
@GetMapping("/login")
public void login(@Validated UserInfo user, HttpServletRequest request) throws IOException {
    UserInfo info = userService.login(user);
    // 试图获取老 Session
    HttpSession session = request.getSession(false);
    if(session != null) {
        // 老 Session 作废
        session.invalidate();
    }
    // 获取一个新 Session,什么时候调了 request.getSession(),什么时候 Session 机制才起作用
    request.getSession(true).setAttribute("user", info);
}

服务端返回的 Cookie 相关信息

  • Domain:比如其值是 baidu.com,那么访问 baidu.com 的请求才会带上 Cookie;访问 baidu.com 的二级域名也会带上 Cookie;
  • Path:比如其值是 /,那么请求的 Path 是 / 或 / 的子路径时才会带上 Cookie;
  • Secure:表示请求必须是 HTTPS,才会带上 Cookie;
  • HttpOnly:当前这个请求不能被 javascript 脚本来读,只能被浏览器自身发送;

你可能感兴趣的:(API 安全机制 | 登录)