- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
采用 Spring Security AOuth2 和 JWT 的方式,避免每次请求都需要远程调度Uaa 服务。采用 Spring Security OAuth2 和 JWT 的方式,Uaa 服务只验证一次,返回 JWT。返回的 JWT 包含了用户的所有信息,包括权限信息。
什么是JWT?
JSON Web Token(JWT)是一种开放的标准(RFC 7519),JWT 定义了一种紧凑且自包含的标准,该标准旨在将各个主体的信息包装为 JSON 对象。主体信息是通过数字签名进行加密和验证的。常使用 HMAC 算法或 RSA(公钥/ 私钥的非对称性加密)算法对 JWT 进行签名,安全性很高。
JWT 特点:
紧凑型:数据体积小,可通过 POST 请求参数或 HTTP 请求头发送。
自包含:JWT 包含了主体的所有信息,避免了每个请求都需要向 Uaa 服务验证身份,降低了服务器的负载。
JWT 的结构
JWT 结构:
Header(头)
Payload(有效载荷)
Signature(签名)
因此,JWT 的通常格式是:xxxxx.yyyyy.zzzzz
Header
Header 通常是由两部分组成:令牌的类型(即JWT)和使用的算法类型,如HMAC、SHA256 和 RSA。例如:
{
{
typ: JWT,
alg: HS256
}
将 Header 用 Base64 编码作为 JWT 的第一部分。
Payload
这是 JWT 的第二部分,包含了用户的一些信息和Claim(声明、权利)。有 3
类型的 Claim:保留、公开和私人。
{
{
sub: 123456789,
name: John Doe,
admin: true
}
将 Payload 用 Base64 编码作为 JWT 的第一部分。
Signature
要创建签名部分,需要将 Base64 编码后的 Header、Payload 和秘钥进行签名,一个典型的格式如下:
HMACSHA256
HMACSHA256(
base64UrlEncode(header) + . +
base64UrlEncode(payload),
secret
)
如何使用JWT
认证流程图如下,客户端获取 JWT 后,以后每次请求都不需要再通过 Uaa 服务来判断该请求的用户以及该用户的权限。在微服务中,可以利用 JWT 实现单点登录。
案例工程架构
三个工程:
eureka-server:注册服务中心,端口 8761。这里不再演示搭建。
auth-service:负责授权,授权需要用户提供客户端的 clientId 和 password, 以及授权用户的 username 和password。这些信息准备无误之后,
auth-service 返回 JWT,该 JWT 包含了用户的基本信息和权限点信息,并通过 RSA 加密。
user-service:作为资源服务,它的资源以及被保护起来了,需要相应的权限才能访问。user-service 服务得到用户请求的 JWT 后,先通过公钥解密 JWT, 得到该 JWT 对应的用户的信息和用户的权限信息,再判断该用户是否有权限访问该资源。
工程架构图:
构建 auth-service 工程
新建 Spring Boot 工程,取名为 auth-service,其完整 pom.xml 文件为.
?
?xml version=1.0 encoding=UTF-8?
project xmlns= /POM/4.0.0
xmlns:xsi= /2001/XMLSchema-instance
xsi:schemaLocation= /POM/4.0.0
/xsd/maven-4.0.0.xsd
modelVersion4.0.0/modelVersion
parent
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-parent/artifactId
version1.5.3.RELEASE/version
relativePath/ !-- lookup parent from repository --
/parent
groupIdcom.example/groupId
artifactIdauth-service/artifactId
version0.0.1-SNAPSHOT/version
nameauth-service/name
descriptionDemo project for Spring Boot/description
properties
java.version1.8/java.version
spring-clou
文档评论(0)