Compare commits

...

11 Commits

6 changed files with 213 additions and 54 deletions

View File

@ -2,33 +2,31 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
# Changelog for "keycloak-client"
## [v2.2.0-SNAPSHOT]
- Added support to add scopes in requests in client and constants for d4s-context dynamic scope. (#28084)
- Added tests to demonstrate dynamic scopes for clients and for users on both private and public clients (#28084)
- Moved form gxJRS to low level gxHTTP (#28294)
- Moved to `jjwt` internal lib (#28296)
## [v2.2.0]
- Added support to add scopes in requests in client and constants for d4s-context dynamic scope. [#28084]
- Added tests to demonstrate dynamic scopes for clients and for users on both private and public clients [#28084]
- Moved form gxJRS to low level gxHTTP [#28294]
- Moved to `jjwt` internal lib [#28296]
## [v2.1.0]
- Added `token-exchange` support, also with `offline-token` scope, and methods to add extra headers during the OIDC token requests (#27099).
- Added custom base URL set via factory (not automatically working cross environments) [#27234].
## [v2.1.0] - 2024-05-07
- Added `token-exchange` support, also with `offline-token` scope, and methods to add extra headers during the OIDC token requests [#27099].
- Added custom base URL set via factory (not automatically working cross environments) [#27234]
- Added JWKS server configuration retrieval, realm's info (as `PublishedRealmRepresentation` JSON containing public key) and JWT digital signature verification by using the RSA public key of the realm on server. It uses the `jjwt` library by `io.jsonwebtoken` [#27340]
## [v2.0.0]
- Removed the discovery functionality to be compatible with SmartGears.v4 and moved to the new library `keycloak-client-legacy-is` that will provide the backward compatibility. (#23478).
- Fixed typo in `AccessToken` class for `setAccessToken(..)` method (#23654)
- Added predictive infrastructure URL support based on context (and on context and realm if the target realm is not the default one) and overloaded all methods that take the URL as argument with the context. (#23655)
## [v2.0.0] - 2023-07-21
- Removed the discovery functionality to be compatible with SmartGears.v4 and moved to the new library `keycloak-client-legacy-is` that will provide the backward compatibility. [#23478].
- Fixed typo in `AccessToken` class for `setAccessToken(..)` method [#23654]
- Added predictive infrastructure URL support based on context (and on context and realm if the target realm is not the default one) and overloaded all methods that take the URL as argument with the context. [#23655]
- Added support for the use of the custom Keycloak's D4S mapper that maps/shrink the `aud` (and optionally also the resource access) to the value requested via `X-D4Science-Context` HTTP header.
- Added support of password grant flow (corresponding to the now deprecated OAuth2 flow: Resource Owner Password Credentials grant) also for specific context/audience by using the specific D4S mapper. (#25291)
- Added new `KeycloakClientHelper` class to perform token request for user in one shot and without the need to provide the `clientId` parameter (#25291). Only `context`, `username` and `password` are required. (#25291)
- Added support of password grant flow (corresponding to the now deprecated OAuth2 flow: Resource Owner Password Credentials grant) also for specific context/audience by using the specific D4S mapper. [#25291]
- Added new `KeycloakClientHelper` class to perform token request for user in one shot and without the need to provide the `clientId` parameter. Only `context`, `username` and `password` are required. [#25291][#25291]
- Added functions to introspect and verify access tokens (both OIDC and UMA are supported) [#23326]
## [v1.3.0-SNAPSHOT]
- Added functions to introspect and verify access tokens (both OIDC and UMA are supported) (#23326).
## [v1.2.0] - 2022-04-04
- Added OIDC token retrieve for clients and UMA token from OIDC token as bearer auth, instead of credentials only (basic auth)[#23076]
## [v1.2.0]
- Added OIDC token retrieve for clients [#23076] and UMA token from OIDC token as bearer auth, instead of credentials only (basic auth)
## [v1.1.0] - 2022-01-13
- Added refresh token facilities for expired tokens and some helper methods added [#22515]
## [v1.1.0]
- Added refresh token facilities for expired tokens (#22515) and some helper methods added.
## [v1.0.1]
- First release (#21389 #22155) provides the basic helper classes for Keycloak tokens retrieve and functions for the gCube framework integration (automatic service discovery).
## [v1.0.1] - 2021-10-07
- First release, provides the basic helper classes for Keycloak tokens retrieve and functions for the gCube framework integration (automatic service discovery) [#21389] [#22155]

35
descriptor.xml Normal file
View File

@ -0,0 +1,35 @@
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>servicearchive</id>
<formats>
<format>tar.gz</format>
</formats>
<baseDirectory>/</baseDirectory>
<fileSets>
<fileSet>
<directory>.</directory>
<outputDirectory>${file.separator}</outputDirectory>
<useDefaultExcludes>true</useDefaultExcludes>
<includes>
<include>README.md</include>
<include>LICENSE.md</include>
<include>CHANGELOG.md</include>
<include>FUNDING.md</include>
<include>CITATION.cff</include>
<include>profile.xml</include>
<include>images</include>
<include>images/**</include>
</includes>
<fileMode>755</fileMode>
<filtered>true</filtered>
</fileSet>
</fileSets>
<files>
<file>
<source>target${file.separator}${build.finalName}.${project.packaging}</source>
<outputDirectory>${file.separator}${artifactId}</outputDirectory>
</file>
</files>
</assembly>

83
pom.xml
View File

@ -12,35 +12,51 @@
<groupId>org.gcube.common</groupId>
<artifactId>keycloak-client</artifactId>
<version>2.2.0-SNAPSHOT</version>
<version>2.2.0</version>
<scm>
<connection>
scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}-jdk8.git</connection>
<developerConnection>
scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}-jdk8.git</developerConnection>
<url>https://code-repo.d4science.org/gCubeSystem/${project.artifactId}-jdk8</url>
</scm>
<developers>
<developer>
<name>Mauro Mugnaini</name>
<email>mauro.mugnaini@nubisware.com</email>
<organization>CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo"</organization>
<roles>
<role>architect</role>
<role>developer</role>
</roles>
</developer>
</developers>
<properties>
<!-- Java -->
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<jjwt.version>0.12.6</jjwt.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.gcube.distribution</groupId>
<artifactId>gcube-bom</artifactId>
<version>2.4.1-SNAPSHOT</version>
<version>2.4.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<scm>
<connection>
scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git</connection>
<developerConnection>
scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git</developerConnection>
<url>https://code-repo.d4science.org/gCubeSystem/${project.artifactId}</url>
</scm>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<jjwt.version>0.12.6</jjwt.version>
</properties>
<dependencies>
<dependency>
@ -129,4 +145,37 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>descriptor.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>servicearchive</id>
<phase>install</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

28
profile.xml Normal file
View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<Resource>
<ID></ID>
<Type>Library</Type>
<Profile>
<Description>${project.description}</Description>
<Class>Common</Class>
<Name>${project.name}</Name>
<Version>1.0.0</Version>
<Packages>
<Software>
<Name>${project.name}</Name>
<Description>${project.description}</Description>
<Version>${version}</Version>
<MavenCoordinates>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}</version>
</MavenCoordinates>
<Files>
<File>${project.build.finalName}.${project.packaging}</File>
</Files>
</Software>
</Packages>
</Profile>
</Resource>

View File

@ -16,6 +16,7 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.Ignore;
import org.junit.runners.MethodSorters;
import org.slf4j.Logger;
@ -62,6 +63,7 @@ public class TestKeycloakClient {
KeycloakClientFactory.setCustomBaseURL(null);
}
@Ignore
@Test
public void test00TokenEndpointConstruction() throws Exception {
logger.info(
@ -76,6 +78,7 @@ public class TestKeycloakClient {
Assert.assertEquals(devTokenURL.toString(), tokenURL.toString());
}
@Ignore
@Test
public void test01IntrospectionEndpointConstruction() throws Exception {
logger.info("*** [0.1] Start testing Keycloak introspection endpoint construction from base URL...");
@ -90,6 +93,7 @@ public class TestKeycloakClient {
logger.info("Constructed URL is: {}", introspectionURL);
}
@Ignore
@Test
public void test02IntrospectEndpointCompute() throws Exception {
logger.info("*** [0.2] Start testing Keycloak userinfo endpoint computed from provided URL string...");
@ -107,6 +111,7 @@ public class TestKeycloakClient {
Assert.assertEquals(devIntrospectionURL.toString(), computedIntrospectionURL.toString());
}
@Ignore
@Test
public void test03AvatarEndpointConstruction() throws Exception {
logger.info("*** [0.3] Start testing Keycloak avatar endpoint construction from base URL...");
@ -120,6 +125,7 @@ public class TestKeycloakClient {
Assert.assertEquals(devAvatarURL.toString(), avatarURL.toString());
}
@Ignore
@Test
public void test04CustomEndpointTest() throws Exception {
String customBase = "https://accounts.cloud.dev.d4science.org/auth/realms/";
@ -136,7 +142,8 @@ public class TestKeycloakClient {
Assert.assertEquals(customBaseURL.getProtocol(), "https");
Assert.assertEquals(customBase + KeycloakClient.DEFAULT_REALM + "/", customBaseURL.toString());
}
@Ignore
@Test
public void test10aQueryRealmInfo() throws Exception {
logger.info("*** [1.0a] Start testing query realm info...");
@ -147,6 +154,7 @@ public class TestKeycloakClient {
logger.info("*** [1.0a] Realm info public key: {}", realmInfo.getPublicKey());
}
@Ignore
@Test
public void test10bQueryRealmJWK() throws Exception {
logger.info("*** [1.0b] Start testing query realm JWK...");
@ -160,6 +168,7 @@ public class TestKeycloakClient {
}
}
@Ignore
@Test
public void test11TestAccessTokenJWTSignature() throws Exception {
logger.info("*** [1.0] Start testing access token JTW signature with model utils...");
@ -176,6 +185,7 @@ public class TestKeycloakClient {
ModelUtils.isValid(oidcTR.getAccessToken(), realmInfo.getPublicKey()));
}
@Ignore
@Test
public void test12QueryOIDCToken() throws Exception {
logger.info("*** [1.2] Start testing query OIDC token from Keycloak with context...");
@ -188,6 +198,7 @@ public class TestKeycloakClient {
TestModelUtils.checkAccessToken(ModelUtils.getAccessTokenFrom(oidcTR), "service-account-" + CLIENT_ID, false);
}
@Ignore
@Test
public void test12aQueryOIDCToken() throws Exception {
logger.info("*** [1.2a] Start testing query OIDC token from Keycloak with URL...");
@ -201,6 +212,7 @@ public class TestKeycloakClient {
TestModelUtils.checkAccessToken(ModelUtils.getAccessTokenFrom(oidcTR), "service-account-" + CLIENT_ID, false);
}
@Ignore
@Test
public void test13QueryOIDCTokenOfUser() throws Exception {
logger.info("*** [1.3] Start testing query OIDC token from Keycloak with context for user...");
@ -213,6 +225,7 @@ public class TestKeycloakClient {
TestModelUtils.checkAccessToken(ModelUtils.getAccessTokenFrom(oidcTR), TEST_USER_USERNAME, false);
}
@Ignore
@Test
public void test13aQueryOIDCTokenOfUserWithContext() throws Exception {
logger.info("*** [1.3a] Start testing query OIDC token for audience from Keycloak with context for user...");
@ -240,6 +253,7 @@ public class TestKeycloakClient {
TOKEN_RESTRICTION_VRE_CONTEXT.equals(ModelUtils.getAccessTokenFrom(oidcRestrictedTR).getAudience()[0]));
}
@Ignore
@Test
public void test13bQueryOIDCTokenAndUMAOfUser() throws Exception {
logger.info("*** [1.3b] Start testing query OIDC and UMA tokens from Keycloak with context for user...");
@ -261,6 +275,7 @@ public class TestKeycloakClient {
TestModelUtils.checkAccessToken(ModelUtils.getAccessTokenFrom(umaTR), TEST_USER_USERNAME, true);
}
@Ignore
@Test
public void test13cQueryOIDCTokenOfUserWithContextAndCustomHeader() throws Exception {
logger.info(
@ -279,6 +294,7 @@ public class TestKeycloakClient {
// the call, See the logs if the Header is present.
}
@Ignore
@Test
public void test14aQueryOIDCTokenWithDynamicScope() throws Exception {
logger.info(
@ -298,6 +314,7 @@ public class TestKeycloakClient {
// the call, See the logs if the Header is present.
}
@Ignore
@Test
public void test14bQueryOIDCTokenWithDynamicScopeWithFlagMode() throws Exception {
logger.info(
@ -317,6 +334,7 @@ public class TestKeycloakClient {
// the call, See the logs if the Header is present.
}
@Ignore
@Test
public void test15aQueryOIDCTokenForUserWithDynamicScope() throws Exception {
logger.info(
@ -338,6 +356,7 @@ public class TestKeycloakClient {
// the call, See the logs if the Header is present.
}
@Ignore
@Test
public void test15bQueryOIDCTokenForUserWithDynamicScopeWithFlagMode() throws Exception {
logger.info(
@ -359,6 +378,7 @@ public class TestKeycloakClient {
// the call, See the logs if the Header is present.
}
@Ignore
@Test
public void test16aQueryOIDCTokenForUserOnPublicClientWithDynamicScope() throws Exception {
logger.info(
@ -379,7 +399,8 @@ public class TestKeycloakClient {
// It is not possible to check programmatically if the header has been added to
// the call, See the logs if the Header is present.
}
@Ignore
@Test
public void test16bQueryOIDCTokenForUserOnPublicClientWithDynamicScopeWithFlagMode() throws Exception {
logger.info(
@ -400,7 +421,8 @@ public class TestKeycloakClient {
// It is not possible to check programmatically if the header has been added to
// the call, See the logs if the Header is present.
}
@Ignore
@Test
public void test24QueryUMAToken() throws Exception {
logger.info("*** [2.4] Start testing query UMA token from Keycloak with context...");
@ -414,6 +436,7 @@ public class TestKeycloakClient {
TestModelUtils.checkAccessToken(ModelUtils.getAccessTokenFrom(umaTR), "service-account-" + CLIENT_ID, true);
}
@Ignore
@Test
public void test24aQueryUMAToken() throws Exception {
logger.info("*** [2.4a] Start testing query UMA token from Keycloak with URL...");
@ -428,6 +451,7 @@ public class TestKeycloakClient {
TestModelUtils.checkAccessToken(ModelUtils.getAccessTokenFrom(umaTR), "service-account-" + CLIENT_ID, true);
}
@Ignore
@Test
public void test302IntrospectOIDCAccessToken() throws Exception {
logger.info("*** [3.2] Start testing introspect OIDC access token...");
@ -440,6 +464,7 @@ public class TestKeycloakClient {
TestModelUtils.checkTokenIntrospectionResponse(tir);
}
@Ignore
@Test
public void test302aIntrospectOIDCAccessToken() throws Exception {
logger.info("*** [3.2a] Start testing introspect OIDC access token...");
@ -453,6 +478,7 @@ public class TestKeycloakClient {
TestModelUtils.checkTokenIntrospectionResponse(tir);
}
@Ignore
@Test
public void test302bIntrospectOIDCAccessTokenFromDifferentServer() throws Exception {
logger.info("*** [3.2b] Start testing introspect OIDC access token with different base URLs...");
@ -469,6 +495,7 @@ public class TestKeycloakClient {
TestModelUtils.checkTokenIntrospectionResponse(tir, true);
}
@Ignore
@Test
public void test304IntrospectUMAAccessToken() throws Exception {
logger.info("*** [3.4] Start testing introspect UMA access token...");
@ -479,7 +506,8 @@ public class TestKeycloakClient {
TestModelUtils.checkTokenIntrospectionResponse(tir);
}
@Ignore
@Test
public void test304aIntrospectUMAAccessToken() throws Exception {
logger.info("*** [3.4a] Start testing introspect UMA access token...");
@ -492,6 +520,7 @@ public class TestKeycloakClient {
TestModelUtils.checkTokenIntrospectionResponse(tir);
}
@Ignore
@Test
public void test306OIDCAccessTokenVerification() throws Exception {
logger.info("*** [3.6] Start OIDC access token verification...");
@ -501,7 +530,8 @@ public class TestKeycloakClient {
Assert.assertTrue(
client.isAccessTokenVerified(ROOT_CONTEXT, CLIENT_ID, CLIENT_SECRET, oidcTR.getAccessToken()));
}
@Ignore
@Test
public void test306aOIDCAccessTokenVerification() throws Exception {
logger.info("*** [3.6a] Start OIDC access token verification...");
@ -513,13 +543,15 @@ public class TestKeycloakClient {
client.isAccessTokenVerified(introspectionURL, CLIENT_ID, CLIENT_SECRET, oidcTR.getAccessToken()));
}
@Ignore
@Test
public void test307OIDCAccessTokenNonVerification() throws Exception {
logger.info("*** [3.7] Start OIDC access token NON verification...");
Assert.assertFalse(KeycloakClientFactory.newInstance().isAccessTokenVerified(
ROOT_CONTEXT, CLIENT_ID, CLIENT_SECRET, OLD_OIDC_ACCESS_TOKEN));
}
@Ignore
@Test
public void test307aOIDCAccessTokenNonVerification() throws Exception {
logger.info("*** [3.7a] Start OIDC access token NON verification...");
@ -529,6 +561,7 @@ public class TestKeycloakClient {
client.isAccessTokenVerified(introspectionURL, CLIENT_ID, CLIENT_SECRET, OLD_OIDC_ACCESS_TOKEN));
}
@Ignore
@Test
public void test309UMAAccessTokenVerification() throws Exception {
logger.info("*** [3.9] Start UMA access token verification...");
@ -537,7 +570,8 @@ public class TestKeycloakClient {
Assert.assertTrue(
client.isAccessTokenVerified(ROOT_CONTEXT, CLIENT_ID, CLIENT_SECRET, umaTR.getAccessToken()));
}
@Ignore
@Test
public void test309aUMAAccessTokenVerification() throws Exception {
logger.info("*** [3.9a] Start UMA access token verification...");
@ -548,13 +582,15 @@ public class TestKeycloakClient {
client.isAccessTokenVerified(introspectionURL, CLIENT_ID, CLIENT_SECRET, umaTR.getAccessToken()));
}
@Ignore
@Test
public void test310UMAAccessTokenNonVerification() throws Exception {
logger.info("*** [3.10] Start UMA access token NON verification...");
Assert.assertFalse(KeycloakClientFactory.newInstance().isAccessTokenVerified(
ROOT_CONTEXT, CLIENT_ID, CLIENT_SECRET, OLD_UMA_ACCESS_TOKEN));
}
@Ignore
@Test
public void test310aUMAAccessTokenNonVerification() throws Exception {
logger.info("*** [3.10a] Start UMA access token NON verification...");
@ -564,6 +600,7 @@ public class TestKeycloakClient {
client.isAccessTokenVerified(introspectionURL, CLIENT_ID, CLIENT_SECRET, OLD_UMA_ACCESS_TOKEN));
}
@Ignore
@Test
public void test4GetTokenOfUserWithHelper() throws Exception {
logger.info("*** [4] Start testing query token from Keycloak for user...");
@ -576,7 +613,8 @@ public class TestKeycloakClient {
TestModelUtils.checkTokenResponse(tokenResponse);
TestModelUtils.checkAccessToken(ModelUtils.getAccessTokenFrom(tokenResponse), TEST_USER_USERNAME, true);
}
@Ignore
@Test
public void test51ExchangeToken4Access() throws Exception {
logger.info("*** [5.1] Start testing token exchange for access token from Keycloak...");
@ -596,7 +634,8 @@ public class TestKeycloakClient {
TestModelUtils.checkTokenIntrospectionResponse(client.introspectAccessToken(ROOT_CONTEXT, CLIENT_ID,
CLIENT_SECRET, exchangedTR.getAccessToken()));
}
@Ignore
@Test
public void test51aExchangeUMAToken4Access() throws Exception {
logger.info("*** [5.1a] Start testing UMA token exchange for access token from Keycloak...");
@ -621,6 +660,7 @@ public class TestKeycloakClient {
CLIENT_SECRET, exchangedTR.getAccessToken()));
}
@Ignore
@Test
public void test52ExchangeToken4refresh() throws Exception {
logger.info("*** [5.2] Start testing token exchange for refresh token from Keycloak...");
@ -641,6 +681,7 @@ public class TestKeycloakClient {
client.introspectAccessToken(ROOT_CONTEXT, CLIENT_ID, CLIENT_SECRET, exchangedTR.getAccessToken()));
}
@Ignore
@Test(expected = IllegalArgumentException.class)
public void test53ExchangeToken4Offline() throws Exception {
logger.info("*** [5.3] Start testing token exchange for offline token from Keycloak...");
@ -667,7 +708,8 @@ public class TestKeycloakClient {
// CLIENT_SECRET, exchangedTR.getAccessToken()));
}
@Ignore
@Test
public void test6GetAvatar() throws Exception {
logger.info("*** [6] Start testing get user's avatar...");

View File

@ -16,6 +16,7 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.Ignore;
import org.junit.runners.MethodSorters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -32,7 +33,8 @@ public class TestModelUtils {
@After
public void tearDown() throws Exception {
}
@Ignore
@Test
public void testTokenValidity() throws Exception {
logger.info("Start testing access token valdity...");
@ -48,7 +50,8 @@ public class TestModelUtils {
Assert.assertTrue("Token is valid", ModelUtils.isValid(tr.getAccessToken(), publicKey, false));
Assert.assertFalse("Token signature is valid", ModelUtils.isValid(tr.getAccessToken().replace("ZV9hY2Nlc3", "ZV9hY2Nlcc"), publicKey));
}
@Ignore
@Test
public void testTokenResponseForOIDC() throws Exception {
logger.info("Start testing OIDC token response object binding...");
@ -60,6 +63,7 @@ public class TestModelUtils {
}
@Ignore
@Test
public void testTokenResponseForUMA() throws Exception {
logger.info("Start testing UMA token response object binding...");
@ -70,6 +74,7 @@ public class TestModelUtils {
checkTokenResponse(tr);
}
@Ignore
@Test
public void testUMAAccessToken() throws Exception {
logger.info("Start testing access token object binding...");
@ -78,7 +83,8 @@ public class TestModelUtils {
checkAccessToken(at, null, true);
}
@Ignore
@Test
public void testRemoveBearerPrefixInHeader() throws Exception {
TokenResponse tr = new ObjectMapper().readValue(new File("src/test/resources/oidc-token-response.json"),
@ -95,6 +101,7 @@ public class TestModelUtils {
Assert.assertEquals(ModelUtils.toJSONString(at2), ModelUtils.toJSONString(at3));
}
@Ignore
@Test
public void testUMARefreshToken() throws Exception {
logger.info("Start testing refresh token object binding...");