今天就跟大家聊聊有关使用JWT怎么对API授权访问,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<强>什么是JWT 强>
智威汤逊(JSON Web标记)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,可以在各个系统之间用JSON作为对象安全地传输信息,并且可以保证所传输的信息不会被篡改。
<强>“JWT”由三部分构成强>
- <李>
信息头:指定了使用的签名算法
李> <李>声明部分:其中也可以包含超时时间
李> <李>基于指定的算法生成的签名
李>通过这三部分信息,API服务端可以根据“JWT”信息头和声明部分的信息重新生成签名。之所以可以这样做,是因为生成签名需要的秘钥存放在服务器端。
jwtauth.New (“HS256",,[]字节(“K8UeMDPyb9AwFkzS"), nil)
如果这个签名秘钥比较简单,建议立刻换一个复杂一些的,更改以后会使所有已经产生的“JWT”失效、强制客户端重新从服务器获取授权。
<强> JWT通常有两种应用场景:强>
- <李>
授权。这是最常见的JWT使用场景。一旦用户登录,每个后续请求将包含一个JWT,作为该用户访问资源的令牌。
李> <李>信息交换。可以利用JWT在各个系统之间安全地传输信息,JWT的特性使得接收方可以验证收到的内容是否被篡改。
李>本文讨论第一点,如何利用JWT来实现对API的授权访问。这样就只有经过授权的用户才可以调用API。
<强> JWT的结构强>
{ ,“alg":,“HS256" ,“typ":“JWT" }
Base64加密后,就变成了:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
引用>
<强>有效载荷强>
第二部分为负载,里面可以放置自定义的信息,以及过期时间,发行人等。
{ ,“sub":“1234567890”, ,“name":“John Doe" ,“iat": 1516239022 }Base64加密后,就变成了:
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
引用>
<强>签名强>
第三部分为签名,计算此签名需要四部分信息:
<李>
标题里的算法信息
李> <李>头
李> <李>李>有效载荷<李>
一个自定义的秘钥
李>接受到JWT后,利用相同的信息再计算一次签的名,然年与智威汤逊中的签名对比,如果不相同则说明智威汤逊中的内容被篡改。
<强>解码后的JWT 强>
<李>
应用程序或客户端向授权服务器请求授权。这里的授权服务器可以是单独的一个应用,也可以和API集成在同一个应用里。
李> <李>授权服务器向应用程序返回一个JWT。
李> <李>应用程序将JWT放入到请求里(通常放在HTTP头的授权里)
李> <李>服务端接收到请求后,验证JWT并执行对应逻辑。
李><强>在JAVA里使用JWT 强>
引入依赖
& lt; dependency> ,& lt; groupId> io.jsonwebtoken ,& lt; artifactId> jjwt & lt;/dependency>这里使用了一个叫JJWT (Java JWT)的库。
<强> JWT服务
强>生成JWT
public String generateToken (String 载荷),{ return 才能;Jwts.builder () ,,,.setSubject(载荷) ,,,.setExpiration (new 日期(System.currentTimeMillis (), +, 10000)) ,,,.signWith (SignatureAlgorithm.HS256, SECRET_KEY) ,,,.compact (); 以前,}使用JWT怎么对API授权访问