76 this.
scopes =
new ArrayList<String>();
77 this.
prompts =
new ArrayList<Prompt>();
80 if (encodedJwt != null && !encodedJwt.isEmpty()) {
81 String[] parts = encodedJwt.split(
"\\.");
83 if (parts.length == 5) {
84 String encodedHeader = parts[0];
85 String encodedEncryptedKey = parts[1];
86 String encodedInitializationVector = parts[2];
87 String encodedCipherText = parts[3];
88 String encodedIntegrityValue = parts[4];
90 JwtHeader jwtHeader =
new JwtHeader(encodedHeader);
92 keyId = jwtHeader.getKeyId();
93 KeyEncryptionAlgorithm keyEncryptionAlgorithm = KeyEncryptionAlgorithm.fromName(
94 jwtHeader.getClaimAsString(JwtHeaderName.ALGORITHM));
95 BlockEncryptionAlgorithm blockEncryptionAlgorithm = BlockEncryptionAlgorithm.fromName(
96 jwtHeader.getClaimAsString(JwtHeaderName.ENCRYPTION_METHOD));
98 JweDecrypterImpl jweDecrypter = null;
99 if (
"RSA".equals(keyEncryptionAlgorithm.getFamily())) {
102 PrivateKey privateKey = cryptoProvider.getPrivateKey(
keyId);
103 jweDecrypter =
new JweDecrypterImpl(privateKey);
105 ClientService clientService = CdiUtil.bean(ClientService.class);
106 jweDecrypter =
new JweDecrypterImpl(clientService.decryptSecret(client.getClientSecret()).getBytes(Util.UTF8_STRING_ENCODING));
108 jweDecrypter.setKeyEncryptionAlgorithm(keyEncryptionAlgorithm);
109 jweDecrypter.setBlockEncryptionAlgorithm(blockEncryptionAlgorithm);
111 byte[] contentMasterKey = jweDecrypter.decryptEncryptionKey(encodedEncryptedKey);
112 byte[] initializationVector = Base64Util.base64urldecode(encodedInitializationVector);
113 byte[] authenticationTag = Base64Util.base64urldecode(encodedIntegrityValue);
114 String additionalAuthenticatedData = encodedHeader +
"." 115 + encodedEncryptedKey +
"." 116 + encodedInitializationVector;
118 String encodedClaim = jweDecrypter.decryptCipherText(encodedCipherText, contentMasterKey, initializationVector,
119 authenticationTag, additionalAuthenticatedData.getBytes(Util.UTF8_STRING_ENCODING));
120 String header =
new String(Base64Util.base64urldecode(encodedHeader), Util.UTF8_STRING_ENCODING);
121 String payload =
new String(Base64Util.base64urldecode(encodedClaim), Util.UTF8_STRING_ENCODING);
122 payload = payload.replace(
"\\",
"");
126 }
else if (parts.length == 2 || parts.length == 3) {
127 String encodedHeader = parts[0];
128 String encodedClaim = parts[1];
129 String encodedSignature = StringUtils.EMPTY;
130 if (parts.length == 3) {
131 encodedSignature = parts[2];
134 String signingInput = encodedHeader +
"." + encodedClaim;
135 String header =
new String(Base64Util.base64urldecode(encodedHeader), Util.UTF8_STRING_ENCODING);
136 String payload =
new String(Base64Util.base64urldecode(encodedClaim), Util.UTF8_STRING_ENCODING);
137 payload = payload.replace(
"\\",
"");
139 JSONObject jsonHeader =
new JSONObject(header);
141 if (jsonHeader.has(
"typ")) {
142 type = jsonHeader.getString(
"typ");
144 if (jsonHeader.has(
"alg")) {
147 if (jsonHeader.has(
"kid")) {
148 keyId = jsonHeader.getString(
"kid");
151 SignatureAlgorithm sigAlg = SignatureAlgorithm.fromString(
algorithm);
152 if (sigAlg != null) {
154 JSONObject jsonPayload =
new JSONObject(payload);
156 if (jsonPayload.has(
"response_type")) {
157 JSONArray responseTypeJsonArray = jsonPayload.optJSONArray(
"response_type");
158 if (responseTypeJsonArray != null) {
159 for (
int i = 0; i < responseTypeJsonArray.length(); i++) {
160 ResponseType responseType = ResponseType.fromString(responseTypeJsonArray.getString(i));
164 responseTypes.addAll(ResponseType.fromString(jsonPayload.getString(
"response_type"),
" "));
167 if (jsonPayload.has(
"client_id")) {
168 clientId = jsonPayload.getString(
"client_id");
170 if (jsonPayload.has(
"scope")) {
171 JSONArray scopesJsonArray = jsonPayload.optJSONArray(
"scope");
172 if (scopesJsonArray != null) {
173 for (
int i = 0; i < scopesJsonArray.length(); i++) {
174 String scope = scopesJsonArray.getString(i);
178 String scopeStringList = jsonPayload.getString(
"scope");
179 scopes.addAll(Util.splittedStringAsList(scopeStringList,
" "));
182 if (jsonPayload.has(
"redirect_uri")) {
183 redirectUri = URLDecoder.decode(jsonPayload.getString(
"redirect_uri"),
"UTF-8");
185 if (jsonPayload.has(
"nonce")) {
186 nonce = jsonPayload.getString(
"nonce");
188 if (jsonPayload.has(
"state")) {
189 state = jsonPayload.getString(
"state");
191 if (jsonPayload.has(
"display")) {
194 if (jsonPayload.has(
"prompt")) {
195 JSONArray promptJsonArray = jsonPayload.optJSONArray(
"prompt");
196 if (promptJsonArray != null) {
197 for (
int i = 0; i < promptJsonArray.length(); i++) {
198 Prompt prompt = Prompt.
fromString(promptJsonArray.getString(i));
202 prompts.addAll(Prompt.fromString(jsonPayload.getString(
"prompt"),
" "));
205 if (jsonPayload.has(
"claims")) {
206 JSONObject claimsJsonObject = jsonPayload.getJSONObject(
"claims");
208 if (claimsJsonObject.has(
"userinfo")) {
209 userInfoMember =
new UserInfoMember(claimsJsonObject.getJSONObject(
"userinfo"));
211 if (claimsJsonObject.has(
"id_token")) {
212 idTokenMember =
new IdTokenMember(claimsJsonObject.getJSONObject(
"id_token"));
216 throw new InvalidJwtException(
"The JWT signature is not valid");
219 throw new InvalidJwtException(
"The JWT algorithm is not supported");
222 throw new InvalidJwtException(
"The JWT is not well formed");
225 throw new InvalidJwtException(
"The JWT is null or empty");
227 }
catch (JSONException e) {
228 throw new InvalidJwtException(e);
229 }
catch (UnsupportedEncodingException e) {
230 throw new InvalidJwtException(e);
231 }
catch (StringEncrypter.EncryptionException e) {
232 throw new InvalidJwtException(e);
233 }
catch (Exception e) {
234 throw new InvalidJwtException(e);
boolean validateSignature(SignatureAlgorithm signatureAlgorithm, Client client, String signingInput, String signature)
Definition: JwtAuthorizationRequest.java:323
String algorithm
Definition: JwtAuthorizationRequest.java:52
String getDnName()
Definition: AppConfiguration.java:1145
static Display fromString(String param)
Definition: Display.java:64
String keyId
Definition: JwtAuthorizationRequest.java:54
Display display
Definition: JwtAuthorizationRequest.java:63
String encodedJwt
Definition: JwtAuthorizationRequest.java:68
String clientId
Definition: JwtAuthorizationRequest.java:58
String getKeyStoreSecret()
Definition: AppConfiguration.java:1161
String getKeyStoreFile()
Definition: AppConfiguration.java:1153
List< ResponseType > responseTypes
Definition: JwtAuthorizationRequest.java:57
UserInfoMember userInfoMember
Definition: JwtAuthorizationRequest.java:65
String state
Definition: JwtAuthorizationRequest.java:62
AppConfiguration appConfiguration
Definition: JwtAuthorizationRequest.java:70
String nonce
Definition: JwtAuthorizationRequest.java:61
void loadPayload(String payload)
Definition: JwtAuthorizationRequest.java:259
String type
Definition: JwtAuthorizationRequest.java:51
void loadHeader(String header)
Definition: JwtAuthorizationRequest.java:242
List< Prompt > prompts
Definition: JwtAuthorizationRequest.java:64
String redirectUri
Definition: JwtAuthorizationRequest.java:60
List< String > scopes
Definition: JwtAuthorizationRequest.java:59
IdTokenMember idTokenMember
Definition: JwtAuthorizationRequest.java:66