org.keycloak.representations.ClaimsRepresentation Maven / Gradle / Ivy
/*
* Copyright 2021 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.keycloak.representations;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Claims parameter as described in the OIDC specification https://openid.net/specs/openid-connect-core-1_0.html#ClaimsParameter
*
* @author Marek Posolda
*/
public class ClaimsRepresentation {
@JsonProperty("id_token")
private Map idTokenClaims;
@JsonProperty("userinfo")
private Map userinfoClaims;
public Map getIdTokenClaims() {
return idTokenClaims;
}
public void setIdTokenClaims(Map idTokenClaims) {
this.idTokenClaims = idTokenClaims;
}
public Map getUserinfoClaims() {
return userinfoClaims;
}
public void setUserinfoClaims(Map userinfoClaims) {
this.userinfoClaims = userinfoClaims;
}
// Helper methods
/**
*
* @param claimName
* @param ctx Whether we ask for claim to be presented in idToken or userInfo
* @return true if claim is presented in the claims parameter either as "null" claim (See OIDC specification for definition of null claim) or claim with some value
*/
public boolean isPresent(String claimName, ClaimContext ctx) {
if (ctx == ClaimContext.ID_TOKEN) {
return idTokenClaims != null && idTokenClaims.containsKey(claimName);
} else if (ctx == ClaimContext.USERINFO){
return userinfoClaims != null && userinfoClaims.containsKey(claimName);
} else {
throw new IllegalArgumentException("Invalid claim context");
}
}
/**
*
* @param claimName
* @param ctx Whether we ask for claim to be presented in idToken or userInfo
* @return true if claim is presented in the claims parameter as "null" claim (See OIDC specification for definition of null claim)
*/
public boolean isPresentAsNullClaim(String claimName, ClaimContext ctx) {
if (!isPresent(claimName, ctx)) return false;
if (ctx == ClaimContext.ID_TOKEN) {
return idTokenClaims.get(claimName) == null;
} else if (ctx == ClaimContext.USERINFO){
return userinfoClaims.get(claimName) == null;
} else {
throw new IllegalArgumentException("Invalid claim context");
}
}
/**
*
* @param claimName
* @param ctx Whether we ask for claim to be presented in idToken or userInfo
* @param claimType claimType class
* @return Claim value
*/
public ClaimValue getClaimValue(String claimName, ClaimContext ctx, Class claimType) {
if (!isPresent(claimName, ctx)) return null;
if (ctx == ClaimContext.ID_TOKEN) {
return (ClaimValue) idTokenClaims.get(claimName);
} else if (ctx == ClaimContext.USERINFO){
return (ClaimValue) userinfoClaims.get(claimName);
} else {
throw new IllegalArgumentException("Invalid claim context");
}
}
public enum ClaimContext {
ID_TOKEN, USERINFO
}
/**
* @param Specifies the type of the claim
*/
public static class ClaimValue {
private Boolean essential;
private CLAIM_TYPE value;
private List values;
public Boolean getEssential() {
return essential;
}
public boolean isEssential() {
return essential != null && essential;
}
public void setEssential(Boolean essential) {
this.essential = essential;
}
public CLAIM_TYPE getValue() {
return value;
}
public void setValue(CLAIM_TYPE value) {
this.value = value;
}
public List getValues() {
return values;
}
public void setValues(List values) {
this.values = values;
}
}
}