API 安全机制 | 登录

基于 Token 的身份认证

Token 机制.png

基于 Cookie 和 Session 的身份认证

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

Session Fixation 攻击

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 脚本来读,只能被浏览器自身发送;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值