背景
我们在做google登录的时候,第一步先要获取授权码code,在得到code之后会根据code拿到授权的token信息,token信息中包含:access_token,refresh_token,scope,token_type,expires_in和id_token等信息。这里的id_token就是JWT格式的token,那么我们该如何对它进行解析呢?
解决
- 首先我们需要引入依赖包
<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.10.3</version>
</dependency>
2.通过代码解析
DecodedJWT jwt = JWT.decode(idToken);
// 获取个人信息
String email = jwt.getClaim("email").asString();
boolean emailVerified = jwt.getClaim("email_verified").asBoolean();
String name = jwt.getClaim("name").asString();
String picture = jwt.getClaim("picture").asString();
String givenName = jwt.getClaim("given_name").asString();
String familyName = jwt.getClaim("family_name").asString();
// Google ID
String sub = jwt.getClaim("sub").asString();
String locale = jwt.getClaim("locale").asString();
通过上述代码我们就能拿到谷歌登录用户的个人信息。
我们也可以直接获取所有的Claim信息:
// 获取所有声明及其值
Map<String, Claim> claims = jwt.getClaims();// 遍历并输出所有声明及其值
for (Map.Entry<String, Claim> entry : claims.entrySet()) {String claimName = entry.getKey();Claim claimValue = entry.getValue();System.out.println(claimName + ": " + claimValue.asString());
}
另外:
// Google ID,和上边的sub的值是同一个
String subject = jwt.getSubject();
在 Google 的 OAuth 2.0 中,JWT 的 subject (主题)声明通常是用户的唯一标识符,通常是用户的 Google ID。这个标识符在用户的整个生命周期中是不会改变的,即使用户的邮箱地址发生变化,他们的 Google ID 也不会改变。