Name | /FHIRCommon/_reference/rule/DecodeIdToken.groovy |
Description | Decode the provided idToken parameter |
Summary | Decode the provided idToken parameter |
Version | 1 | Latest | 1 |
/*
rule.summary=Decode the provided idToken parameter
rule.description=Decode the provided idToken parameter
rule.param.idToken.required=true
rule.param.outputPrefix.required=true
*/
assert !param.idToken.is(null): "The parameter 'idToken' was not supplied"
assert !param.outputPrefix.is(null): "The parameter 'outputPrefix' was not supplied"
String[] tokenParts = param.idToken.split("\\.")
assert tokenParts.length==3 : "Invalid id_token received. Expected three parts in the token"
String decodedHeader = decodeBase64(tokenParts[0])
String decodedPayload = decodeBase64(tokenParts[1])
def slurper = new groovy.json.JsonSlurper()
def parsedHeader = slurper.parseText(decodedHeader)
def parsedPayload = slurper.parseText(decodedPayload)
// This is a general rule for basic parsing of the id_token. It will produce all the output it can. The test script can extract what it
// needs by declaring output parameters with the corresponding names below
output[param.outputPrefix+'-id-token-header'] = JsonOutput.toJson(parsedHeader)
output[param.outputPrefix+'-id-token-payload'] = JsonOutput.toJson(parsedPayload)
output[param.outputPrefix+'-id-token-header-alg'] = parsedHeader.alg
output[param.outputPrefix+'-id-token-header-typ'] = parsedHeader.typ
output[param.outputPrefix+'-id-token-header-kid'] = parsedHeader.kid
output[param.outputPrefix+'-id-token-payload-exp'] = parsedPayload.exp;
output[param.outputPrefix+'-id-token-payload-iat'] = parsedPayload.iat;
output[param.outputPrefix+'-id-token-payload-auth_time'] = parsedPayload.auth_time;
output[param.outputPrefix+'-id-token-payload-jti'] = parsedPayload.jti;
output[param.outputPrefix+'-id-token-payload-iss'] = parsedPayload.iss;
output[param.outputPrefix+'-id-token-payload-aud'] = parsedPayload.aud;
output[param.outputPrefix+'-id-token-payload-sub'] = parsedPayload.sub;
output[param.outputPrefix+'-id-token-payload-typ'] = parsedPayload.typ;
output[param.outputPrefix+'-id-token-payload-azp'] = parsedPayload.azp;
output[param.outputPrefix+'-id-token-payload-session_state'] = parsedPayload.session_state;
output[param.outputPrefix+'-id-token-payload-acr'] = parsedPayload.acr;