一步一步学习Shiro--(一)认证,授权,加密
安全体系
网页,终端等软件给普罗大众带来更丰富,更便捷的世界。同时也带来越来越大的信息,数据泄露的隐患,作为软件工程师,架构师,必须要对安全体系有所了解。
而安全涉及到三个方面:认证,授权,加密
认证--Authentication
一句户来讲,认证是验证你是谁。比如你能通过ssh访问linux服务器,POP3客户端来进行邮件收发。这些都需要认证,你是谁?
授权--Authorization
一句户来讲,授权就是验证你有权限做哪些事情。比如,你能通过ssh客户端登录linux服务器,但你没有权限操作其他账户的文件。授权一般在认证成果之后执行。
用图片来理解的话,就如下图所示

加密--Encryption
将敏感数据进行加密,没有秘钥无法提取到信息。
一般情况下SSH,SSL,TLS协议,在协议层进行默认的数据加密,防止中间人攻击。
在业务逻辑中,将身份证号,信用卡号,家庭住址,手机号等再次进行加密,保证用户个人隐私。
4种认证(authentication)或授权(authorization)方式
一、Basic Authentication
- 客户端发送http request 给服务器,服务器验证该用户是否已经登录验证过了,如果没有的话,
服务器会返回一个401 Unauthozied给客户端,并且在Response 的 header “WWW-Authenticate” 中添加信息。 - 浏览器在接受到401 Unauthozied后,会弹出登录验证的对话框。用户输入用户名和密码后,
浏览器用BASE64编码后,放在Authorization header中发送给服务器 - 服务器将Authorization header中的用户名密码取出,进行验证, 如果验证通过,将根据请求,发送资源给客户端
详细解释可以看HTTP基本认证(Basic Authentication)
二、Oauth
Oauth协议分为两个版本,当前一般使用的是Oauth2,如下协议流程图
OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息
OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0
-
抽象协议流程定义
![]()
-
Access Token刷新流程
![]()
-
授权码申请流程
![]()
-
隐式授权申请流程
![]()
-
资源所有者密码授权流程
![]()
-
客户端凭证流程
![]()
三、JWT
Json Web Token(JWT)是目前比较流程的跨域认证方案,其主要原理是将用户信息和一些特殊标签加密写入到Token中,由页面保存。每次访问的时候带上该Token,后端业务按照特定的秘钥进行签名验证,获取相应关键信息。从而达到用户认证的目的。
- 客户端上报用户信息(密码,验证码等)
- 服务端进行验证,并生成用户信息JSON对象
- 对该JSON进行加密,回传给客户端,完成认证
- 客户端后续访问时,上报该加密信息(Token),服务端进行签名验证。
Token内容分三部分,Header,Payload,Sign。三部分以英文.分隔。官网介绍
xxxxx.yyyyy.zzzzz
Header,为json字符串经过Base64后得到的字符串。其中描述加密算法(alg),和令牌属性(typ)JWT统一为JWT
{
"alg": "HS256",
"typ": "JWT"
}
PayLoad为业务数据,本区域也是经由Base64后得到的,另协议本身未规定本区域是否加密,如有敏感信息,还需要另行加密
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Sign为Header和Payload的签名,防止篡改,加密方式如下
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
四、OpenId
OpenId当前使用的较少,如果要了解,可以直接看这篇文章--OpenId,讲的很详细了。







浙公网安备 33010602011771号