rspec/rules/S5659/java/rule.adoc

57 lines
1.7 KiB
Plaintext
Raw Normal View History

include::../description.adoc[]
2021-01-23 04:07:47 +00:00
== Noncompliant Code Example
2021-01-23 04:07:47 +00:00
Using https://github.com/jwtk/jjwt[jwtk/Java JWT] library (to verify a signed token (containing a JWS) don't use the ``++parse++`` method as it doesn't throw an exception if an unsigned token is provided):
2021-01-23 04:07:47 +00:00
----
// Signing:
2021-01-23 04:07:47 +00:00
io.jsonwebtoken.Jwts.builder() // Noncompliant, token is not signed.
.setSubject(USER_LOGIN)
.compact();
// Verifying:
io.jsonwebtoken.Jwts.parser().setSigningKey(SECRET_KEY).parse(token).getBody(); // Noncompliant
2021-01-23 04:07:47 +00:00
----
Using https://github.com/auth0/java-jwt[auth0/Java JWT] library:
----
// Signing:
2021-01-23 04:07:47 +00:00
com.auth0.jwt.JWT.create()
.withSubject(SUBJECT)
.sign(Algorithm.none()); // Noncompliant, use only strong cipher algorithms when signing this JWT.
// Verifying:
JWTVerifier nonCompliantVerifier = com.auth0.jwt.JWT.require(Algorithm.none()) // Noncompliant
.withSubject(LOGIN)
.build();
----
== Compliant Solution
Using https://github.com/jwtk/jjwt[Java JWT] library (to verify a signed token (containing a JWS) use the ``++parseClaimsJws++`` method that will throw an exception if an unsigned token is provided):
2021-01-23 04:07:47 +00:00
----
// Signing:
2021-01-23 04:07:47 +00:00
Jwts.builder() // Compliant
.setSubject(USER_LOGIN)
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
// Verifying:
Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody(); // Compliant
----
Using https://github.com/auth0/java-jwt[auth0/Java JWT] library. I
2021-01-23 04:07:47 +00:00
----
// Signing:
2021-01-23 04:07:47 +00:00
JWT.create()
.withSubject(SUBJECT)
.sign(Algorithm.HMAC256(SECRET_KEY)); // Noncompliant, use only strong cipher algorithms when signing this JWT.
// Verifying:
JWTVerifier nonCompliantVerifier = JWT.require(Algorithm.HMAC256(SECRET_KEY)) // Noncompliant
.withSubject(LOGIN)
.build();
----
include::../see.adoc[]