Use Guava libraries to compute token value hash

pull/1611/head
Enrico Vianello 2023-07-13 22:47:07 +02:00
parent 2fad5cf2b6
commit 8cbb974e09
3 changed files with 21 additions and 32 deletions

View File

@ -277,17 +277,17 @@ public class OAuth2AccessTokenEntity implements OAuth2AccessToken {
} }
/** /**
* @return the tokenValueHash * @return the tokenValueHash
*/ */
@Basic @Basic
@Column(name="token_value_hash") @Column(name = "token_value_hash")
public String getTokenValueHash() { public String getTokenValueHash() {
return tokenValueHash; return tokenValueHash;
} }
public void setTokenValueHash(String hash) { public void setTokenValueHash(String hash) {
this.tokenValueHash = hash; this.tokenValueHash = hash;
} }
@Override @Override
@Transient @Transient

View File

@ -7,7 +7,7 @@ CREATE TABLE IF NOT EXISTS access_token (
token_value VARCHAR(4096), token_value VARCHAR(4096),
expiration TIMESTAMP NULL, expiration TIMESTAMP NULL,
token_type VARCHAR(256), token_type VARCHAR(256),
token_value_hash CHAR(64) AS (SHA2(token_value, 256)), token_value_hash CHAR(64),
refresh_token_id BIGINT, refresh_token_id BIGINT,
client_id BIGINT, client_id BIGINT,
auth_holder_id BIGINT, auth_holder_id BIGINT,

View File

@ -18,8 +18,6 @@
package org.mitre.oauth2.repository.impl; package org.mitre.oauth2.repository.impl;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.ParseException; import java.text.ParseException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
@ -47,10 +45,10 @@ import org.mitre.uma.model.ResourceSet;
import org.mitre.util.jpa.JpaUtil; import org.mitre.util.jpa.JpaUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.security.crypto.codec.Hex;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.google.common.hash.Hashing;
import com.nimbusds.jwt.JWT; import com.nimbusds.jwt.JWT;
import com.nimbusds.jwt.JWTParser; import com.nimbusds.jwt.JWTParser;
@ -81,27 +79,18 @@ public class JpaOAuth2TokenRepository implements OAuth2TokenRepository {
return new LinkedHashSet<>(query.getResultList()); return new LinkedHashSet<>(query.getResultList());
} }
@Override @Override
public OAuth2AccessTokenEntity getAccessTokenByValue( public OAuth2AccessTokenEntity getAccessTokenByValue(
String accessTokenValue) { String accessTokenValue) {
MessageDigest md; String atHashed = Hashing.sha256()
try { .hashString(accessTokenValue, StandardCharsets.UTF_8)
md = MessageDigest.getInstance("SHA-256"); .toString();
byte[] hash = md TypedQuery<OAuth2AccessTokenEntity> query = manager.createNamedQuery(
.digest(accessTokenValue.getBytes(StandardCharsets.UTF_8)); OAuth2AccessTokenEntity.QUERY_BY_TOKEN_VALUE_HASH,
String atHash = new String(Hex.encode(hash)); OAuth2AccessTokenEntity.class);
TypedQuery<OAuth2AccessTokenEntity> query = query.setParameter(OAuth2AccessTokenEntity.PARAM_TOKEN_VALUE_HASH,
manager.createNamedQuery( atHashed);
OAuth2AccessTokenEntity.QUERY_BY_TOKEN_VALUE_HASH, return JpaUtil.getSingleResult(query.getResultList());
OAuth2AccessTokenEntity.class);
query.setParameter(OAuth2AccessTokenEntity.PARAM_TOKEN_VALUE_HASH,
atHash);
return JpaUtil.getSingleResult(query.getResultList());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
} }
@Override @Override