尝试使用Auth0

时间:2018-12-14 20:37:13

标签: java authentication jwt auth0 verification

我有一个网站和一个Java服务器进行通信。当网站上的用户使用适当的凭据登录时,服务器将生成JWT并将其发送给客户端。令牌的创建过程如下:

Calendar cal = Calendar.getInstance();

JwtToken token = new JwtToken(JWT.create()
            .withIssuer(user.getEmail())
            .withClaim("username", user.getUsername())
            .withIssuedAt(cal.getTime())
            .withExpiresAt(addHours(2))
            .sign(algorithm));

其中的addHours()方法仅占用当前时间,并向其添加n小时。

,并且sign()中使用的算法是:

Algorithm algorithm = Algorithm.HMAC256(secret);

秘密由以下人员生成:

Random random = new Random();
byte[] randomBytes = new byte[32];
random.nextBytes(randomBytes);
return Base64.getUrlEncoder().encodeToString(randomBytes);

我认为应该创建256个随机位并对其进行base64编码。 (我读过某个地方,秘密应该是256个base64编码的位,我不确定这是否正确,请告诉我)

一切正常,并给了我一个我认为是正确的令牌(https://jwt.io网站说它也是有效的)。令牌的示例:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqdXN0aW4yNTA4OTlAaG90bWFpbC5jb20iLCJleHAiOjE1NDQ4MjUzOTIsImlhdCI6MTU0NDgxODE5MiwidXNlcm5hbWUiOiJKdXN0aW4ifQ.C2Tft5oy8fleYNz4oVCw6S28VGU7YzguA428sZ59QUM

这样令牌就被发送回用户,并以cookie的形式存储。当用户尝试访问需要身份验证的内容时,他们会在“ Authorization”标头中发送带有令牌的请求。

在服务器大小上,我从标头接收到该令牌并尝试对其进行验证。这是我遇到问题的地方。我目前正在执行以下操作:

DecodedJWT decoded = JWT.decode(token);

JWTVerifier = JWT.require(algorithm).withIssuer(decoded.getIssuer()).build();

verifier.verify(token);

这给了我以下例外:

com.auth0.jwt.exceptions.SignatureVerificationException: The Token's Signature resulted invalid when verified using the Algorithm: HmacSHA256

任何帮助将不胜感激

0 个答案:

没有答案