API 安全机制 | 登录
2020-07-13 本文已影响0人
乌鲁木齐001号程序员
基于 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 脚本来读,只能被浏览器自身发送;