我已经在Azure AD B2C中设置了一个用户流。生成的id_token是jwt。但是,如何在需要受此JWT保护的API上验证该JWT的签名?
以下是JWT的示例:
{
"typ": "JWT",
"alg": "RS256",
"kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}
{
"exp": 1587973546,
"nbf": 1587969946,
"ver": "1.0",
"iss": "https://appmanager2020.b2clogin.com/903e0c59-0e1d-4769-8a57-0caba1f56999/v2.0/",
"sub": "f11eaa2e-0bad-400a-864f-57f9daa70999",
"aud": "8ab24fa8-a5f2-4f7d-a1ad-31f21d7f999",
"nonce": "123456",
"iat": 1587969946,
"auth_time": 1587969946,
"idp": "https://sts.windows.net/903e0c59-0e1d-4769-8a57-0caba1f56999/",
"oid": "f11eaa2e-0bad-400a-864f-57f9daa70999",
"emails": [
"some@email.com"
],
"tfp": "B2C_1_some_employee_flow"
}
我尝试使用该URL时没有碰到运气:
答案 0 :(得分:1)
据我所知,无法判断JWT是否合法,但是在解码非法JWT时会抛出异常,因此您可以通过捕获异常来判断它是否合法。
解码JWT:
公共字符串parseToken(String jwt){
return Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(jwt)
.getBody()
.getSubject();
}
验证JWT:
公共布尔isTokenValid(String jwt){
try {
parseToken(jwt);
} catch (Throwable e) {
return false;
}
return true;
}
答案 1 :(得分:0)
我们找到了公共密钥URL,从那里我们可以使用类似于上面的代码使它起作用。