diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/AuthenticationHolderEntity.java b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/AuthenticationHolderEntity.java index 696759afa..0e37db09f 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/AuthenticationHolderEntity.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/AuthenticationHolderEntity.java @@ -17,6 +17,9 @@ *******************************************************************************/ package cz.muni.ics.oauth2.model; +import static cz.muni.ics.oauth2.model.AuthenticationHolderEntity.QUERY_ALL; +import static cz.muni.ics.oauth2.model.AuthenticationHolderEntity.QUERY_GET_UNUSED; + import cz.muni.ics.oauth2.model.convert.SerializableStringConverter; import cz.muni.ics.oauth2.model.convert.SimpleGrantedAuthorityStringConverter; import java.io.Serializable; @@ -25,7 +28,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.CollectionTable; import javax.persistence.Column; @@ -43,48 +45,98 @@ import javax.persistence.NamedQuery; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Transient; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.eclipse.persistence.annotations.CascadeOnDelete; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.security.oauth2.provider.OAuth2Request; +@Getter +@Setter +@ToString +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +// DB ANNOTATIONS @Entity @Table(name = "authentication_holder") @NamedQueries ({ - @NamedQuery(name = AuthenticationHolderEntity.QUERY_ALL, query = "select a from AuthenticationHolderEntity a"), - @NamedQuery(name = AuthenticationHolderEntity.QUERY_GET_UNUSED, query = "select a from AuthenticationHolderEntity a where " + - "a.id not in (select t.authenticationHolder.id from OAuth2AccessTokenEntity t) and " + - "a.id not in (select r.authenticationHolder.id from OAuth2RefreshTokenEntity r) and " + - "a.id not in (select c.authenticationHolder.id from AuthorizationCodeEntity c)") + @NamedQuery(name = QUERY_ALL, + query = "SELECT a FROM AuthenticationHolderEntity a"), + @NamedQuery(name = QUERY_GET_UNUSED, + query = "SELECT a FROM AuthenticationHolderEntity a " + + "WHERE a.id NOT IN (SELECT t.authenticationHolder.id FROM OAuth2AccessTokenEntity t) " + + "AND a.id NOT IN (SELECT r.authenticationHolder.id FROM OAuth2RefreshTokenEntity r) " + + "AND a.id NOT IN (SELECT c.authenticationHolder.id FROM AuthorizationCodeEntity c)") }) public class AuthenticationHolderEntity { public static final String QUERY_GET_UNUSED = "AuthenticationHolderEntity.getUnusedAuthenticationHolders"; public static final String QUERY_ALL = "AuthenticationHolderEntity.getAll"; - private Long id; - private SavedUserAuthentication userAuth; - private Collection<GrantedAuthority> authorities; - private Set<String> resourceIds; - private boolean approved; - private String redirectUri; - private Set<String> responseTypes; - private Map<String, Serializable> extensions; - private String clientId; - private Set<String> scope; - private Map<String, String> requestParameters; - - public AuthenticationHolderEntity() { } - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - public Long getId() { - return id; - } + private Long id; - public void setId(Long id) { - this.id = id; - } + @OneToOne(cascade=CascadeType.ALL) + @JoinColumn(name = "user_auth_id") + @CascadeOnDelete + private SavedUserAuthentication userAuth; + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "authentication_holder_authority", joinColumns = @JoinColumn(name = "owner_id")) + @Convert(converter = SimpleGrantedAuthorityStringConverter.class) + @Column(name = "authority") + @CascadeOnDelete + private Collection<GrantedAuthority> authorities; + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "authentication_holder_resource_id", joinColumns = @JoinColumn(name = "owner_id")) + @Column(name = "resource_id") + @CascadeOnDelete + private Set<String> resourceIds; + + @Column(name = "approved") + private boolean approved; + + @Column(name = "redirect_uri") + private String redirectUri; + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "authentication_holder_response_type", joinColumns = @JoinColumn(name = "owner_id")) + @Column(name = "response_type") + @CascadeOnDelete + private Set<String> responseTypes; + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "authentication_holder_extension", joinColumns = @JoinColumn(name = "owner_id")) + @Column(name = "val") + @MapKeyColumn(name = "extension") + @Convert(converter = SerializableStringConverter.class) + @CascadeOnDelete + private Map<String, Serializable> extensions; + + @Column(name = "client_id") + private String clientId; + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "authentication_holder_scope", joinColumns = @JoinColumn(name = "owner_id")) + @Column(name = "scope") + @CascadeOnDelete + private Set<String> scope; + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "authentication_holder_request_parameter", joinColumns = @JoinColumn(name = "owner_id")) + @Column(name = "val") + @MapKeyColumn(name = "param") + @CascadeOnDelete + private Map<String, String> requestParameters; @Transient public OAuth2Authentication getAuthentication() { @@ -92,21 +144,17 @@ public class AuthenticationHolderEntity { return new OAuth2Authentication(createOAuth2Request(), getUserAuth()); } - private OAuth2Request createOAuth2Request() { - return new OAuth2Request(requestParameters, clientId, authorities, approved, scope, resourceIds, redirectUri, responseTypes, extensions); - } - public void setAuthentication(OAuth2Authentication authentication) { // pull apart the request and save its bits OAuth2Request o2Request = authentication.getOAuth2Request(); - setAuthorities(o2Request.getAuthorities() == null ? null : new HashSet<>(o2Request.getAuthorities())); + setAuthorities(convertToSetOrNull((Set<GrantedAuthority>) o2Request.getAuthorities())); setClientId(o2Request.getClientId()); - setExtensions(o2Request.getExtensions() == null ? null : new HashMap<>(o2Request.getExtensions())); + setExtensions(convertToMapOrNull(o2Request.getExtensions())); setRedirectUri(o2Request.getRedirectUri()); - setRequestParameters(o2Request.getRequestParameters() == null ? null : new HashMap<>(o2Request.getRequestParameters())); - setResourceIds(o2Request.getResourceIds() == null ? null : new HashSet<>(o2Request.getResourceIds())); - setResponseTypes(o2Request.getResponseTypes() == null ? null : new HashSet<>(o2Request.getResponseTypes())); - setScope(o2Request.getScope() == null ? null : new HashSet<>(o2Request.getScope())); + setRequestParameters(convertToMapOrNull(o2Request.getRequestParameters())); + setResourceIds(convertToSetOrNull(o2Request.getResourceIds())); + setResponseTypes(convertToSetOrNull(o2Request.getResponseTypes())); + setScope(convertToSetOrNull(o2Request.getScope())); setApproved(o2Request.isApproved()); if (authentication.getUserAuthentication() != null) { @@ -116,114 +164,16 @@ public class AuthenticationHolderEntity { } } - @OneToOne(cascade=CascadeType.ALL) - @JoinColumn(name = "user_auth_id") - public SavedUserAuthentication getUserAuth() { - return userAuth; + private <T> Set<T> convertToSetOrNull(Collection<T> obj) { + return obj == null ? null: new HashSet<>(obj); } - public void setUserAuth(SavedUserAuthentication userAuth) { - this.userAuth = userAuth; + private <T, S> Map<T, S> convertToMapOrNull(Map<T, S> obj) { + return obj == null ? null : new HashMap<>(obj); } - @ElementCollection(fetch = FetchType.EAGER) - @CollectionTable(name="authentication_holder_authority", joinColumns=@JoinColumn(name="owner_id")) - @Convert(converter = SimpleGrantedAuthorityStringConverter.class) - @Column(name="authority") - public Collection<GrantedAuthority> getAuthorities() { - return authorities; - } - - public void setAuthorities(Collection<GrantedAuthority> authorities) { - this.authorities = authorities; - } - - @ElementCollection(fetch = FetchType.EAGER) - @CollectionTable(name="authentication_holder_resource_id", joinColumns=@JoinColumn(name="owner_id")) - @Column(name="resource_id") - public Set<String> getResourceIds() { - return resourceIds; - } - - public void setResourceIds(Set<String> resourceIds) { - this.resourceIds = resourceIds; - } - - @Basic - @Column(name="approved") - public boolean isApproved() { - return approved; - } - - public void setApproved(boolean approved) { - this.approved = approved; - } - - @Basic - @Column(name="redirect_uri") - public String getRedirectUri() { - return redirectUri; - } - - public void setRedirectUri(String redirectUri) { - this.redirectUri = redirectUri; - } - - @ElementCollection(fetch = FetchType.EAGER) - @CollectionTable(name="authentication_holder_response_type", joinColumns=@JoinColumn(name="owner_id")) - @Column(name="response_type") - public Set<String> getResponseTypes() { - return responseTypes; - } - - public void setResponseTypes(Set<String> responseTypes) { - this.responseTypes = responseTypes; - } - - @ElementCollection(fetch = FetchType.EAGER) - @CollectionTable(name="authentication_holder_extension", joinColumns=@JoinColumn(name="owner_id")) - @Column(name="val") - @MapKeyColumn(name="extension") - @Convert(converter= SerializableStringConverter.class) - public Map<String, Serializable> getExtensions() { - return extensions; - } - - public void setExtensions(Map<String, Serializable> extensions) { - this.extensions = extensions; - } - - @Basic - @Column(name="client_id") - public String getClientId() { - return clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - @ElementCollection(fetch = FetchType.EAGER) - @CollectionTable(name="authentication_holder_scope", joinColumns=@JoinColumn(name="owner_id")) - @Column(name="scope") - public Set<String> getScope() { - return scope; - } - - public void setScope(Set<String> scope) { - this.scope = scope; - } - - @ElementCollection(fetch = FetchType.EAGER) - @CollectionTable(name="authentication_holder_request_parameter", joinColumns=@JoinColumn(name="owner_id")) - @Column(name="val") - @MapKeyColumn(name="param") - public Map<String, String> getRequestParameters() { - return requestParameters; - } - - public void setRequestParameters(Map<String, String> requestParameters) { - this.requestParameters = requestParameters; + private OAuth2Request createOAuth2Request() { + return new OAuth2Request(requestParameters, clientId, authorities, approved, scope, resourceIds, redirectUri, responseTypes, extensions); } } diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/AuthorizationCodeEntity.java b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/AuthorizationCodeEntity.java index 41881a852..aa0db789c 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/AuthorizationCodeEntity.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/AuthorizationCodeEntity.java @@ -18,7 +18,6 @@ package cz.muni.ics.oauth2.model; import java.util.Date; -import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -30,17 +29,36 @@ import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.eclipse.persistence.annotations.CascadeOnDelete; /** * Entity class for authorization codes * * @author aanganes */ +@Getter +@Setter +@ToString +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +// DB ANNOTATIONS @Entity @Table(name = "authorization_code") @NamedQueries({ - @NamedQuery(name = AuthorizationCodeEntity.QUERY_BY_VALUE, query = "select a from AuthorizationCodeEntity a where a.code = :code"), - @NamedQuery(name = AuthorizationCodeEntity.QUERY_EXPIRATION_BY_DATE, query = "select a from AuthorizationCodeEntity a where a.expiration <= :" + AuthorizationCodeEntity.PARAM_DATE) + @NamedQuery(name = AuthorizationCodeEntity.QUERY_BY_VALUE, + query = "SELECT a FROM AuthorizationCodeEntity a " + + "WHERE a.code = :code"), + @NamedQuery(name = AuthorizationCodeEntity.QUERY_EXPIRATION_BY_DATE, + query = "SELECT a FROM AuthorizationCodeEntity a " + + "WHERE a.expiration <= :" + AuthorizationCodeEntity.PARAM_DATE) }) public class AuthorizationCodeEntity { @@ -49,58 +67,29 @@ public class AuthorizationCodeEntity { public static final String PARAM_DATE = "date"; - private Long id; - private String code; - private AuthenticationHolderEntity authenticationHolder; - private Date expiration; - - public AuthorizationCodeEntity() { } - - public AuthorizationCodeEntity(String code, AuthenticationHolderEntity authenticationHolder, Date expiration) { - this.code = code; - this.authenticationHolder = authenticationHolder; - this.expiration = expiration; - } - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - public Long getId() { - return id; - } + private Long id; - public void setId(Long id) { - this.id = id; - } - - @Basic @Column(name = "code") - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } + private String code; @ManyToOne @JoinColumn(name = "auth_holder_id") - public AuthenticationHolderEntity getAuthenticationHolder() { - return authenticationHolder; - } + @CascadeOnDelete + private AuthenticationHolderEntity authenticationHolder; - public void setAuthenticationHolder(AuthenticationHolderEntity authenticationHolder) { - this.authenticationHolder = authenticationHolder; - } - - @Basic - @Temporal(javax.persistence.TemporalType.TIMESTAMP) + @Temporal(TemporalType.TIMESTAMP) @Column(name = "expiration") - public Date getExpiration() { - return expiration; - } + private Date expiration; - public void setExpiration(Date expiration) { + public AuthorizationCodeEntity(String code, + AuthenticationHolderEntity authenticationHolder, + Date expiration) + { + this.code = code; + this.authenticationHolder = authenticationHolder; this.expiration = expiration; } diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/DeviceCode.java b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/DeviceCode.java index d563e52cb..b01d4c502 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/DeviceCode.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/DeviceCode.java @@ -16,10 +16,16 @@ package cz.muni.ics.oauth2.model; +import static cz.muni.ics.oauth2.model.DeviceCode.PARAM_DATE; +import static cz.muni.ics.oauth2.model.DeviceCode.PARAM_DEVICE_CODE; +import static cz.muni.ics.oauth2.model.DeviceCode.PARAM_USER_CODE; +import static cz.muni.ics.oauth2.model.DeviceCode.QUERY_BY_DEVICE_CODE; +import static cz.muni.ics.oauth2.model.DeviceCode.QUERY_BY_USER_CODE; +import static cz.muni.ics.oauth2.model.DeviceCode.QUERY_EXPIRED_BY_DATE; + import java.util.Date; import java.util.Map; import java.util.Set; -import javax.persistence.Basic; import javax.persistence.CollectionTable; import javax.persistence.Column; import javax.persistence.ElementCollection; @@ -35,16 +41,37 @@ import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.eclipse.persistence.annotations.CascadeOnDelete; /** * @author jricher */ +@Getter +@Setter +@ToString +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +// DB ANNOTATIONS @Entity @Table(name = "device_code") @NamedQueries({ - @NamedQuery(name = DeviceCode.QUERY_BY_USER_CODE, query = "select d from DeviceCode d where d.userCode = :" + DeviceCode.PARAM_USER_CODE), - @NamedQuery(name = DeviceCode.QUERY_BY_DEVICE_CODE, query = "select d from DeviceCode d where d.deviceCode = :" + DeviceCode.PARAM_DEVICE_CODE), - @NamedQuery(name = DeviceCode.QUERY_EXPIRED_BY_DATE, query = "select d from DeviceCode d where d.expiration <= :" + DeviceCode.PARAM_DATE) + @NamedQuery(name = QUERY_BY_USER_CODE, + query = "SELECT d FROM DeviceCode d " + + "WHERE d.userCode = :" + PARAM_USER_CODE), + @NamedQuery(name = QUERY_BY_DEVICE_CODE, + query = "SELECT d FROM DeviceCode d " + + "WHERE d.deviceCode = :" + PARAM_DEVICE_CODE), + @NamedQuery(name = QUERY_EXPIRED_BY_DATE, + query = "SELECT d FROM DeviceCode d " + + "WHERE d.expiration <= :" + PARAM_DATE) }) public class DeviceCode { @@ -56,119 +83,55 @@ public class DeviceCode { public static final String PARAM_DEVICE_CODE = "deviceCode"; public static final String PARAM_DATE = "date"; - private Long id; - private String deviceCode; - private String userCode; - private Set<String> scope; - private Date expiration; - private String clientId; - private Map<String, String> requestParameters; - private boolean approved; - private AuthenticationHolderEntity authenticationHolder; - - public DeviceCode() { } - - public DeviceCode(String deviceCode, String userCode, Set<String> scope, String clientId, Map<String, String> params) { - this.deviceCode = deviceCode; - this.userCode = userCode; - this.scope = scope; - this.clientId = clientId; - this.requestParameters = params; - } - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - public Long getId() { - return id; - } + private Long id; - public void setId(Long id) { - this.id = id; - } - - @Basic @Column(name = "device_code") - public String getDeviceCode() { - return deviceCode; - } + private String deviceCode; - public void setDeviceCode(String deviceCode) { - this.deviceCode = deviceCode; - } - - @Basic @Column(name = "user_code") - public String getUserCode() { - return userCode; - } - - public void setUserCode(String userCode) { - this.userCode = userCode; - } + private String userCode; @ElementCollection(fetch = FetchType.EAGER) - @CollectionTable(name="device_code_scope", joinColumns=@JoinColumn(name="owner_id")) - @Column(name="scope") - public Set<String> getScope() { - return scope; - } + @CollectionTable(name = "device_code_scope", joinColumns = @JoinColumn(name = "owner_id")) + @Column(name = "scope") + @CascadeOnDelete + private Set<String> scope; - public void setScope(Set<String> scope) { - this.scope = scope; - } - - @Basic - @Temporal(javax.persistence.TemporalType.TIMESTAMP) + @Temporal(TemporalType.TIMESTAMP) @Column(name = "expiration") - public Date getExpiration() { - return expiration; - } + private Date expiration; - public void setExpiration(Date expiration) { - this.expiration = expiration; - } - - @Basic @Column(name = "client_id") - public String getClientId() { - return clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } + private String clientId; @ElementCollection(fetch = FetchType.EAGER) - @CollectionTable(name="device_code_request_parameter", joinColumns=@JoinColumn(name="owner_id")) - @Column(name="val") - @MapKeyColumn(name="param") - public Map<String, String> getRequestParameters() { - return requestParameters; - } + @CollectionTable(name = "device_code_request_parameter", joinColumns = @JoinColumn(name = "owner_id")) + @Column(name = "val") + @MapKeyColumn(name = "param") + @CascadeOnDelete + private Map<String, String> requestParameters; - public void setRequestParameters(Map<String, String> params) { - this.requestParameters = params; - } - - @Basic @Column(name = "approved") - public boolean isApproved() { - return approved; - } - - public void setApproved(boolean approved) { - this.approved = approved; - } + private boolean approved; @ManyToOne @JoinColumn(name = "auth_holder_id") - public AuthenticationHolderEntity getAuthenticationHolder() { - return authenticationHolder; - } + private AuthenticationHolderEntity authenticationHolder; - public void setAuthenticationHolder(AuthenticationHolderEntity authenticationHolder) { - this.authenticationHolder = authenticationHolder; + public DeviceCode(String deviceCode, + String userCode, + Set<String> scope, + String clientId, + Map<String, String> params) + { + this.deviceCode = deviceCode; + this.userCode = userCode; + this.scope = scope; + this.clientId = clientId; + this.requestParameters = params; } } diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/OAuth2AccessTokenEntity.java b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/OAuth2AccessTokenEntity.java index b11561828..1ceefc1be 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/OAuth2AccessTokenEntity.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/OAuth2AccessTokenEntity.java @@ -20,6 +20,10 @@ */ package cz.muni.ics.oauth2.model; +import static cz.muni.ics.oauth2.model.OAuth2AccessTokenEntity.*; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.nimbusds.jwt.JWT; import cz.muni.ics.oauth2.model.convert.JWTStringConverter; import cz.muni.ics.openid.connect.model.ApprovedSite; @@ -47,7 +51,15 @@ import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; +import javax.persistence.TemporalType; import javax.persistence.Transient; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.eclipse.persistence.annotations.CascadeOnDelete; import org.springframework.security.oauth2.common.OAuth2AccessToken; import org.springframework.security.oauth2.common.OAuth2AccessTokenJackson2Deserializer; import org.springframework.security.oauth2.common.OAuth2AccessTokenJackson2Serializer; @@ -57,20 +69,42 @@ import org.springframework.security.oauth2.common.OAuth2RefreshToken; * @author jricher * */ +@Getter +@Setter +@ToString +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +// DB ANNOTATIONS @Entity @Table(name = "access_token") @NamedQueries({ - @NamedQuery(name = OAuth2AccessTokenEntity.QUERY_ALL, query = "select a from OAuth2AccessTokenEntity a"), - @NamedQuery(name = OAuth2AccessTokenEntity.QUERY_EXPIRED_BY_DATE, query = "select a from OAuth2AccessTokenEntity a where a.expiration <= :" + OAuth2AccessTokenEntity.PARAM_DATE), - @NamedQuery(name = OAuth2AccessTokenEntity.QUERY_BY_REFRESH_TOKEN, query = "select a from OAuth2AccessTokenEntity a where a.refreshToken = :" + OAuth2AccessTokenEntity.PARAM_REFERSH_TOKEN), - @NamedQuery(name = OAuth2AccessTokenEntity.QUERY_BY_CLIENT, query = "select a from OAuth2AccessTokenEntity a where a.client = :" + OAuth2AccessTokenEntity.PARAM_CLIENT), - @NamedQuery(name = OAuth2AccessTokenEntity.QUERY_BY_TOKEN_VALUE, query = "select a from OAuth2AccessTokenEntity a where a.jwt = :" + OAuth2AccessTokenEntity.PARAM_TOKEN_VALUE), - @NamedQuery(name = OAuth2AccessTokenEntity.QUERY_BY_APPROVED_SITE, query = "select a from OAuth2AccessTokenEntity a where a.approvedSite = :" + OAuth2AccessTokenEntity.PARAM_APPROVED_SITE), - @NamedQuery(name = OAuth2AccessTokenEntity.QUERY_BY_RESOURCE_SET, query = "select a from OAuth2AccessTokenEntity a join a.permissions p where p.resourceSet.id = :" + OAuth2AccessTokenEntity.PARAM_RESOURCE_SET_ID), - @NamedQuery(name = OAuth2AccessTokenEntity.QUERY_BY_NAME, query = "select r from OAuth2AccessTokenEntity r where r.authenticationHolder.userAuth.name = :" + OAuth2AccessTokenEntity.PARAM_NAME) + @NamedQuery(name = QUERY_ALL, + query = "SELECT a FROM OAuth2AccessTokenEntity a"), + @NamedQuery(name = QUERY_EXPIRED_BY_DATE, + query = "SELECT a FROM OAuth2AccessTokenEntity a " + + "WHERE a.expiration <= :" + PARAM_DATE), + @NamedQuery(name = QUERY_BY_REFRESH_TOKEN, + query = "SELECT a FROM OAuth2AccessTokenEntity a " + + "WHERE a.refreshToken = :" + PARAM_REFRESH_TOKEN), + @NamedQuery(name = QUERY_BY_CLIENT, + query = "SELECT a FROM OAuth2AccessTokenEntity a " + + "WHERE a.client = :" + PARAM_CLIENT), + @NamedQuery(name = QUERY_BY_TOKEN_VALUE, + query = "SELECT a FROM OAuth2AccessTokenEntity a " + + "WHERE a.jwtValue = :" + PARAM_TOKEN_VALUE), + @NamedQuery(name = QUERY_BY_APPROVED_SITE, + query = "SELECT a FROM OAuth2AccessTokenEntity a " + + "WHERE a.approvedSite = :" + PARAM_APPROVED_SITE), + @NamedQuery(name = QUERY_BY_RESOURCE_SET, + query = "SELECT a FROM OAuth2AccessTokenEntity a JOIN a.permissions p " + + "WHERE p.resourceSet.id = :" + PARAM_RESOURCE_SET_ID), + @NamedQuery(name = QUERY_BY_NAME, + query = "SELECT r FROM OAuth2AccessTokenEntity r " + + "WHERE r.authenticationHolder.userAuth.name = :" + PARAM_NAME) }) -@com.fasterxml.jackson.databind.annotation.JsonSerialize(using = OAuth2AccessTokenJackson2Serializer.class) -@com.fasterxml.jackson.databind.annotation.JsonDeserialize(using = OAuth2AccessTokenJackson2Deserializer.class) +@JsonSerialize(using = OAuth2AccessTokenJackson2Serializer.class) +@JsonDeserialize(using = OAuth2AccessTokenJackson2Deserializer.class) public class OAuth2AccessTokenEntity implements OAuth2AccessToken { public static final String QUERY_BY_APPROVED_SITE = "OAuth2AccessTokenEntity.getByApprovedSite"; @@ -84,7 +118,7 @@ public class OAuth2AccessTokenEntity implements OAuth2AccessToken { public static final String PARAM_TOKEN_VALUE = "tokenValue"; public static final String PARAM_CLIENT = "client"; - public static final String PARAM_REFERSH_TOKEN = "refreshToken"; + public static final String PARAM_REFRESH_TOKEN = "refreshToken"; public static final String PARAM_DATE = "date"; public static final String PARAM_RESOURCE_SET_ID = "rsid"; public static final String PARAM_APPROVED_SITE = "approvedSite"; @@ -92,30 +126,52 @@ public class OAuth2AccessTokenEntity implements OAuth2AccessToken { public static final String ID_TOKEN_FIELD_NAME = "id_token"; - private Long id; - private ClientDetailsEntity client; - private AuthenticationHolderEntity authenticationHolder; - private JWT jwtValue; - private Date expiration; - private String tokenType = OAuth2AccessToken.BEARER_TYPE; - private OAuth2RefreshTokenEntity refreshToken; - private Set<String> scope; - private Set<Permission> permissions; - private ApprovedSite approvedSite; - private Map<String, Object> additionalInformation = new HashMap<>(); - - public OAuth2AccessTokenEntity() { } - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - public Long getId() { - return id; - } + private Long id; - public void setId(Long id) { - this.id = id; - } + @ManyToOne + @JoinColumn(name = "client_id") + private ClientDetailsEntity client; + + @ManyToOne + @JoinColumn(name = "auth_holder_id") + @CascadeOnDelete + private AuthenticationHolderEntity authenticationHolder; + + @Column(name = "token_value") + @Convert(converter = JWTStringConverter.class) + private JWT jwtValue; + + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "expiration") + private Date expiration; + + @Column(name = "token_type") + private String tokenType = OAuth2AccessToken.BEARER_TYPE; + + @ManyToOne + @JoinColumn(name = "refresh_token_id") + private OAuth2RefreshTokenEntity refreshToken; + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "token_scope", joinColumns = @JoinColumn(name = "owner_id")) + @CascadeOnDelete + private Set<String> scope; + + @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @JoinTable(name = "access_token_permissions", joinColumns = @JoinColumn(name = "access_token_id"), + inverseJoinColumns = @JoinColumn(name = "permission_id")) + @CascadeOnDelete + private Set<Permission> permissions; + + @ManyToOne + @JoinColumn(name = "approved_site_id") + private ApprovedSite approvedSite; + + @Transient + private Map<String, Object> additionalInformation = new HashMap<>(); @Override @Transient @@ -123,26 +179,6 @@ public class OAuth2AccessTokenEntity implements OAuth2AccessToken { return additionalInformation; } - @ManyToOne - @JoinColumn(name = "auth_holder_id") - public AuthenticationHolderEntity getAuthenticationHolder() { - return authenticationHolder; - } - - public void setAuthenticationHolder(AuthenticationHolderEntity authenticationHolder) { - this.authenticationHolder = authenticationHolder; - } - - @ManyToOne - @JoinColumn(name = "client_id") - public ClientDetailsEntity getClient() { - return client; - } - - public void setClient(ClientDetailsEntity client) { - this.client = client; - } - @Override @Transient public String getValue() { @@ -150,31 +186,16 @@ public class OAuth2AccessTokenEntity implements OAuth2AccessToken { } @Override - @Basic - @Temporal(javax.persistence.TemporalType.TIMESTAMP) - @Column(name = "expiration") public Date getExpiration() { return expiration; } - public void setExpiration(Date expiration) { - this.expiration = expiration; - } - @Override - @Basic - @Column(name="token_type") public String getTokenType() { return tokenType; } - public void setTokenType(String tokenType) { - this.tokenType = tokenType; - } - @Override - @ManyToOne - @JoinColumn(name="refresh_token_id") public OAuth2RefreshTokenEntity getRefreshToken() { return refreshToken; } @@ -191,33 +212,16 @@ public class OAuth2AccessTokenEntity implements OAuth2AccessToken { } @Override - @ElementCollection(fetch=FetchType.EAGER) - @CollectionTable(joinColumns=@JoinColumn(name="owner_id"), name="token_scope") public Set<String> getScope() { return scope; } - public void setScope(Set<String> scope) { - this.scope = scope; - } - @Override @Transient public boolean isExpired() { return getExpiration() != null && System.currentTimeMillis() > getExpiration().getTime(); } - @Basic - @Column(name="token_value") - @Convert(converter = JWTStringConverter.class) - public JWT getJwt() { - return jwtValue; - } - - public void setJwt(JWT jwt) { - this.jwtValue = jwt; - } - @Override @Transient public int getExpiresIn() { @@ -232,27 +236,6 @@ public class OAuth2AccessTokenEntity implements OAuth2AccessToken { } } - @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) - @JoinTable(name = "access_token_permissions", joinColumns = @JoinColumn(name = "access_token_id"), - inverseJoinColumns = @JoinColumn(name = "permission_id")) - public Set<Permission> getPermissions() { - return permissions; - } - - public void setPermissions(Set<Permission> permissions) { - this.permissions = permissions; - } - - @ManyToOne - @JoinColumn(name="approved_site_id") - public ApprovedSite getApprovedSite() { - return approvedSite; - } - - public void setApprovedSite(ApprovedSite approvedSite) { - this.approvedSite = approvedSite; - } - @Transient public void setIdToken(JWT idToken) { if (idToken != null) { diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/OAuth2RefreshTokenEntity.java b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/OAuth2RefreshTokenEntity.java index f31f1a7f5..05e99fa67 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/OAuth2RefreshTokenEntity.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/OAuth2RefreshTokenEntity.java @@ -20,10 +20,19 @@ */ package cz.muni.ics.oauth2.model; +import static cz.muni.ics.oauth2.model.OAuth2RefreshTokenEntity.PARAM_CLIENT; +import static cz.muni.ics.oauth2.model.OAuth2RefreshTokenEntity.PARAM_DATE; +import static cz.muni.ics.oauth2.model.OAuth2RefreshTokenEntity.PARAM_NAME; +import static cz.muni.ics.oauth2.model.OAuth2RefreshTokenEntity.PARAM_TOKEN_VALUE; +import static cz.muni.ics.oauth2.model.OAuth2RefreshTokenEntity.QUERY_ALL; +import static cz.muni.ics.oauth2.model.OAuth2RefreshTokenEntity.QUERY_BY_CLIENT; +import static cz.muni.ics.oauth2.model.OAuth2RefreshTokenEntity.QUERY_BY_NAME; +import static cz.muni.ics.oauth2.model.OAuth2RefreshTokenEntity.QUERY_BY_TOKEN_VALUE; +import static cz.muni.ics.oauth2.model.OAuth2RefreshTokenEntity.QUERY_EXPIRED_BY_DATE; + import com.nimbusds.jwt.JWT; import cz.muni.ics.oauth2.model.convert.JWTStringConverter; import java.util.Date; -import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Convert; import javax.persistence.Entity; @@ -37,20 +46,44 @@ import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Temporal; +import javax.persistence.TemporalType; import javax.persistence.Transient; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.eclipse.persistence.annotations.CascadeOnDelete; import org.springframework.security.oauth2.common.OAuth2RefreshToken; /** * @author jricher */ +@Getter +@Setter +@ToString +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +// DB ANNOTATIONS @Entity @Table(name = "refresh_token") @NamedQueries({ - @NamedQuery(name = OAuth2RefreshTokenEntity.QUERY_ALL, query = "select r from OAuth2RefreshTokenEntity r"), - @NamedQuery(name = OAuth2RefreshTokenEntity.QUERY_EXPIRED_BY_DATE, query = "select r from OAuth2RefreshTokenEntity r where r.expiration <= :" + OAuth2RefreshTokenEntity.PARAM_DATE), - @NamedQuery(name = OAuth2RefreshTokenEntity.QUERY_BY_CLIENT, query = "select r from OAuth2RefreshTokenEntity r where r.client = :" + OAuth2RefreshTokenEntity.PARAM_CLIENT), - @NamedQuery(name = OAuth2RefreshTokenEntity.QUERY_BY_TOKEN_VALUE, query = "select r from OAuth2RefreshTokenEntity r where r.jwt = :" + OAuth2RefreshTokenEntity.PARAM_TOKEN_VALUE), - @NamedQuery(name = OAuth2RefreshTokenEntity.QUERY_BY_NAME, query = "select r from OAuth2RefreshTokenEntity r where r.authenticationHolder.userAuth.name = :" + OAuth2RefreshTokenEntity.PARAM_NAME) + @NamedQuery(name = QUERY_ALL, + query = "SELECT r FROM OAuth2RefreshTokenEntity r"), + @NamedQuery(name = QUERY_EXPIRED_BY_DATE, + query = "SELECT r FROM OAuth2RefreshTokenEntity r " + + "WHERE r.expiration <= :" + PARAM_DATE), + @NamedQuery(name = QUERY_BY_CLIENT, + query = "SELECT r FROM OAuth2RefreshTokenEntity r " + + "WHERE r.client = :" + PARAM_CLIENT), + @NamedQuery(name = QUERY_BY_TOKEN_VALUE, + query = "SELECT r FROM OAuth2RefreshTokenEntity r " + + "WHERE r.jwt = :" + PARAM_TOKEN_VALUE), + @NamedQuery(name = QUERY_BY_NAME, + query = "SELECT r FROM OAuth2RefreshTokenEntity r " + + "WHERE r.authenticationHolder.userAuth.name = :" + PARAM_NAME) }) public class OAuth2RefreshTokenEntity implements OAuth2RefreshToken { @@ -65,34 +98,27 @@ public class OAuth2RefreshTokenEntity implements OAuth2RefreshToken { public static final String PARAM_DATE = "date"; public static final String PARAM_NAME = "name"; - private Long id; - private AuthenticationHolderEntity authenticationHolder; - private ClientDetailsEntity client; - private JWT jwt; - private Date expiration; - - public OAuth2RefreshTokenEntity() { } - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } + private Long id; @ManyToOne @JoinColumn(name = "auth_holder_id") - public AuthenticationHolderEntity getAuthenticationHolder() { - return authenticationHolder; - } + @CascadeOnDelete + private AuthenticationHolderEntity authenticationHolder; - public void setAuthenticationHolder(AuthenticationHolderEntity authenticationHolder) { - this.authenticationHolder = authenticationHolder; - } + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "client_id") + private ClientDetailsEntity client; + + @Column(name = "token_value") + @Convert(converter = JWTStringConverter.class) + private JWT jwt; + + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "expiration") + private Date expiration; @Override @Transient @@ -100,41 +126,9 @@ public class OAuth2RefreshTokenEntity implements OAuth2RefreshToken { return jwt.serialize(); } - @Basic - @Temporal(javax.persistence.TemporalType.TIMESTAMP) - @Column(name = "expiration") - public Date getExpiration() { - return expiration; - } - - public void setExpiration(Date expiration) { - this.expiration = expiration; - } - @Transient public boolean isExpired() { return getExpiration() != null && System.currentTimeMillis() > getExpiration().getTime(); } - @ManyToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "client_id") - public ClientDetailsEntity getClient() { - return client; - } - - public void setClient(ClientDetailsEntity client) { - this.client = client; - } - - @Basic - @Column(name="token_value") - @Convert(converter = JWTStringConverter.class) - public JWT getJwt() { - return jwt; - } - - public void setJwt(JWT jwt) { - this.jwt = jwt; - } - } diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/SavedUserAuthentication.java b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/SavedUserAuthentication.java index 21511d2d2..faf9c5867 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/SavedUserAuthentication.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/SavedUserAuthentication.java @@ -34,8 +34,14 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.Table; import javax.persistence.Transient; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import lombok.ToString; import lombok.extern.slf4j.Slf4j; +import org.eclipse.persistence.annotations.CascadeOnDelete; import org.opensaml.saml2.core.AuthnContext; import org.opensaml.saml2.core.AuthnContextClassRef; import org.opensaml.saml2.core.AuthnStatement; @@ -48,18 +54,39 @@ import org.springframework.security.providers.ExpiringUsernameAuthenticationToke * * @author jricher */ -@Entity -@Table(name="saved_user_auth") -@Slf4j +@Getter +@Setter @ToString +@EqualsAndHashCode +@NoArgsConstructor +@AllArgsConstructor +// DB ANNOTATIONS +@Entity +@Table(name = "saved_user_auth") public class SavedUserAuthentication implements Authentication { private static final long serialVersionUID = -1804249963940323488L; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") private Long id; + + @Basic + @Column(name="name") private String name; + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "saved_user_auth_authority", joinColumns = @JoinColumn(name = "owner_id")) + @Convert(converter = SimpleGrantedAuthorityStringConverter.class) + @Column(name = "authority") + @CascadeOnDelete private Collection<GrantedAuthority> authorities; + + @Column(name="authenticated") private boolean authenticated; + + @Column(name = "acr") private String acr; public SavedUserAuthentication(Authentication src) { @@ -80,56 +107,17 @@ public class SavedUserAuthentication implements Authentication { } } - public SavedUserAuthentication() { } - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - @Override - @Basic - @Column(name="name") public String getName() { return name; } - public void setName(String name) { - this.name = name; - } - @Override - @ElementCollection(fetch = FetchType.EAGER) - @CollectionTable(name="saved_user_auth_authority", joinColumns=@JoinColumn(name="owner_id")) - @Convert(converter = SimpleGrantedAuthorityStringConverter.class) - @Column(name="authority") public Collection<GrantedAuthority> getAuthorities() { return authorities; } - public void setAuthorities(Collection<GrantedAuthority> authorities) { - this.authorities = authorities; - } - - @Basic - @Column(name = "acr") - public String getAcr() { - return acr; - } - - public void setAcr(String acr) { - this.acr = acr; - } - @Override - @Basic - @Column(name="authenticated") public boolean isAuthenticated() { return authenticated; } diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/repository/impl/JpaOAuth2TokenRepository.java b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/repository/impl/JpaOAuth2TokenRepository.java index a7f31b409..ce64890dd 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/repository/impl/JpaOAuth2TokenRepository.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/oauth2/repository/impl/JpaOAuth2TokenRepository.java @@ -106,7 +106,7 @@ public class JpaOAuth2TokenRepository implements OAuth2TokenRepository { @Transactional(value="defaultTransactionManager") public void clearAccessTokensForRefreshToken(OAuth2RefreshTokenEntity refreshToken) { TypedQuery<OAuth2AccessTokenEntity> query = manager.createNamedQuery(OAuth2AccessTokenEntity.QUERY_BY_REFRESH_TOKEN, OAuth2AccessTokenEntity.class); - query.setParameter(OAuth2AccessTokenEntity.PARAM_REFERSH_TOKEN, refreshToken); + query.setParameter(OAuth2AccessTokenEntity.PARAM_REFRESH_TOKEN, refreshToken); List<OAuth2AccessTokenEntity> accessTokens = query.getResultList(); for (OAuth2AccessTokenEntity accessToken : accessTokens) { removeAccessToken(accessToken); diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunAccessTokenEnhancer.java b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunAccessTokenEnhancer.java index 50c0ee366..4e621b3ca 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunAccessTokenEnhancer.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunAccessTokenEnhancer.java @@ -108,7 +108,7 @@ public class PerunAccessTokenEnhancer implements TokenEnhancer { SignedJWT signed = new SignedJWT(header, claims); jwtService.signJwt(signed); - token.setJwt(signed); + token.setJwtValue(signed); if (userInfo != null) { //needs access token diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/service/impl/DefaultOIDCTokenService.java b/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/service/impl/DefaultOIDCTokenService.java index 5b9c0df12..2a06b47c1 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/service/impl/DefaultOIDCTokenService.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/service/impl/DefaultOIDCTokenService.java @@ -281,7 +281,7 @@ public class DefaultOIDCTokenService implements OIDCTokenService { jwtService.signJwt(signed); - token.setJwt(signed); + token.setJwtValue(signed); return token; } diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/token/ConnectTokenEnhancer.java b/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/token/ConnectTokenEnhancer.java index eb26c7ef9..fec35e513 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/token/ConnectTokenEnhancer.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/token/ConnectTokenEnhancer.java @@ -96,7 +96,7 @@ public class ConnectTokenEnhancer implements TokenEnhancer { jwtService.signJwt(signed); - token.setJwt(signed); + token.setJwtValue(signed); /** * Authorization request scope MUST include "openid" in OIDC, but access token request diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/util/IdTokenHashUtils.java b/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/util/IdTokenHashUtils.java index b4f9bee49..99254e219 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/util/IdTokenHashUtils.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/util/IdTokenHashUtils.java @@ -56,7 +56,7 @@ public class IdTokenHashUtils { */ public static Base64URL getAccessTokenHash(JWSAlgorithm signingAlg, OAuth2AccessTokenEntity token) { - byte[] tokenBytes = token.getJwt().serialize().getBytes(); + byte[] tokenBytes = token.getJwtValue().serialize().getBytes(); return getHash(signingAlg, tokenBytes); diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/web/DynamicClientRegistrationEndpoint.java b/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/web/DynamicClientRegistrationEndpoint.java index e0227a96c..659e8f816 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/web/DynamicClientRegistrationEndpoint.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/web/DynamicClientRegistrationEndpoint.java @@ -752,7 +752,7 @@ public class DynamicClientRegistrationEndpoint { try { // Re-issue the token if it has been issued before [currentTime - validity] Date validToDate = new Date(System.currentTimeMillis() - config.getRegTokenLifeTime() * 1000); - if(token.getJwt().getJWTClaimsSet().getIssueTime().before(validToDate)) { + if(token.getJwtValue().getJWTClaimsSet().getIssueTime().before(validToDate)) { log.info("Rotating the registration access token for " + client.getClientId()); tokenService.revokeAccessToken(token); OAuth2AccessTokenEntity newToken = connectTokenService.createRegistrationAccessToken(client); diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/web/ProtectedResourceRegistrationEndpoint.java b/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/web/ProtectedResourceRegistrationEndpoint.java index 256311ae0..9769565a9 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/web/ProtectedResourceRegistrationEndpoint.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/openid/connect/web/ProtectedResourceRegistrationEndpoint.java @@ -440,7 +440,7 @@ public class ProtectedResourceRegistrationEndpoint { try { // Re-issue the token if it has been issued before [currentTime - validity] Date validToDate = new Date(System.currentTimeMillis() - config.getRegTokenLifeTime() * 1000); - if(token.getJwt().getJWTClaimsSet().getIssueTime().before(validToDate)) { + if(token.getJwtValue().getJWTClaimsSet().getIssueTime().before(validToDate)) { log.info("Rotating the registration access token for " + client.getClientId()); tokenService.revokeAccessToken(token); OAuth2AccessTokenEntity newToken = connectTokenService.createResourceAccessToken(client); diff --git a/perun-oidc-server/src/test/java/cz/muni/ics/openid/connect/token/TestConnectTokenEnhancer.java b/perun-oidc-server/src/test/java/cz/muni/ics/openid/connect/token/TestConnectTokenEnhancer.java index 6921c6c22..2a4610fce 100644 --- a/perun-oidc-server/src/test/java/cz/muni/ics/openid/connect/token/TestConnectTokenEnhancer.java +++ b/perun-oidc-server/src/test/java/cz/muni/ics/openid/connect/token/TestConnectTokenEnhancer.java @@ -92,7 +92,7 @@ public class TestConnectTokenEnhancer { OAuth2AccessTokenEntity token = new OAuth2AccessTokenEntity(); OAuth2AccessTokenEntity enhanced = (OAuth2AccessTokenEntity) enhancer.enhance(token, authentication); - Assert.assertEquals("foo", enhanced.getJwt().getJWTClaimsSet().getClaim("test")); + Assert.assertEquals("foo", enhanced.getJwtValue().getJWTClaimsSet().getClaim("test")); } private void configure(ConnectTokenEnhancer e) { diff --git a/perun-oidc-server/src/test/java/cz/muni/ics/openid/connect/util/TestIdTokenHashUtils.java b/perun-oidc-server/src/test/java/cz/muni/ics/openid/connect/util/TestIdTokenHashUtils.java index c8689e439..ff4907b21 100644 --- a/perun-oidc-server/src/test/java/cz/muni/ics/openid/connect/util/TestIdTokenHashUtils.java +++ b/perun-oidc-server/src/test/java/cz/muni/ics/openid/connect/util/TestIdTokenHashUtils.java @@ -58,7 +58,7 @@ public class TestIdTokenHashUtils { claims.setSubject("example_user"); claims.setClaim("alg", "HS256"); */ - Mockito.when(mockToken256.getJwt()).thenReturn(JWTParser.parse("eyJhbGciOiJub25lIn0.eyJhbGciOiJIUzI1NiIsInN1YiI6ImV4YW1wbGVfdXNlciIsImlzcyI6Ind3dy5leGFtcGxlLmNvbSIsInR5cCI6IkpXVCJ9.")); + Mockito.when(mockToken256.getJwtValue()).thenReturn(JWTParser.parse("eyJhbGciOiJub25lIn0.eyJhbGciOiJIUzI1NiIsInN1YiI6ImV4YW1wbGVfdXNlciIsImlzcyI6Ind3dy5leGFtcGxlLmNvbSIsInR5cCI6IkpXVCJ9.")); /* * Claims for second token @@ -68,7 +68,7 @@ public class TestIdTokenHashUtils { claims.setSubject("another_user"); claims.setClaim("alg", "ES384"); */ - Mockito.when(mockToken384.getJwt()).thenReturn(JWTParser.parse("eyJhbGciOiJub25lIn0.eyJhbGciOiJFUzM4NCIsInN1YiI6ImFub3RoZXJfdXNlciIsImlzcyI6Ind3dy5hbm90aGVyLWV4YW1wbGUubmV0IiwidHlwIjoiSldUIn0.")); + Mockito.when(mockToken384.getJwtValue()).thenReturn(JWTParser.parse("eyJhbGciOiJub25lIn0.eyJhbGciOiJFUzM4NCIsInN1YiI6ImFub3RoZXJfdXNlciIsImlzcyI6Ind3dy5hbm90aGVyLWV4YW1wbGUubmV0IiwidHlwIjoiSldUIn0.")); /* * Claims for third token: @@ -78,13 +78,13 @@ public class TestIdTokenHashUtils { claims.setSubject("different_user"); claims.setClaim("alg", "RS512"); */ - Mockito.when(mockToken512.getJwt()).thenReturn(JWTParser.parse("eyJhbGciOiJub25lIn0.eyJhbGciOiJSUzUxMiIsInN1YiI6ImRpZmZlcmVudF91c2VyIiwiaXNzIjoid3d3LmRpZmZlcmVudC5jb20iLCJ0eXAiOiJKV1QifQ.")); + Mockito.when(mockToken512.getJwtValue()).thenReturn(JWTParser.parse("eyJhbGciOiJub25lIn0.eyJhbGciOiJSUzUxMiIsInN1YiI6ImRpZmZlcmVudF91c2VyIiwiaXNzIjoid3d3LmRpZmZlcmVudC5jb20iLCJ0eXAiOiJKV1QifQ.")); } @Test public void getAccessTokenHash256() { - mockToken256.getJwt().serialize(); + mockToken256.getJwtValue().serialize(); Base64URL expectedHash = new Base64URL("EP1gXNeESRH-n57baopfTQ"); Base64URL resultHash = IdTokenHashUtils.getAccessTokenHash(JWSAlgorithm.HS256, mockToken256); @@ -101,7 +101,7 @@ public class TestIdTokenHashUtils { base64url of hash = BWfFK73PQI36M1rg9R6VjMyWOE0-XvBK */ - mockToken384.getJwt().serialize(); + mockToken384.getJwtValue().serialize(); Base64URL expectedHash = new Base64URL("BWfFK73PQI36M1rg9R6VjMyWOE0-XvBK"); Base64URL resultHash = IdTokenHashUtils.getAccessTokenHash(JWSAlgorithm.ES384, mockToken384); @@ -118,7 +118,7 @@ public class TestIdTokenHashUtils { base64url of hash = vGH3QMY-knpACkLgzdkTqu3C9jtvbf2Wk_RSu2vAx8k */ - mockToken512.getJwt().serialize(); + mockToken512.getJwtValue().serialize(); Base64URL expectedHash = new Base64URL("vGH3QMY-knpACkLgzdkTqu3C9jtvbf2Wk_RSu2vAx8k"); Base64URL resultHash = IdTokenHashUtils.getAccessTokenHash(JWSAlgorithm.RS512, mockToken512);