Skip to content

Commit 0740443

Browse files
committed
added claims redirect uri set to client model for UMA usage
1 parent 658b5e1 commit 0740443

File tree

6 files changed

+54
-3
lines changed

6 files changed

+54
-3
lines changed

openid-connect-common/src/main/java/org/mitre/oauth2/model/ClientDetailsEntity.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@ public class ClientDetailsEntity implements ClientDetails {
141141
private Integer idTokenValiditySeconds; //timeout for id tokens
142142
private Date createdAt; // time the client was created
143143
private boolean clearAccessTokensOnRefresh = true; // do we clear access tokens on refresh?
144+
145+
/** fields for UMA */
146+
private Set<String> claimsRedirectUris;
144147

145148
public enum AuthMethod {
146149
SECRET_POST("client_secret_post"),
@@ -964,5 +967,25 @@ public boolean isClearAccessTokensOnRefresh() {
964967
public void setClearAccessTokensOnRefresh(boolean clearAccessTokensOnRefresh) {
965968
this.clearAccessTokensOnRefresh = clearAccessTokensOnRefresh;
966969
}
967-
970+
971+
/**
972+
* @return the claimsRedirectUris
973+
*/
974+
@ElementCollection(fetch = FetchType.EAGER)
975+
@CollectionTable(
976+
name="client_claims_redirect_uri",
977+
joinColumns=@JoinColumn(name="owner_id")
978+
)
979+
@Column(name="redirect_uri")
980+
public Set<String> getClaimsRedirectUris() {
981+
return claimsRedirectUris;
982+
}
983+
984+
/**
985+
* @param claimsRedirectUris the claimsRedirectUris to set
986+
*/
987+
public void setClaimsRedirectUris(Set<String> claimsRedirectUris) {
988+
this.claimsRedirectUris = claimsRedirectUris;
989+
}
990+
968991
}

openid-connect-server-webapp/src/main/resources/db/tables/hsql_database_tables.sql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,11 @@ CREATE TABLE IF NOT EXISTS client_redirect_uri (
197197
redirect_uri VARCHAR(2048)
198198
);
199199

200+
CREATE TABLE IF NOT EXISTS client_claims_redirect_uri (
201+
owner_id BIGINT,
202+
redirect_uri VARCHAR(2048)
203+
);
204+
200205
CREATE TABLE IF NOT EXISTS refresh_token (
201206
id BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY,
202207
token_value VARCHAR(4096),

openid-connect-server-webapp/src/main/resources/db/tables/mysql_database_tables.sql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,11 @@ CREATE TABLE IF NOT EXISTS client_redirect_uri (
197197
redirect_uri VARCHAR(2048)
198198
);
199199

200+
CREATE TABLE IF NOT EXISTS client_claims_redirect_uri (
201+
owner_id BIGINT,
202+
redirect_uri VARCHAR(2048)
203+
);
204+
200205
CREATE TABLE IF NOT EXISTS refresh_token (
201206
id BIGINT AUTO_INCREMENT PRIMARY KEY,
202207
token_value VARCHAR(4096),

openid-connect-server-webapp/src/main/resources/db/tables/psql_database_tables.sql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,11 @@ CREATE TABLE IF NOT EXISTS client_redirect_uri (
197197
redirect_uri VARCHAR(2048)
198198
);
199199

200+
CREATE TABLE IF NOT EXISTS client_claims_redirect_uri (
201+
owner_id BIGINT,
202+
redirect_uri VARCHAR(2048)
203+
);
204+
200205
CREATE TABLE IF NOT EXISTS refresh_token (
201206
id SERIAL PRIMARY KEY,
202207
token_value VARCHAR(4096),

openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/MITREidDataService_1_2.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
143143
private static final String AUTHENTICATION_HOLDER_ID = "authenticationHolderId";
144144
private static final String CLIENT_ID = "clientId";
145145
private static final String EXPIRATION = "expiration";
146+
private static final String CLAIMS_REDIRECT_URIS = "claimsRedirectUris";
146147
private static final String ID = "id";
147148
/**
148149
* Logger for this class
@@ -432,6 +433,8 @@ private void writeClients(JsonWriter writer) {
432433
writer.name(REFRESH_TOKEN_VALIDITY_SECONDS).value(client.getRefreshTokenValiditySeconds());
433434
writer.name(REDIRECT_URIS);
434435
writeNullSafeArray(writer, client.getRedirectUris());
436+
writer.name(CLAIMS_REDIRECT_URIS);
437+
writeNullSafeArray(writer, client.getClaimsRedirectUris());
435438
writer.name(NAME).value(client.getClientName());
436439
writer.name(URI).value(client.getClientUri());
437440
writer.name(LOGO_URI).value(client.getLogoUri());
@@ -1034,6 +1037,9 @@ private void readClients(JsonReader reader) throws IOException {
10341037
} else if (name.equals(REDIRECT_URIS)) {
10351038
Set<String> redirectUris = readSet(reader);
10361039
client.setRedirectUris(redirectUris);
1040+
} else if (name.equals(CLAIMS_REDIRECT_URIS)) {
1041+
Set<String> claimsRedirectUris = readSet(reader);
1042+
client.setClaimsRedirectUris(claimsRedirectUris);
10371043
} else if (name.equals(NAME)) {
10381044
client.setClientName(reader.nextString());
10391045
} else if (name.equals(URI)) {

uma-server/src/main/java/org/mitre/uma/web/ClaimsCollectionEndpoint.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.springframework.beans.factory.annotation.Autowired;
3333
import org.springframework.http.HttpStatus;
3434
import org.springframework.security.access.prepost.PreAuthorize;
35+
import org.springframework.security.oauth2.common.exceptions.RedirectMismatchException;
3536
import org.springframework.stereotype.Controller;
3637
import org.springframework.ui.Model;
3738
import org.springframework.web.bind.annotation.RequestMapping;
@@ -116,9 +117,15 @@ public String collectClaims(@RequestParam("client_id") String clientId, @Request
116117
PermissionTicket updatedTicket = permissionService.updateTicket(ticket);
117118

118119
if (Strings.isNullOrEmpty(redirectUri)) {
119-
if (client.getRedirectUris().size() == 1) {
120-
redirectUri = client.getRedirectUris().iterator().next(); // get the first (and only) redirect URI to use here
120+
if (client.getClaimsRedirectUris().size() == 1) {
121+
redirectUri = client.getClaimsRedirectUris().iterator().next(); // get the first (and only) redirect URI to use here
121122
logger.info("No redirect URI passed in, using registered value: " + redirectUri);
123+
} else {
124+
throw new RedirectMismatchException("Unable to find redirect URI and none passed in.");
125+
}
126+
} else {
127+
if (!client.getClaimsRedirectUris().contains(redirectUri)) {
128+
throw new RedirectMismatchException("Claims redirect did not match the registered values.");
122129
}
123130
}
124131

0 commit comments

Comments
 (0)