微服务加密与授权:SpringSecurity

1.导包:spring-boot-starter-security
2.添加配置类
微服务加密与授权:SpringSecurity_第1张图片
注释:
3.添加加密方法如 BCryptPasswordEncoder
4.根据登陆密码进行匹配
由于相同的密码加密后不相同,所以先根据用户名查询出用户信息,然后再跟输入的密码进行匹配,代码如下
微服务加密与授权:SpringSecurity_第2张图片

认证:
常见的认证机制
1.HTTP Basic Auth:每次发送请求时都会带上用户名和密码
2Cookie Auth在服务端创建一个Cookie对象来与服务端的Session对象进行匹配
3O Auth:允许用户让第三方应用访问该用户在某一web服务器上存储私密资源
4Token Auth:先验证用户名和密码,成功后,会生成一个Token,将Token发送给客户端,存在Cookie中,然后每次带着Token来访问,然后服务端去验证,成功,返回客户端想要的数据。

Token Auth好处:
1支持跨域访问
2 无状态,在服务器不需要存储session信息
3 不需要考虑CSRF的防范

基于JWT(Json Web Token)的Token认证机制
jwt有头部,载荷,签名组成
头部:描述jwt最基本信息,比如类型,签名所用算法
载荷(playload):
微服务加密与授权:SpringSecurity_第3张图片
签证:加密后的header和加密后的payload练成的字符串然后再加盐加密

使用步骤:
1.导包 jjwt
2.生成配置类。如下图
微服务加密与授权:SpringSecurity_第4张图片
注:setId():设置的是用户的Id
setSubject():设置的是用户名
setIssuedAt():设置的是用户最近一次登录的时间
signWith(SignatureAlgorithm.HS256,""):设置要加密的密码以及登录方式
setExpiration():设置过期时间,括号内为到期时间
可以存储更多的信息(自定义信息)
.claim(“role”,“admin”)
因为生成令牌的时候看会加入盐,所以每次生成的的都不一样
3.解析,使用异常捕获,超时会报错

使用配置类来实现token的鉴权
方法: 创建一个拦截器(继承HandlerInterceptor),加一个配置类(继承WevMvcConfigurationSupport),只是获得鉴权,不做具体细节控制

单点登录(single sign on)

一个项目中有多个子项目,为了提高用户体验性需要用户只认证一次便可以在多个拥有访问权限的系统中访问

解决办法

:通常将认证系统独立抽取出来,并将用户信息存储在单独的存储介质中

具体实现:

Oauth2认证:
spring security框架继承了Oauth2协议:

客户端的授权模式:
1:授权码模式:

2:简化模式:
3.密码模式:
4.客户端模式:
Oauth2授权码模式:通过请求第三方服务器,获得授权码,然后再根据授权码获取token
Oauth2密码模式:
直接用用户名和密码即可申请令牌

资源服务器授权

一下都是在资源服务器中操作的
1.添加依赖


org.springframework.cloud
spring‐cloud‐starter‐oauth2

2.在config包下创建ResourceServerConfig类
就是添加一些配置类

keytools工具生成公钥和私钥

具体详见:https://blog.csdn.net/w47_csdn/article/details/87564029

你可能感兴趣的:(spring)