全栈之路-小程序API-JWT令牌详细剖析与使用 (2)

  首先,需要指定一个密码(secret)。该密码仅仅为保存在服务器中,并且不能向用户公开。然后,使用标头中指定的签名算法(默认情况下为HMAC SHA256)根据以下公式生成签名。

HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

在计算出签名哈希后,JWT头,有效载荷和签名哈希的三个部分组合成一个字符串,每个部分用"."分隔,就构成整个JWT对象。

(4)Base64URL算法

如前所述,JWT头和有效载荷序列化的算法都用到了Base64URL。该算法和常见Base64算法类似,稍有差别。

作为令牌的JWT可以放在URL中(例如api.example/?token=xxx)。 Base64中用的三个字符是"+","http://www.likecs.com/"和"=",由于在URL中有特殊含义,因此Base64URL中对他们做了替换:"="去掉,"+"用"-"替换,"http://www.likecs.com/"用"_"替换,这就是Base64URL算法,很简单把。

三、jwt在小程序API中使用

1、整体流程梳理

(1)我们用code码(用户的account账户)通过调用微信开放的接口,获取到一个唯一的openid

(2)分为两种情况:(首先是通过openid查询user表)

  用户第一次使用(相当于注册):我们将openid写入到user表中

  用户第二次或者多次使用之后(相当于登录):得到userId

(3)userId写入到jwt令牌中

(4)将jwt令牌返回给小程序

2、令牌的生成

注意:生成jwt的时候,可供选择的库有多个,例如:jjwt,auth0 (详情见:https://jwt.io/)

(1)安装auth0的依赖(版本随意,bug自处理)

1 <dependency> 2 <groupId>com.auth0</groupId> 3 <artifactId>java-jwt</artifactId> 4 <version>3.8.3</version> 5 </dependency>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgffwx.html