为什么在token在http请求头中的Authorization要加Bearer前缀?
token认证方式一般是放在http的请求头中Authorization字段,那么有两种形式:
Authorization : Bearer eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJCRkwiLCJhdWQiOiJDaGluYU1vYmlsZSIsImV4cCI6MTY5NTM0MTUwNiwibmJmIjoxNjk1Mjk4MzA2fQ.PxgojHlpUEaNJMy8I5DXkTSOrhn3oawzWIs0YL7yNP4
Authorization : eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJCRkwiLCJhdWQiOiJDaGluYU1vYmlsZSIsImV4cCI6MTY5NTM0MTUwNiwibmJmIjoxNjk1Mjk4MzA2fQ.PxgojHlpUEaNJMy8I5DXkTSOrhn3oawzWIs0YL7yNP4
两种方式有什么区别呢?为什么外面使用的时候都会加前缀Bearer?
两种方式使用上没有太大区别,只是:
The Authorization:
可以认为Bearer是一种schema。
后端服务filter中获取token进行验证可以兼容两种方式:
private String getToken(String authorizationString) {
if (authorizationString.startsWith("Bearer ")) {
return requestString.substring(7);
}
return authorizationString;
}
另外,使用token认证有一个隐患:
http协议是明文传输的,token完全暴露在网络环境中,其他人获得token就能冒充身份,所以使用时必须注意网络环境,或者请使用https/TLS。
认证方式:
cookie和session配合方式,客户端使用浏览器的cookie来存sessionId,服务端存session。由于结构可以泛化成两种:
(1)单服务器的服务端,这种多在小型服务中,私有化部署,toB项目的服务中
(2)分布式架构下的服务端,这种多是toC,大型服务,复杂系统,这种方式需要共享session,多个服务器都能访问,这样对于共享session的方式,可以是同步session,也可以是单独的服务做认证,类似redis集群存放认证信息,这种类似与网关的服务。就是说
token的方式,这种完全不需要认证服务器,token自带认证功能。
JWT token的介绍