一步一步学习Shiro--(一)认证,授权,加密

安全体系

网页,终端等软件给普罗大众带来更丰富,更便捷的世界。同时也带来越来越大的信息,数据泄露的隐患,作为软件工程师,架构师,必须要对安全体系有所了解。
而安全涉及到三个方面:认证,授权,加密

认证--Authentication

一句户来讲,认证是验证你是谁。比如你能通过ssh访问linux服务器,POP3客户端来进行邮件收发。这些都需要认证,你是谁?

授权--Authorization

一句户来讲,授权就是验证你有权限做哪些事情。比如,你能通过ssh客户端登录linux服务器,但你没有权限操作其他账户的文件。授权一般在认证成果之后执行。

用图片来理解的话,就如下图所示

加密--Encryption

将敏感数据进行加密,没有秘钥无法提取到信息。
一般情况下SSH,SSL,TLS协议,在协议层进行默认的数据加密,防止中间人攻击。
在业务逻辑中,将身份证号,信用卡号,家庭住址,手机号等再次进行加密,保证用户个人隐私。

4种认证(authentication)或授权(authorization)方式

一、Basic Authentication

  1. 客户端发送http request 给服务器,服务器验证该用户是否已经登录验证过了,如果没有的话,
    服务器会返回一个401 Unauthozied给客户端,并且在Response 的 header “WWW-Authenticate” 中添加信息。
  2. 浏览器在接受到401 Unauthozied后,会弹出登录验证的对话框。用户输入用户名和密码后,
    浏览器用BASE64编码后,放在Authorization header中发送给服务器
  3. 服务器将Authorization header中的用户名密码取出,进行验证, 如果验证通过,将根据请求,发送资源给客户端
    详细解释可以看HTTP基本认证(Basic Authentication)

二、Oauth

Oauth协议分为两个版本,当前一般使用的是Oauth2,如下协议流程图
OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息
OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0

OAuth2.0协议定义

  1. 抽象协议流程定义

  2. Access Token刷新流程

  3. 授权码申请流程

  4. 隐式授权申请流程

  5. 资源所有者密码授权流程

  6. 客户端凭证流程

三、JWT

Json Web Token(JWT)是目前比较流程的跨域认证方案,其主要原理是将用户信息和一些特殊标签加密写入到Token中,由页面保存。每次访问的时候带上该Token,后端业务按照特定的秘钥进行签名验证,获取相应关键信息。从而达到用户认证的目的。

  1. 客户端上报用户信息(密码,验证码等)
  2. 服务端进行验证,并生成用户信息JSON对象
  3. 对该JSON进行加密,回传给客户端,完成认证
  4. 客户端后续访问时,上报该加密信息(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,讲的很详细了。

posted @ 2020-01-13 16:53  骑驴上钟楼  阅读(432)  评论(0)    收藏  举报