Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0bb2ff9e8a |
No files matched your search
+1
-7
@@ -8,9 +8,7 @@
|
|||||||
.project
|
.project
|
||||||
.settings
|
.settings
|
||||||
.classpath
|
.classpath
|
||||||
# reverting this as e.g. /distribution/feature-packs/server-feature-pack/src/main/resources/content/bin/
|
bin/
|
||||||
# should not be ignored
|
|
||||||
#bin/
|
|
||||||
.factorypath
|
.factorypath
|
||||||
|
|
||||||
|
|
||||||
@@ -60,7 +58,3 @@ target
|
|||||||
# KEYCLOAK-5391: We will re-exclude node_modules when node_modules handling is worked out.
|
# KEYCLOAK-5391: We will re-exclude node_modules when node_modules handling is worked out.
|
||||||
# For now, we keep our js libraries checked into GitHub, so we don't ignore.
|
# For now, we keep our js libraries checked into GitHub, so we don't ignore.
|
||||||
#node_modules
|
#node_modules
|
||||||
|
|
||||||
# testsuite #
|
|
||||||
#############
|
|
||||||
*offline-token.txt
|
|
||||||
@@ -13,7 +13,6 @@ env:
|
|||||||
- TESTS=server-group2
|
- TESTS=server-group2
|
||||||
- TESTS=server-group3
|
- TESTS=server-group3
|
||||||
- TESTS=server-group4
|
- TESTS=server-group4
|
||||||
- TESTS=adapter-tests
|
|
||||||
- TESTS=old
|
- TESTS=old
|
||||||
- TESTS=crossdc-server
|
- TESTS=crossdc-server
|
||||||
- TESTS=crossdc-adapter
|
- TESTS=crossdc-adapter
|
||||||
|
|||||||
-54
@@ -1,54 +0,0 @@
|
|||||||
ADOPTERS
|
|
||||||
========
|
|
||||||
|
|
||||||
PUBLIC REFERENCES
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
List of organization names below is based on information collected using Keycloak Community Survey. It contains company names from participants who agreed to serve as public reference. If organizations would like get added or removed please make a PR.
|
|
||||||
|
|
||||||
* Accenture
|
|
||||||
* Actinver
|
|
||||||
* Akvo Foundation
|
|
||||||
* Appier
|
|
||||||
* BISPRO
|
|
||||||
* Bluestem Brands, Inc
|
|
||||||
* Bundesversicherungsamt
|
|
||||||
* Capgemini
|
|
||||||
* Chassi
|
|
||||||
* CloudNative Inc.
|
|
||||||
* Copenhagen Optimization
|
|
||||||
* Curecomp GmbH
|
|
||||||
* Cybertech
|
|
||||||
* Devsu
|
|
||||||
* Devoxx / Voxxed
|
|
||||||
* DUENE e.V - project
|
|
||||||
* DukeCon
|
|
||||||
* European Synchrotron Radiation Facility
|
|
||||||
* Fluance AG
|
|
||||||
* Hewlett-Packard Enterprise
|
|
||||||
* Hitachi
|
|
||||||
* INEAT
|
|
||||||
* Inventage
|
|
||||||
* ISAAC
|
|
||||||
* ITROI Solutions
|
|
||||||
* Kindly Ops, LLC
|
|
||||||
* msg systems ag
|
|
||||||
* Netdava International
|
|
||||||
* Ohio Supercomputer Center
|
|
||||||
* Okta
|
|
||||||
* PharmaPartners B.V.
|
|
||||||
* Plivo
|
|
||||||
* Price Insight
|
|
||||||
* Prodesan
|
|
||||||
* Quest Software
|
|
||||||
* Research Industrial Software Engineering (RISE)
|
|
||||||
* Sportsbet.com.au
|
|
||||||
* Stack Labs
|
|
||||||
* Storebrand
|
|
||||||
* Synekus
|
|
||||||
* Synetek Solutions
|
|
||||||
* Taklane
|
|
||||||
* TrackingSport
|
|
||||||
* TRT9 - Brasil
|
|
||||||
* UnitedHealthcare
|
|
||||||
* ...More individuals
|
|
||||||
@@ -44,7 +44,6 @@ To start Keycloak during development first build as specified above, then run:
|
|||||||
|
|
||||||
mvn -f testsuite/utils/pom.xml exec:java -Pkeycloak-server
|
mvn -f testsuite/utils/pom.xml exec:java -Pkeycloak-server
|
||||||
|
|
||||||
When running testsuite, by default an account with username `admin` and password `admin` will be created within the master realm at start.
|
|
||||||
|
|
||||||
To start Keycloak from the server distribution first build the distribution it as specified above, then run:
|
To start Keycloak from the server distribution first build the distribution it as specified above, then run:
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -31,9 +31,6 @@
|
|||||||
<description/>
|
<description/>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
org.keycloak.adapters.*
|
org.keycloak.adapters.*
|
||||||
</keycloak.osgi.export>
|
</keycloak.osgi.export>
|
||||||
@@ -64,6 +61,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -109,6 +107,15 @@
|
|||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
|||||||
-20
@@ -307,16 +307,6 @@ public class AdapterDeploymentContext {
|
|||||||
delegate.setTokenStore(tokenStore);
|
delegate.setTokenStore(tokenStore);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getAdapterStateCookiePath() {
|
|
||||||
return delegate.getAdapterStateCookiePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setAdapterStateCookiePath(String adapterStateCookiePath) {
|
|
||||||
delegate.setAdapterStateCookiePath(adapterStateCookiePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getStateCookieName() {
|
public String getStateCookieName() {
|
||||||
return delegate.getStateCookieName();
|
return delegate.getStateCookieName();
|
||||||
@@ -492,16 +482,6 @@ public class AdapterDeploymentContext {
|
|||||||
public void setPublicKeyCacheTtl(int publicKeyCacheTtl) {
|
public void setPublicKeyCacheTtl(int publicKeyCacheTtl) {
|
||||||
delegate.setPublicKeyCacheTtl(publicKeyCacheTtl);
|
delegate.setPublicKeyCacheTtl(publicKeyCacheTtl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isVerifyTokenAudience() {
|
|
||||||
return delegate.isVerifyTokenAudience();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setVerifyTokenAudience(boolean verifyTokenAudience) {
|
|
||||||
delegate.setVerifyTokenAudience(verifyTokenAudience);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected KeycloakUriBuilder getBaseBuilder(HttpFacade facade, String base) {
|
protected KeycloakUriBuilder getBaseBuilder(HttpFacade facade, String base) {
|
||||||
|
|||||||
-3
@@ -106,10 +106,7 @@ public class AuthenticatedActionsHandler {
|
|||||||
if (deployment.getPolicyEnforcer() != null) {
|
if (deployment.getPolicyEnforcer() != null) {
|
||||||
if (exposeHeaders != null) {
|
if (exposeHeaders != null) {
|
||||||
exposeHeaders += ",";
|
exposeHeaders += ",";
|
||||||
} else {
|
|
||||||
exposeHeaders = "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exposeHeaders += "WWW-Authenticate";
|
exposeHeaders += "WWW-Authenticate";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-8
@@ -18,7 +18,7 @@
|
|||||||
package org.keycloak.adapters;
|
package org.keycloak.adapters;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.adapters.rotation.AdapterTokenVerifier;
|
import org.keycloak.adapters.rotation.AdapterRSATokenVerifier;
|
||||||
import org.keycloak.adapters.spi.AuthChallenge;
|
import org.keycloak.adapters.spi.AuthChallenge;
|
||||||
import org.keycloak.adapters.spi.AuthOutcome;
|
import org.keycloak.adapters.spi.AuthOutcome;
|
||||||
import org.keycloak.adapters.spi.HttpFacade;
|
import org.keycloak.adapters.spi.HttpFacade;
|
||||||
@@ -72,12 +72,8 @@ public class BearerTokenRequestAuthenticator {
|
|||||||
for (String authHeader : authHeaders) {
|
for (String authHeader : authHeaders) {
|
||||||
String[] split = authHeader.trim().split("\\s+");
|
String[] split = authHeader.trim().split("\\s+");
|
||||||
if (split == null || split.length != 2) continue;
|
if (split == null || split.length != 2) continue;
|
||||||
if (split[0].equalsIgnoreCase("Bearer")) {
|
if (!split[0].equalsIgnoreCase("Bearer")) continue;
|
||||||
tokenString = split[1];
|
tokenString = split[1];
|
||||||
|
|
||||||
log.debugf("Found [%d] values in authorization header, selecting the first value for Bearer.", (Integer) authHeaders.size());
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tokenString == null) {
|
if (tokenString == null) {
|
||||||
@@ -100,7 +96,7 @@ public class BearerTokenRequestAuthenticator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
token = AdapterTokenVerifier.verifyToken(tokenString, deployment);
|
token = AdapterRSATokenVerifier.verifyToken(tokenString, deployment);
|
||||||
} catch (VerificationException e) {
|
} catch (VerificationException e) {
|
||||||
log.error("Failed to verify token", e);
|
log.error("Failed to verify token", e);
|
||||||
challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.INVALID_TOKEN, "invalid_token", e.getMessage());
|
challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.INVALID_TOKEN, "invalid_token", e.getMessage());
|
||||||
|
|||||||
+6
-27
@@ -19,8 +19,7 @@ package org.keycloak.adapters;
|
|||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.KeycloakPrincipal;
|
import org.keycloak.KeycloakPrincipal;
|
||||||
import org.keycloak.TokenVerifier;
|
import org.keycloak.adapters.rotation.AdapterRSATokenVerifier;
|
||||||
import org.keycloak.adapters.rotation.AdapterTokenVerifier;
|
|
||||||
import org.keycloak.adapters.spi.HttpFacade;
|
import org.keycloak.adapters.spi.HttpFacade;
|
||||||
import org.keycloak.common.VerificationException;
|
import org.keycloak.common.VerificationException;
|
||||||
import org.keycloak.common.util.KeycloakUriBuilder;
|
import org.keycloak.common.util.KeycloakUriBuilder;
|
||||||
@@ -47,7 +46,7 @@ public class CookieTokenStore {
|
|||||||
.append(idToken).append(DELIM)
|
.append(idToken).append(DELIM)
|
||||||
.append(refreshToken).toString();
|
.append(refreshToken).toString();
|
||||||
|
|
||||||
String cookiePath = getCookiePath(deployment, facade);
|
String cookiePath = getContextPath(facade);
|
||||||
facade.getResponse().setCookie(AdapterConstants.KEYCLOAK_ADAPTER_STATE_COOKIE, cookie, cookiePath, null, -1, deployment.getSslRequired().isRequired(facade.getRequest().getRemoteAddr()), true);
|
facade.getResponse().setCookie(AdapterConstants.KEYCLOAK_ADAPTER_STATE_COOKIE, cookie, cookiePath, null, -1, deployment.getSslRequired().isRequired(facade.getRequest().getRemoteAddr()), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,11 +71,7 @@ public class CookieTokenStore {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// Skip check if token is active now. It's supposed to be done later by the caller
|
// Skip check if token is active now. It's supposed to be done later by the caller
|
||||||
TokenVerifier<AccessToken> tokenVerifier = AdapterTokenVerifier.createVerifier(accessTokenString, deployment, true, AccessToken.class)
|
AccessToken accessToken = AdapterRSATokenVerifier.verifyToken(accessTokenString, deployment, false, true);
|
||||||
.checkActive(false)
|
|
||||||
.verify();
|
|
||||||
AccessToken accessToken = tokenVerifier.getToken();
|
|
||||||
|
|
||||||
IDToken idToken;
|
IDToken idToken;
|
||||||
if (idTokenString != null && idTokenString.length() > 0) {
|
if (idTokenString != null && idTokenString.length() > 0) {
|
||||||
try {
|
try {
|
||||||
@@ -98,30 +93,14 @@ public class CookieTokenStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void removeCookie(KeycloakDeployment deployment, HttpFacade facade) {
|
public static void removeCookie(HttpFacade facade) {
|
||||||
String cookiePath = getCookiePath(deployment, facade);
|
String cookiePath = getContextPath(facade);
|
||||||
facade.getResponse().resetCookie(AdapterConstants.KEYCLOAK_ADAPTER_STATE_COOKIE, cookiePath);
|
facade.getResponse().resetCookie(AdapterConstants.KEYCLOAK_ADAPTER_STATE_COOKIE, cookiePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
static String getCookiePath(KeycloakDeployment deployment, HttpFacade facade) {
|
private static String getContextPath(HttpFacade facade) {
|
||||||
String path = deployment.getAdapterStateCookiePath() == null ? "" : deployment.getAdapterStateCookiePath().trim();
|
|
||||||
if (path.startsWith("/")) {
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
String contextPath = getContextPath(facade);
|
|
||||||
StringBuilder cookiePath = new StringBuilder(contextPath);
|
|
||||||
if (!contextPath.endsWith("/") && !path.isEmpty()) {
|
|
||||||
cookiePath.append("/");
|
|
||||||
}
|
|
||||||
return cookiePath.append(path).toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
static String getContextPath(HttpFacade facade) {
|
|
||||||
String uri = facade.getRequest().getURI();
|
String uri = facade.getRequest().getURI();
|
||||||
String path = KeycloakUriBuilder.fromUri(uri).getPath();
|
String path = KeycloakUriBuilder.fromUri(uri).getPath();
|
||||||
if (path == null || path.isEmpty()) {
|
|
||||||
return "/";
|
|
||||||
}
|
|
||||||
int index = path.indexOf("/", 1);
|
int index = path.indexOf("/", 1);
|
||||||
return index == -1 ? path : path.substring(0, index);
|
return index == -1 ? path : path.substring(0, index);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-19
@@ -70,7 +70,6 @@ public class KeycloakDeployment {
|
|||||||
protected SslRequired sslRequired = SslRequired.ALL;
|
protected SslRequired sslRequired = SslRequired.ALL;
|
||||||
protected int confidentialPort = -1;
|
protected int confidentialPort = -1;
|
||||||
protected TokenStore tokenStore = TokenStore.SESSION;
|
protected TokenStore tokenStore = TokenStore.SESSION;
|
||||||
protected String adapterStateCookiePath = "";
|
|
||||||
protected String stateCookieName = "OAuth_Token_Request_State";
|
protected String stateCookieName = "OAuth_Token_Request_State";
|
||||||
protected boolean useResourceRoleMappings;
|
protected boolean useResourceRoleMappings;
|
||||||
protected boolean cors;
|
protected boolean cors;
|
||||||
@@ -93,11 +92,10 @@ public class KeycloakDeployment {
|
|||||||
// https://tools.ietf.org/html/rfc7636
|
// https://tools.ietf.org/html/rfc7636
|
||||||
protected boolean pkce = false;
|
protected boolean pkce = false;
|
||||||
protected boolean ignoreOAuthQueryParameter;
|
protected boolean ignoreOAuthQueryParameter;
|
||||||
|
|
||||||
protected Map<String, String> redirectRewriteRules;
|
protected Map<String, String> redirectRewriteRules;
|
||||||
|
|
||||||
protected boolean delegateBearerErrorResponseSending = false;
|
protected boolean delegateBearerErrorResponseSending = false;
|
||||||
protected boolean verifyTokenAudience = false;
|
|
||||||
|
|
||||||
public KeycloakDeployment() {
|
public KeycloakDeployment() {
|
||||||
}
|
}
|
||||||
@@ -298,14 +296,6 @@ public class KeycloakDeployment {
|
|||||||
this.tokenStore = tokenStore;
|
this.tokenStore = tokenStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAdapterStateCookiePath() {
|
|
||||||
return adapterStateCookiePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAdapterStateCookiePath(String adapterStateCookiePath) {
|
|
||||||
this.adapterStateCookiePath = adapterStateCookiePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getStateCookieName() {
|
public String getStateCookieName() {
|
||||||
return stateCookieName;
|
return stateCookieName;
|
||||||
}
|
}
|
||||||
@@ -487,12 +477,4 @@ public class KeycloakDeployment {
|
|||||||
public void setDelegateBearerErrorResponseSending(boolean delegateBearerErrorResponseSending) {
|
public void setDelegateBearerErrorResponseSending(boolean delegateBearerErrorResponseSending) {
|
||||||
this.delegateBearerErrorResponseSending = delegateBearerErrorResponseSending;
|
this.delegateBearerErrorResponseSending = delegateBearerErrorResponseSending;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isVerifyTokenAudience() {
|
|
||||||
return verifyTokenAudience;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVerifyTokenAudience(boolean verifyTokenAudience) {
|
|
||||||
this.verifyTokenAudience = verifyTokenAudience;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
-4
@@ -88,9 +88,6 @@ public class KeycloakDeploymentBuilder {
|
|||||||
} else {
|
} else {
|
||||||
deployment.setTokenStore(TokenStore.SESSION);
|
deployment.setTokenStore(TokenStore.SESSION);
|
||||||
}
|
}
|
||||||
if (adapterConfig.getTokenCookiePath() != null) {
|
|
||||||
deployment.setAdapterStateCookiePath(adapterConfig.getTokenCookiePath());
|
|
||||||
}
|
|
||||||
if (adapterConfig.getPrincipalAttribute() != null) deployment.setPrincipalAttribute(adapterConfig.getPrincipalAttribute());
|
if (adapterConfig.getPrincipalAttribute() != null) deployment.setPrincipalAttribute(adapterConfig.getPrincipalAttribute());
|
||||||
|
|
||||||
deployment.setResourceCredentials(adapterConfig.getCredentials());
|
deployment.setResourceCredentials(adapterConfig.getCredentials());
|
||||||
@@ -125,7 +122,6 @@ public class KeycloakDeploymentBuilder {
|
|||||||
deployment.setPublicKeyCacheTtl(adapterConfig.getPublicKeyCacheTtl());
|
deployment.setPublicKeyCacheTtl(adapterConfig.getPublicKeyCacheTtl());
|
||||||
deployment.setIgnoreOAuthQueryParameter(adapterConfig.isIgnoreOAuthQueryParameter());
|
deployment.setIgnoreOAuthQueryParameter(adapterConfig.isIgnoreOAuthQueryParameter());
|
||||||
deployment.setRewriteRedirectRules(adapterConfig.getRedirectRewriteRules());
|
deployment.setRewriteRedirectRules(adapterConfig.getRedirectRewriteRules());
|
||||||
deployment.setVerifyTokenAudience(adapterConfig.isVerifyTokenAudience());
|
|
||||||
|
|
||||||
if (realmKeyPem == null && adapterConfig.isBearerOnly() && adapterConfig.getAuthServerUrl() == null) {
|
if (realmKeyPem == null && adapterConfig.isBearerOnly() && adapterConfig.getAuthServerUrl() == null) {
|
||||||
throw new IllegalArgumentException("For bearer auth, you must set the realm-public-key or auth-server-url");
|
throw new IllegalArgumentException("For bearer auth, you must set the realm-public-key or auth-server-url");
|
||||||
|
|||||||
+11
-4
@@ -19,7 +19,7 @@ package org.keycloak.adapters;
|
|||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.OAuth2Constants;
|
import org.keycloak.OAuth2Constants;
|
||||||
import org.keycloak.adapters.rotation.AdapterTokenVerifier;
|
import org.keycloak.adapters.rotation.AdapterRSATokenVerifier;
|
||||||
import org.keycloak.adapters.spi.AdapterSessionStore;
|
import org.keycloak.adapters.spi.AdapterSessionStore;
|
||||||
import org.keycloak.adapters.spi.AuthChallenge;
|
import org.keycloak.adapters.spi.AuthChallenge;
|
||||||
import org.keycloak.adapters.spi.AuthOutcome;
|
import org.keycloak.adapters.spi.AuthOutcome;
|
||||||
@@ -40,6 +40,7 @@ import java.io.IOException;
|
|||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -358,9 +359,15 @@ public class OAuthRequestAuthenticator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
AdapterTokenVerifier.VerifiedTokens tokens = AdapterTokenVerifier.verifyTokens(tokenString, idTokenString, deployment);
|
token = AdapterRSATokenVerifier.verifyToken(tokenString, deployment);
|
||||||
token = tokens.getAccessToken();
|
if (idTokenString != null) {
|
||||||
idToken = tokens.getIdToken();
|
try {
|
||||||
|
JWSInput input = new JWSInput(idTokenString);
|
||||||
|
idToken = input.readJsonContent(IDToken.class);
|
||||||
|
} catch (JWSInputException e) {
|
||||||
|
throw new VerificationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
log.debug("Token Verification succeeded!");
|
log.debug("Token Verification succeeded!");
|
||||||
} catch (VerificationException e) {
|
} catch (VerificationException e) {
|
||||||
log.error("failed verification of token: " + e.getMessage());
|
log.error("failed verification of token: " + e.getMessage());
|
||||||
|
|||||||
+16
-24
@@ -20,27 +20,30 @@ package org.keycloak.adapters;
|
|||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.TokenVerifier;
|
|
||||||
import org.keycloak.adapters.authentication.ClientCredentialsProvider;
|
import org.keycloak.adapters.authentication.ClientCredentialsProvider;
|
||||||
import org.keycloak.adapters.authentication.JWTClientCredentialsProvider;
|
import org.keycloak.adapters.authentication.JWTClientCredentialsProvider;
|
||||||
import org.keycloak.adapters.rotation.AdapterTokenVerifier;
|
import org.keycloak.adapters.rotation.AdapterRSATokenVerifier;
|
||||||
import org.keycloak.adapters.spi.HttpFacade;
|
import org.keycloak.adapters.spi.HttpFacade;
|
||||||
import org.keycloak.adapters.spi.UserSessionManagement;
|
import org.keycloak.adapters.spi.UserSessionManagement;
|
||||||
import org.keycloak.common.VerificationException;
|
|
||||||
import org.keycloak.common.util.StreamUtil;
|
import org.keycloak.common.util.StreamUtil;
|
||||||
import org.keycloak.jose.jwk.JSONWebKeySet;
|
import org.keycloak.jose.jwk.JSONWebKeySet;
|
||||||
import org.keycloak.jose.jwk.JWK;
|
import org.keycloak.jose.jwk.JWK;
|
||||||
import org.keycloak.jose.jwk.JWKBuilder;
|
import org.keycloak.jose.jwk.JWKBuilder;
|
||||||
import org.keycloak.representations.JsonWebToken;
|
import org.keycloak.jose.jws.JWSInputException;
|
||||||
import org.keycloak.representations.VersionRepresentation;
|
import org.keycloak.representations.VersionRepresentation;
|
||||||
import org.keycloak.constants.AdapterConstants;
|
import org.keycloak.constants.AdapterConstants;
|
||||||
import org.keycloak.jose.jws.JWSInput;
|
import org.keycloak.jose.jws.JWSInput;
|
||||||
|
import org.keycloak.jose.jws.JWSInputException;
|
||||||
|
import org.keycloak.jose.jws.crypto.RSAProvider;
|
||||||
|
import org.keycloak.representations.VersionRepresentation;
|
||||||
import org.keycloak.representations.adapters.action.AdminAction;
|
import org.keycloak.representations.adapters.action.AdminAction;
|
||||||
import org.keycloak.representations.adapters.action.LogoutAction;
|
import org.keycloak.representations.adapters.action.LogoutAction;
|
||||||
import org.keycloak.representations.adapters.action.PushNotBeforeAction;
|
import org.keycloak.representations.adapters.action.PushNotBeforeAction;
|
||||||
import org.keycloak.representations.adapters.action.TestAvailabilityAction;
|
import org.keycloak.representations.adapters.action.TestAvailabilityAction;
|
||||||
import org.keycloak.util.JsonSerialization;
|
import org.keycloak.util.JsonSerialization;
|
||||||
|
|
||||||
|
import java.security.PublicKey;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
||||||
* @version $Revision: 1 $
|
* @version $Revision: 1 $
|
||||||
@@ -210,19 +213,17 @@ public class PreAuthActionsHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Check just signature. Other things checked in validateAction
|
JWSInput input = new JWSInput(token);
|
||||||
TokenVerifier tokenVerifier = AdapterTokenVerifier.createVerifier(token, deployment, false, JsonWebToken.class);
|
PublicKey publicKey = AdapterRSATokenVerifier.getPublicKey(input.getHeader().getKeyId(), deployment);
|
||||||
tokenVerifier.verify();
|
if (RSAProvider.verify(input, publicKey)) {
|
||||||
return new JWSInput(token);
|
return input;
|
||||||
} catch (VerificationException ignore) {
|
|
||||||
log.warn("admin request failed, unable to verify token: " + ignore.getMessage());
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug(ignore.getMessage(), ignore);
|
|
||||||
}
|
}
|
||||||
|
} catch (JWSInputException ignore) {
|
||||||
facade.getResponse().sendError(403, "token failed verification");
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.warn("admin request failed, unable to verify token");
|
||||||
|
facade.getResponse().sendError(403, "no token");
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -249,15 +250,6 @@ public class PreAuthActionsHandler {
|
|||||||
protected void handleVersion() {
|
protected void handleVersion() {
|
||||||
try {
|
try {
|
||||||
facade.getResponse().setStatus(200);
|
facade.getResponse().setStatus(200);
|
||||||
KeycloakDeployment deployment = deploymentContext.resolveDeployment(facade);
|
|
||||||
if (deployment.isCors()) {
|
|
||||||
String origin = facade.getRequest().getHeader(CorsHeaders.ORIGIN);
|
|
||||||
if (origin == null) {
|
|
||||||
log.debug("no origin header set in request");
|
|
||||||
} else {
|
|
||||||
facade.getResponse().setHeader(CorsHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, origin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
facade.getResponse().setHeader("Content-Type", "application/json");
|
facade.getResponse().setHeader("Content-Type", "application/json");
|
||||||
JsonSerialization.writeValueToStream(facade.getResponse().getOutputStream(), VersionRepresentation.SINGLETON);
|
JsonSerialization.writeValueToStream(facade.getResponse().getOutputStream(), VersionRepresentation.SINGLETON);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
+2
-3
@@ -20,7 +20,7 @@ package org.keycloak.adapters;
|
|||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.AuthorizationContext;
|
import org.keycloak.AuthorizationContext;
|
||||||
import org.keycloak.KeycloakSecurityContext;
|
import org.keycloak.KeycloakSecurityContext;
|
||||||
import org.keycloak.adapters.rotation.AdapterTokenVerifier;
|
import org.keycloak.adapters.rotation.AdapterRSATokenVerifier;
|
||||||
import org.keycloak.common.VerificationException;
|
import org.keycloak.common.VerificationException;
|
||||||
import org.keycloak.common.util.Time;
|
import org.keycloak.common.util.Time;
|
||||||
import org.keycloak.representations.AccessToken;
|
import org.keycloak.representations.AccessToken;
|
||||||
@@ -130,8 +130,7 @@ public class RefreshableKeycloakSecurityContext extends KeycloakSecurityContext
|
|||||||
String tokenString = response.getToken();
|
String tokenString = response.getToken();
|
||||||
AccessToken token = null;
|
AccessToken token = null;
|
||||||
try {
|
try {
|
||||||
AdapterTokenVerifier.VerifiedTokens tokens = AdapterTokenVerifier.verifyTokens(tokenString, response.getIdToken(), deployment);
|
token = AdapterRSATokenVerifier.verifyToken(tokenString, deployment);
|
||||||
token = tokens.getAccessToken();
|
|
||||||
log.debug("Token Verification succeeded!");
|
log.debug("Token Verification succeeded!");
|
||||||
} catch (VerificationException e) {
|
} catch (VerificationException e) {
|
||||||
log.error("failed verification of token");
|
log.error("failed verification of token");
|
||||||
|
|||||||
+11
-17
@@ -17,7 +17,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.keycloak.adapters.authorization;
|
package org.keycloak.adapters.authorization;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -113,9 +112,8 @@ public abstract class AbstractPolicyEnforcer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MethodConfig methodConfig = getRequiredScopes(pathConfig, request);
|
MethodConfig methodConfig = getRequiredScopes(pathConfig, request);
|
||||||
Map<String, List<String>> claims = resolveClaims(pathConfig, httpFacade);
|
|
||||||
|
|
||||||
if (isAuthorized(pathConfig, methodConfig, accessToken, httpFacade, claims)) {
|
if (isAuthorized(pathConfig, methodConfig, accessToken, httpFacade)) {
|
||||||
try {
|
try {
|
||||||
return createAuthorizationContext(accessToken, pathConfig);
|
return createAuthorizationContext(accessToken, pathConfig);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -144,7 +142,7 @@ public abstract class AbstractPolicyEnforcer {
|
|||||||
|
|
||||||
protected abstract boolean challenge(PathConfig pathConfig, MethodConfig methodConfig, OIDCHttpFacade facade);
|
protected abstract boolean challenge(PathConfig pathConfig, MethodConfig methodConfig, OIDCHttpFacade facade);
|
||||||
|
|
||||||
protected boolean isAuthorized(PathConfig actualPathConfig, MethodConfig methodConfig, AccessToken accessToken, OIDCHttpFacade httpFacade, Map<String, List<String>> claims) {
|
protected boolean isAuthorized(PathConfig actualPathConfig, MethodConfig methodConfig, AccessToken accessToken, OIDCHttpFacade httpFacade) {
|
||||||
Request request = httpFacade.getRequest();
|
Request request = httpFacade.getRequest();
|
||||||
|
|
||||||
if (isDefaultAccessDeniedUri(request)) {
|
if (isDefaultAccessDeniedUri(request)) {
|
||||||
@@ -177,7 +175,7 @@ public abstract class AbstractPolicyEnforcer {
|
|||||||
policyEnforcer.getPathMatcher().removeFromCache(getPath(request));
|
policyEnforcer.getPathMatcher().removeFromCache(getPath(request));
|
||||||
}
|
}
|
||||||
|
|
||||||
return hasValidClaims(permission, claims);
|
return hasValidClaims(actualPathConfig, permission, httpFacade, authorization);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -199,10 +197,12 @@ public abstract class AbstractPolicyEnforcer {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasValidClaims(Permission permission, Map<String, List<String>> claims) {
|
private boolean hasValidClaims(PathConfig actualPathConfig, Permission permission, OIDCHttpFacade httpFacade, Authorization authorization) {
|
||||||
Map<String, Set<String>> grantedClaims = permission.getClaims();
|
Map<String, Set<String>> grantedClaims = permission.getClaims();
|
||||||
|
|
||||||
if (grantedClaims != null) {
|
if (grantedClaims != null) {
|
||||||
|
Map<String, List<String>> claims = resolveClaims(actualPathConfig, httpFacade);
|
||||||
|
|
||||||
if (claims.isEmpty()) {
|
if (claims.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -310,15 +310,7 @@ public abstract class AbstractPolicyEnforcer {
|
|||||||
MethodConfig methodConfig = new MethodConfig();
|
MethodConfig methodConfig = new MethodConfig();
|
||||||
|
|
||||||
methodConfig.setMethod(request.getMethod());
|
methodConfig.setMethod(request.getMethod());
|
||||||
List scopes = new ArrayList<>();
|
methodConfig.setScopes(pathConfig.getScopes());
|
||||||
|
|
||||||
if (Boolean.TRUE.equals(getEnforcerConfig().getHttpMethodAsScope())) {
|
|
||||||
scopes.add(request.getMethod());
|
|
||||||
} else {
|
|
||||||
scopes.addAll(pathConfig.getScopes());
|
|
||||||
}
|
|
||||||
|
|
||||||
methodConfig.setScopes(scopes);
|
|
||||||
methodConfig.setScopesEnforcementMode(PolicyEnforcerConfig.ScopeEnforcementMode.ANY);
|
methodConfig.setScopesEnforcementMode(PolicyEnforcerConfig.ScopeEnforcementMode.ANY);
|
||||||
|
|
||||||
return methodConfig;
|
return methodConfig;
|
||||||
@@ -357,16 +349,18 @@ public abstract class AbstractPolicyEnforcer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, List<String>> getClaims(Map<String, Map<String, Object>>claimInformationPointConfig, HttpFacade httpFacade) {
|
private Map<String, List<String>> getClaims(Map<String, Map<String, Object>>claimInformationPointConfig, HttpFacade httpFacade) {
|
||||||
|
Map<String, List<String>> claims = new HashMap<>();
|
||||||
|
|
||||||
if (claimInformationPointConfig != null) {
|
if (claimInformationPointConfig != null) {
|
||||||
for (Entry<String, Map<String, Object>> claimDef : claimInformationPointConfig.entrySet()) {
|
for (Entry<String, Map<String, Object>> claimDef : claimInformationPointConfig.entrySet()) {
|
||||||
ClaimInformationPointProviderFactory factory = getPolicyEnforcer().getClaimInformationPointProviderFactories().get(claimDef.getKey());
|
ClaimInformationPointProviderFactory factory = getPolicyEnforcer().getClaimInformationPointProviderFactories().get(claimDef.getKey());
|
||||||
|
|
||||||
if (factory != null) {
|
if (factory != null) {
|
||||||
return factory.create(claimDef.getValue()).resolve(httpFacade);
|
claims.putAll(factory.create(claimDef.getValue()).resolve(httpFacade));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HashMap<>();
|
return claims;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+9
-7
@@ -27,7 +27,7 @@ import org.jboss.logging.Logger;
|
|||||||
import org.keycloak.KeycloakSecurityContext;
|
import org.keycloak.KeycloakSecurityContext;
|
||||||
import org.keycloak.adapters.KeycloakDeployment;
|
import org.keycloak.adapters.KeycloakDeployment;
|
||||||
import org.keycloak.adapters.OIDCHttpFacade;
|
import org.keycloak.adapters.OIDCHttpFacade;
|
||||||
import org.keycloak.adapters.rotation.AdapterTokenVerifier;
|
import org.keycloak.adapters.rotation.AdapterRSATokenVerifier;
|
||||||
import org.keycloak.adapters.spi.HttpFacade;
|
import org.keycloak.adapters.spi.HttpFacade;
|
||||||
import org.keycloak.authorization.client.AuthorizationDeniedException;
|
import org.keycloak.authorization.client.AuthorizationDeniedException;
|
||||||
import org.keycloak.authorization.client.AuthzClient;
|
import org.keycloak.authorization.client.AuthzClient;
|
||||||
@@ -55,14 +55,14 @@ public class KeycloakAdapterPolicyEnforcer extends AbstractPolicyEnforcer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isAuthorized(PathConfig pathConfig, PolicyEnforcerConfig.MethodConfig methodConfig, AccessToken accessToken, OIDCHttpFacade httpFacade, Map<String, List<String>> claims) {
|
protected boolean isAuthorized(PathConfig pathConfig, PolicyEnforcerConfig.MethodConfig methodConfig, AccessToken accessToken, OIDCHttpFacade httpFacade) {
|
||||||
AccessToken original = accessToken;
|
AccessToken original = accessToken;
|
||||||
|
|
||||||
if (super.isAuthorized(pathConfig, methodConfig, accessToken, httpFacade, claims)) {
|
if (super.isAuthorized(pathConfig, methodConfig, accessToken, httpFacade)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
accessToken = requestAuthorizationToken(pathConfig, methodConfig, httpFacade, claims);
|
accessToken = requestAuthorizationToken(pathConfig, methodConfig, httpFacade);
|
||||||
|
|
||||||
if (accessToken == null) {
|
if (accessToken == null) {
|
||||||
return false;
|
return false;
|
||||||
@@ -90,7 +90,7 @@ public class KeycloakAdapterPolicyEnforcer extends AbstractPolicyEnforcer {
|
|||||||
|
|
||||||
original.setAuthorization(authorization);
|
original.setAuthorization(authorization);
|
||||||
|
|
||||||
return super.isAuthorized(pathConfig, methodConfig, accessToken, httpFacade, claims);
|
return super.isAuthorized(pathConfig, methodConfig, accessToken, httpFacade);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -133,7 +133,7 @@ public class KeycloakAdapterPolicyEnforcer extends AbstractPolicyEnforcer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private AccessToken requestAuthorizationToken(PathConfig pathConfig, PolicyEnforcerConfig.MethodConfig methodConfig, OIDCHttpFacade httpFacade, Map<String, List<String>> claims) {
|
private AccessToken requestAuthorizationToken(PathConfig pathConfig, PolicyEnforcerConfig.MethodConfig methodConfig, OIDCHttpFacade httpFacade) {
|
||||||
if (getEnforcerConfig().getUserManagedAccess() != null) {
|
if (getEnforcerConfig().getUserManagedAccess() != null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -149,6 +149,8 @@ public class KeycloakAdapterPolicyEnforcer extends AbstractPolicyEnforcer {
|
|||||||
authzRequest.addPermission(pathConfig.getId(), methodConfig.getScopes());
|
authzRequest.addPermission(pathConfig.getId(), methodConfig.getScopes());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map<String, List<String>> claims = resolveClaims(pathConfig, httpFacade);
|
||||||
|
|
||||||
if (!claims.isEmpty()) {
|
if (!claims.isEmpty()) {
|
||||||
authzRequest.setClaimTokenFormat("urn:ietf:params:oauth:token-type:jwt");
|
authzRequest.setClaimTokenFormat("urn:ietf:params:oauth:token-type:jwt");
|
||||||
authzRequest.setClaimToken(Base64.encodeBytes(JsonSerialization.writeValueAsBytes(claims)));
|
authzRequest.setClaimToken(Base64.encodeBytes(JsonSerialization.writeValueAsBytes(claims)));
|
||||||
@@ -169,7 +171,7 @@ public class KeycloakAdapterPolicyEnforcer extends AbstractPolicyEnforcer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (authzResponse != null) {
|
if (authzResponse != null) {
|
||||||
return AdapterTokenVerifier.verifyToken(authzResponse.getToken(), deployment);
|
return AdapterRSATokenVerifier.verifyToken(authzResponse.getToken(), deployment);
|
||||||
}
|
}
|
||||||
} catch (AuthorizationDeniedException ignore) {
|
} catch (AuthorizationDeniedException ignore) {
|
||||||
LOGGER.debug("Authorization denied", ignore);
|
LOGGER.debug("Authorization denied", ignore);
|
||||||
|
|||||||
+2
-10
@@ -23,7 +23,7 @@ import org.keycloak.adapters.AdapterUtils;
|
|||||||
import org.keycloak.adapters.KeycloakDeployment;
|
import org.keycloak.adapters.KeycloakDeployment;
|
||||||
import org.keycloak.adapters.KeycloakDeploymentBuilder;
|
import org.keycloak.adapters.KeycloakDeploymentBuilder;
|
||||||
import org.keycloak.adapters.RefreshableKeycloakSecurityContext;
|
import org.keycloak.adapters.RefreshableKeycloakSecurityContext;
|
||||||
import org.keycloak.adapters.rotation.AdapterTokenVerifier;
|
import org.keycloak.adapters.rotation.AdapterRSATokenVerifier;
|
||||||
import org.keycloak.common.VerificationException;
|
import org.keycloak.common.VerificationException;
|
||||||
import org.keycloak.common.util.FindFile;
|
import org.keycloak.common.util.FindFile;
|
||||||
import org.keycloak.common.util.reflections.Reflections;
|
import org.keycloak.common.util.reflections.Reflections;
|
||||||
@@ -202,16 +202,8 @@ public abstract class AbstractKeycloakLoginModule implements LoginModule {
|
|||||||
|
|
||||||
|
|
||||||
protected Auth bearerAuth(String tokenString) throws VerificationException {
|
protected Auth bearerAuth(String tokenString) throws VerificationException {
|
||||||
AccessToken token = AdapterTokenVerifier.verifyToken(tokenString, deployment);
|
AccessToken token = AdapterRSATokenVerifier.verifyToken(tokenString, deployment);
|
||||||
return postTokenVerification(tokenString, token);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called after accessToken was verified (including signature, expiration etc)
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
protected Auth postTokenVerification(String tokenString, AccessToken token) {
|
|
||||||
boolean verifyCaller;
|
boolean verifyCaller;
|
||||||
if (deployment.isUseResourceRoleMappings()) {
|
if (deployment.isUseResourceRoleMappings()) {
|
||||||
verifyCaller = token.isVerifyCaller(deployment.getResourceName());
|
verifyCaller = token.isVerifyCaller(deployment.getResourceName());
|
||||||
|
|||||||
+1
-11
@@ -27,7 +27,6 @@ import org.apache.http.message.BasicNameValuePair;
|
|||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.OAuth2Constants;
|
import org.keycloak.OAuth2Constants;
|
||||||
import org.keycloak.adapters.authentication.ClientCredentialsProviderUtils;
|
import org.keycloak.adapters.authentication.ClientCredentialsProviderUtils;
|
||||||
import org.keycloak.adapters.rotation.AdapterTokenVerifier;
|
|
||||||
import org.keycloak.common.VerificationException;
|
import org.keycloak.common.VerificationException;
|
||||||
import org.keycloak.common.util.KeycloakUriBuilder;
|
import org.keycloak.common.util.KeycloakUriBuilder;
|
||||||
import org.keycloak.constants.ServiceUrlConstants;
|
import org.keycloak.constants.ServiceUrlConstants;
|
||||||
@@ -57,15 +56,11 @@ public class DirectAccessGrantsLoginModule extends AbstractKeycloakLoginModule {
|
|||||||
|
|
||||||
private static final Logger log = Logger.getLogger(DirectAccessGrantsLoginModule.class);
|
private static final Logger log = Logger.getLogger(DirectAccessGrantsLoginModule.class);
|
||||||
|
|
||||||
public static final String SCOPE_OPTION = "scope";
|
|
||||||
|
|
||||||
private String refreshToken;
|
private String refreshToken;
|
||||||
private String scope;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) {
|
public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) {
|
||||||
super.initialize(subject, callbackHandler, sharedState, options);
|
super.initialize(subject, callbackHandler, sharedState, options);
|
||||||
this.scope = (String)options.get(SCOPE_OPTION);
|
|
||||||
|
|
||||||
// This is used just for logout
|
// This is used just for logout
|
||||||
Iterator<RefreshTokenHolder> iterator = subject.getPrivateCredentials(RefreshTokenHolder.class).iterator();
|
Iterator<RefreshTokenHolder> iterator = subject.getPrivateCredentials(RefreshTokenHolder.class).iterator();
|
||||||
@@ -94,10 +89,6 @@ public class DirectAccessGrantsLoginModule extends AbstractKeycloakLoginModule {
|
|||||||
formparams.add(new BasicNameValuePair("username", username));
|
formparams.add(new BasicNameValuePair("username", username));
|
||||||
formparams.add(new BasicNameValuePair("password", password));
|
formparams.add(new BasicNameValuePair("password", password));
|
||||||
|
|
||||||
if (scope != null) {
|
|
||||||
formparams.add(new BasicNameValuePair(OAuth2Constants.SCOPE, scope));
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientCredentialsProviderUtils.setClientCredentials(deployment, post, formparams);
|
ClientCredentialsProviderUtils.setClientCredentials(deployment, post, formparams);
|
||||||
|
|
||||||
UrlEncodedFormEntity form = new UrlEncodedFormEntity(formparams, "UTF-8");
|
UrlEncodedFormEntity form = new UrlEncodedFormEntity(formparams, "UTF-8");
|
||||||
@@ -130,8 +121,7 @@ public class DirectAccessGrantsLoginModule extends AbstractKeycloakLoginModule {
|
|||||||
// refreshToken will be saved to privateCreds of Subject for now
|
// refreshToken will be saved to privateCreds of Subject for now
|
||||||
refreshToken = tokenResponse.getRefreshToken();
|
refreshToken = tokenResponse.getRefreshToken();
|
||||||
|
|
||||||
AdapterTokenVerifier.VerifiedTokens tokens = AdapterTokenVerifier.verifyTokens(tokenResponse.getToken(), tokenResponse.getIdToken(), deployment);
|
return bearerAuth(tokenResponse.getToken());
|
||||||
return postTokenVerification(tokenResponse.getToken(), tokens.getAccessToken());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+58
@@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 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.adapters.rotation;
|
||||||
|
|
||||||
|
import org.jboss.logging.Logger;
|
||||||
|
import org.keycloak.RSATokenVerifier;
|
||||||
|
import org.keycloak.adapters.KeycloakDeployment;
|
||||||
|
import org.keycloak.common.VerificationException;
|
||||||
|
import org.keycloak.jose.jws.JWSInput;
|
||||||
|
import org.keycloak.representations.AccessToken;
|
||||||
|
|
||||||
|
import java.security.PublicKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
|
*/
|
||||||
|
public class AdapterRSATokenVerifier {
|
||||||
|
|
||||||
|
private static final Logger log = Logger.getLogger(AdapterRSATokenVerifier.class);
|
||||||
|
|
||||||
|
public static AccessToken verifyToken(String tokenString, KeycloakDeployment deployment) throws VerificationException {
|
||||||
|
return verifyToken(tokenString, deployment, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static PublicKey getPublicKey(String kid, KeycloakDeployment deployment) throws VerificationException {
|
||||||
|
PublicKeyLocator pkLocator = deployment.getPublicKeyLocator();
|
||||||
|
|
||||||
|
PublicKey publicKey = pkLocator.getPublicKey(kid, deployment);
|
||||||
|
if (publicKey == null) {
|
||||||
|
log.errorf("Didn't find publicKey for kid: %s", kid);
|
||||||
|
throw new VerificationException("Didn't find publicKey for specified kid");
|
||||||
|
}
|
||||||
|
|
||||||
|
return publicKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AccessToken verifyToken(String tokenString, KeycloakDeployment deployment, boolean checkActive, boolean checkTokenType) throws VerificationException {
|
||||||
|
RSATokenVerifier verifier = RSATokenVerifier.create(tokenString).realmUrl(deployment.getRealmInfoUrl()).checkActive(checkActive).checkTokenType(checkTokenType);
|
||||||
|
PublicKey publicKey = getPublicKey(verifier.getHeader().getKeyId(), deployment);
|
||||||
|
return verifier.publicKey(publicKey).verify().getToken();
|
||||||
|
}
|
||||||
|
}
|
||||||
-150
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2016 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.adapters.rotation;
|
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
|
||||||
import org.keycloak.TokenVerifier;
|
|
||||||
import org.keycloak.adapters.KeycloakDeployment;
|
|
||||||
import org.keycloak.common.VerificationException;
|
|
||||||
import org.keycloak.representations.AccessToken;
|
|
||||||
import org.keycloak.representations.IDToken;
|
|
||||||
import org.keycloak.representations.JsonWebToken;
|
|
||||||
|
|
||||||
import java.security.PublicKey;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
||||||
*/
|
|
||||||
public class AdapterTokenVerifier {
|
|
||||||
|
|
||||||
private static final Logger log = Logger.getLogger(AdapterTokenVerifier.class);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verifies bearer token. Typically called when bearer token (access token) is sent to the service, which wants to verify it. Hence it also checks the audience in the token.
|
|
||||||
*
|
|
||||||
* @param tokenString
|
|
||||||
* @param deployment
|
|
||||||
* @return
|
|
||||||
* @throws VerificationException
|
|
||||||
*/
|
|
||||||
public static AccessToken verifyToken(String tokenString, KeycloakDeployment deployment) throws VerificationException {
|
|
||||||
TokenVerifier<AccessToken> tokenVerifier = createVerifier(tokenString, deployment, true, AccessToken.class);
|
|
||||||
|
|
||||||
// Verify audience of bearer-token
|
|
||||||
if (deployment.isVerifyTokenAudience()) {
|
|
||||||
tokenVerifier.audience(deployment.getResourceName());
|
|
||||||
}
|
|
||||||
|
|
||||||
return tokenVerifier.verify().getToken();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verify access token and ID token. Typically called after successful tokenResponse is received from Keycloak
|
|
||||||
*
|
|
||||||
* @param accessTokenString
|
|
||||||
* @param idTokenString
|
|
||||||
* @param deployment
|
|
||||||
* @return verified and parsed accessToken and idToken
|
|
||||||
* @throws VerificationException
|
|
||||||
*/
|
|
||||||
public static VerifiedTokens verifyTokens(String accessTokenString, String idTokenString, KeycloakDeployment deployment) throws VerificationException {
|
|
||||||
// Adapters currently do most of the checks including signature etc on the access token
|
|
||||||
TokenVerifier<AccessToken> tokenVerifier = createVerifier(accessTokenString, deployment, true, AccessToken.class);
|
|
||||||
AccessToken accessToken = tokenVerifier.verify().getToken();
|
|
||||||
|
|
||||||
if (idTokenString != null) {
|
|
||||||
// Don't verify signature again on IDToken
|
|
||||||
IDToken idToken = TokenVerifier.create(idTokenString, IDToken.class).getToken();
|
|
||||||
TokenVerifier<IDToken> idTokenVerifier = TokenVerifier.createWithoutSignature(idToken);
|
|
||||||
|
|
||||||
// Always verify audience and azp on IDToken
|
|
||||||
idTokenVerifier.audience(deployment.getResourceName());
|
|
||||||
idTokenVerifier.issuedFor(deployment.getResourceName());
|
|
||||||
|
|
||||||
idTokenVerifier.verify();
|
|
||||||
return new VerifiedTokens(accessToken, idToken);
|
|
||||||
} else {
|
|
||||||
return new VerifiedTokens(accessToken, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates verifier, initializes it from the KeycloakDeployment and adds the publicKey and some default basic checks (activeness and tokenType). Useful if caller wants to add/remove/update
|
|
||||||
* some checks
|
|
||||||
*
|
|
||||||
* @param tokenString
|
|
||||||
* @param deployment
|
|
||||||
* @param withDefaultChecks
|
|
||||||
* @param tokenClass
|
|
||||||
* @param <T>
|
|
||||||
* @return tokenVerifier
|
|
||||||
* @throws VerificationException
|
|
||||||
*/
|
|
||||||
public static <T extends JsonWebToken> TokenVerifier<T> createVerifier(String tokenString, KeycloakDeployment deployment, boolean withDefaultChecks, Class<T> tokenClass) throws VerificationException {
|
|
||||||
TokenVerifier<T> tokenVerifier = TokenVerifier.create(tokenString, tokenClass);
|
|
||||||
|
|
||||||
if (withDefaultChecks) {
|
|
||||||
tokenVerifier
|
|
||||||
.withDefaultChecks()
|
|
||||||
.realmUrl(deployment.getRealmInfoUrl());
|
|
||||||
}
|
|
||||||
|
|
||||||
String kid = tokenVerifier.getHeader().getKeyId();
|
|
||||||
PublicKey publicKey = getPublicKey(kid, deployment);
|
|
||||||
tokenVerifier.publicKey(publicKey);
|
|
||||||
|
|
||||||
return tokenVerifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static PublicKey getPublicKey(String kid, KeycloakDeployment deployment) throws VerificationException {
|
|
||||||
PublicKeyLocator pkLocator = deployment.getPublicKeyLocator();
|
|
||||||
|
|
||||||
PublicKey publicKey = pkLocator.getPublicKey(kid, deployment);
|
|
||||||
if (publicKey == null) {
|
|
||||||
log.errorf("Didn't find publicKey for kid: %s", kid);
|
|
||||||
throw new VerificationException("Didn't find publicKey for specified kid");
|
|
||||||
}
|
|
||||||
|
|
||||||
return publicKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static class VerifiedTokens {
|
|
||||||
|
|
||||||
private final AccessToken accessToken;
|
|
||||||
private final IDToken idToken;
|
|
||||||
|
|
||||||
public VerifiedTokens(AccessToken accessToken, IDToken idToken) {
|
|
||||||
this.accessToken = accessToken;
|
|
||||||
this.idToken = idToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public AccessToken getAccessToken() {
|
|
||||||
return accessToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IDToken getIdToken() {
|
|
||||||
return idToken;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-1
@@ -77,7 +77,6 @@ public class KeycloakDeploymentBuilderTest {
|
|||||||
assertEquals(20, deployment.getMinTimeBetweenJwksRequests());
|
assertEquals(20, deployment.getMinTimeBetweenJwksRequests());
|
||||||
assertEquals(120, deployment.getPublicKeyCacheTtl());
|
assertEquals(120, deployment.getPublicKeyCacheTtl());
|
||||||
assertEquals("/api/$1", deployment.getRedirectRewriteRules().get("^/wsmaster/api/(.*)$"));
|
assertEquals("/api/$1", deployment.getRedirectRewriteRules().get("^/wsmaster/api/(.*)$"));
|
||||||
assertTrue(deployment.isVerifyTokenAudience());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -34,7 +34,6 @@
|
|||||||
"min-time-between-jwks-requests": 20,
|
"min-time-between-jwks-requests": 20,
|
||||||
"public-key-cache-ttl": 120,
|
"public-key-cache-ttl": 120,
|
||||||
"ignore-oauth-query-parameter": true,
|
"ignore-oauth-query-parameter": true,
|
||||||
"verify-token-audience": true,
|
|
||||||
"redirect-rewrite-rules" : {
|
"redirect-rewrite-rules" : {
|
||||||
"^/wsmaster/api/(.*)$" : "/api/$1"
|
"^/wsmaster/api/(.*)$" : "/api/$1"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-as7-integration-pom</artifactId>
|
<artifactId>keycloak-as7-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -47,6 +47,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -85,4 +86,17 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-as7-integration-pom</artifactId>
|
<artifactId>keycloak-as7-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -118,4 +118,17 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-as7-integration-pom</artifactId>
|
<artifactId>keycloak-as7-integration-pom</artifactId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
-7
@@ -98,12 +98,6 @@ class SecureDeploymentDefinition extends SimpleResourceDefinition {
|
|||||||
.setValidator(new IntRangeValidator(-1, true))
|
.setValidator(new IntRangeValidator(-1, true))
|
||||||
.setAllowExpression(true)
|
.setAllowExpression(true)
|
||||||
.build();
|
.build();
|
||||||
protected static final SimpleAttributeDefinition PUBLIC_KEY_CACHE_TTL =
|
|
||||||
new SimpleAttributeDefinitionBuilder("public-key-cache-ttl", ModelType.INT, true)
|
|
||||||
.setXmlName("public-key-cache-ttl")
|
|
||||||
.setAllowExpression(true)
|
|
||||||
.setValidator(new IntRangeValidator(-1, true))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
protected static final List<SimpleAttributeDefinition> DEPLOYMENT_ONLY_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
protected static final List<SimpleAttributeDefinition> DEPLOYMENT_ONLY_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
||||||
static {
|
static {
|
||||||
@@ -116,7 +110,6 @@ class SecureDeploymentDefinition extends SimpleResourceDefinition {
|
|||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(TURN_OFF_CHANGE_SESSION);
|
DEPLOYMENT_ONLY_ATTRIBUTES.add(TURN_OFF_CHANGE_SESSION);
|
||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(TOKEN_MINIMUM_TIME_TO_LIVE);
|
DEPLOYMENT_ONLY_ATTRIBUTES.add(TOKEN_MINIMUM_TIME_TO_LIVE);
|
||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(MIN_TIME_BETWEEN_JWKS_REQUESTS);
|
DEPLOYMENT_ONLY_ATTRIBUTES.add(MIN_TIME_BETWEEN_JWKS_REQUESTS);
|
||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(PUBLIC_KEY_CACHE_TTL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static final List<SimpleAttributeDefinition> ALL_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
protected static final List<SimpleAttributeDefinition> ALL_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
||||||
|
|||||||
-8
@@ -173,13 +173,6 @@ class SharedAttributeDefinitons {
|
|||||||
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
|
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
protected static final SimpleAttributeDefinition VERIFY_TOKEN_AUDIENCE =
|
|
||||||
new SimpleAttributeDefinitionBuilder("verify-token-audience", ModelType.BOOLEAN, true)
|
|
||||||
.setXmlName("verify-token-audience")
|
|
||||||
.setAllowExpression(true)
|
|
||||||
.setDefaultValue(new ModelNode(false))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected static final List<SimpleAttributeDefinition> ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
protected static final List<SimpleAttributeDefinition> ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
||||||
@@ -207,7 +200,6 @@ class SharedAttributeDefinitons {
|
|||||||
ATTRIBUTES.add(TOKEN_STORE);
|
ATTRIBUTES.add(TOKEN_STORE);
|
||||||
ATTRIBUTES.add(PRINCIPAL_ATTRIBUTE);
|
ATTRIBUTES.add(PRINCIPAL_ATTRIBUTE);
|
||||||
ATTRIBUTES.add(PROXY_URL);
|
ATTRIBUTES.add(PROXY_URL);
|
||||||
ATTRIBUTES.add(VERIFY_TOKEN_AUDIENCE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
-3
@@ -47,7 +47,6 @@ keycloak.realm.register-node-period=how often to re-register node
|
|||||||
keycloak.realm.token-store=cookie or session storage for auth session data
|
keycloak.realm.token-store=cookie or session storage for auth session data
|
||||||
keycloak.realm.principal-attribute=token attribute to use to set Principal name
|
keycloak.realm.principal-attribute=token attribute to use to set Principal name
|
||||||
keycloak.realm.proxy-url=The URL for the HTTP proxy if one is used.
|
keycloak.realm.proxy-url=The URL for the HTTP proxy if one is used.
|
||||||
keycloak.realm.verify-token-audience=If true, then during bearer-only authentication, the adapter will verify if token contains this client name (resource) as an audience
|
|
||||||
|
|
||||||
keycloak.secure-deployment=A deployment secured by Keycloak
|
keycloak.secure-deployment=A deployment secured by Keycloak
|
||||||
keycloak.secure-deployment.add=Add a deployment to be secured by Keycloak
|
keycloak.secure-deployment.add=Add a deployment to be secured by Keycloak
|
||||||
@@ -84,9 +83,7 @@ keycloak.secure-deployment.principal-attribute=token attribute to use to set Pri
|
|||||||
keycloak.secure-deployment.turn-off-change-session-id-on-login=The session id is changed by default on a successful login. Change this to true if you want to turn this off
|
keycloak.secure-deployment.turn-off-change-session-id-on-login=The session id is changed by default on a successful login. Change this to true if you want to turn this off
|
||||||
keycloak.secure-deployment.token-minimum-time-to-live=The adapter will refresh the token if the current token is expired OR will expire in 'token-minimum-time-to-live' seconds or less
|
keycloak.secure-deployment.token-minimum-time-to-live=The adapter will refresh the token if the current token is expired OR will expire in 'token-minimum-time-to-live' seconds or less
|
||||||
keycloak.secure-deployment.min-time-between-jwks-requests=If adapter recognize token signed by unknown public key, it will try to download new public key from keycloak server. However it won't try to download if already tried it in less than 'min-time-between-jwks-requests' seconds
|
keycloak.secure-deployment.min-time-between-jwks-requests=If adapter recognize token signed by unknown public key, it will try to download new public key from keycloak server. However it won't try to download if already tried it in less than 'min-time-between-jwks-requests' seconds
|
||||||
keycloak.secure-deployment.public-key-cache-ttl=Maximum time the downloaded public keys are considered valid. When this time reach, the adapter is forced to download public keys from keycloak server
|
|
||||||
keycloak.secure-deployment.proxy-url=The URL for the HTTP proxy if one is used.
|
keycloak.secure-deployment.proxy-url=The URL for the HTTP proxy if one is used.
|
||||||
keycloak.secure-deployment.verify-token-audience=If true, then during bearer-only authentication, the adapter will verify if token contains this client name (resource) as an audience
|
|
||||||
keycloak.secure-deployment.credential=Credential value
|
keycloak.secure-deployment.credential=Credential value
|
||||||
|
|
||||||
keycloak.credential=Credential
|
keycloak.credential=Credential
|
||||||
|
|||||||
@@ -66,7 +66,6 @@
|
|||||||
<xs:element name="token-store" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="token-store" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="principal-attribute" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="principal-attribute" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="verify-token-audience" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
|
||||||
</xs:all>
|
</xs:all>
|
||||||
<xs:attribute name="name" type="xs:string" use="required">
|
<xs:attribute name="name" type="xs:string" use="required">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
@@ -109,9 +108,7 @@
|
|||||||
<xs:element name="turn-off-change-session-id-on-login" type="xs:boolean" minOccurs="0" maxOccurs="1" />
|
<xs:element name="turn-off-change-session-id-on-login" type="xs:boolean" minOccurs="0" maxOccurs="1" />
|
||||||
<xs:element name="token-minimum-time-to-live" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="token-minimum-time-to-live" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="min-time-between-jwks-requests" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="min-time-between-jwks-requests" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="public-key-cache-ttl" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
|
||||||
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="verify-token-audience" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
|
||||||
</xs:all>
|
</xs:all>
|
||||||
<xs:attribute name="name" type="xs:string" use="required">
|
<xs:attribute name="name" type="xs:string" use="required">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak AS7 / JBoss EAP 6 Integration</name>
|
<name>Keycloak AS7 / JBoss EAP 6 Integration</name>
|
||||||
@@ -30,11 +30,6 @@
|
|||||||
<artifactId>keycloak-as7-integration-pom</artifactId>
|
<artifactId>keycloak-as7-integration-pom</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -52,4 +47,4 @@
|
|||||||
<module>as7-adapter</module>
|
<module>as7-adapter</module>
|
||||||
<module>as7-subsystem</module>
|
<module>as7-subsystem</module>
|
||||||
</modules>
|
</modules>
|
||||||
</project>
|
</project>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-fuse7-integration-pom</artifactId>
|
<artifactId>keycloak-fuse7-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -31,9 +31,6 @@
|
|||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
org.keycloak.adapters.camel.undertow;version="${project.version}"
|
org.keycloak.adapters.camel.undertow;version="${project.version}"
|
||||||
</keycloak.osgi.export>
|
</keycloak.osgi.export>
|
||||||
@@ -41,7 +38,7 @@
|
|||||||
org.keycloak.*;version="${project.version}",
|
org.keycloak.*;version="${project.version}",
|
||||||
org.apache.camel.*,
|
org.apache.camel.*,
|
||||||
org.apache.camel.component.undertow,
|
org.apache.camel.component.undertow,
|
||||||
io.undertow.*;version="[1.4,3)",
|
io.undertow.*,
|
||||||
*;resolution:=optional
|
*;resolution:=optional
|
||||||
</keycloak.osgi.import>
|
</keycloak.osgi.import>
|
||||||
</properties>
|
</properties>
|
||||||
@@ -101,6 +98,15 @@
|
|||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-fuse7-integration-pom</artifactId>
|
<artifactId>keycloak-fuse7-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -85,6 +85,15 @@
|
|||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-fuse7-integration-pom</artifactId>
|
<artifactId>keycloak-fuse7-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -70,6 +70,15 @@
|
|||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-fuse7-integration-pom</artifactId>
|
<artifactId>keycloak-fuse7-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -31,9 +31,6 @@
|
|||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
org.keycloak.adapters.osgi.undertow.*;version="${project.version}"
|
org.keycloak.adapters.osgi.undertow.*;version="${project.version}"
|
||||||
</keycloak.osgi.export>
|
</keycloak.osgi.export>
|
||||||
@@ -46,7 +43,7 @@
|
|||||||
org.apache.cxf.transport.http;resolution:=optional;version="[3,4)",
|
org.apache.cxf.transport.http;resolution:=optional;version="[3,4)",
|
||||||
org.apache.cxf.transport.http_undertow;resolution:=optional;version="[3,4)",
|
org.apache.cxf.transport.http_undertow;resolution:=optional;version="[3,4)",
|
||||||
org.apache.cxf.transport.servlet;resolution:=optional;version="[3,4)",
|
org.apache.cxf.transport.servlet;resolution:=optional;version="[3,4)",
|
||||||
io.undertow.*;version="[1.4,3)",
|
io.undertow.*,
|
||||||
*;resolution:=optional
|
*;resolution:=optional
|
||||||
</keycloak.osgi.import>
|
</keycloak.osgi.import>
|
||||||
<keycloak.osgi.fragment>org.ops4j.pax.web.pax-web-undertow</keycloak.osgi.fragment>
|
<keycloak.osgi.fragment>org.ops4j.pax.web.pax-web-undertow</keycloak.osgi.fragment>
|
||||||
@@ -110,6 +107,15 @@
|
|||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -74,4 +74,17 @@
|
|||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
+13
-4
@@ -24,13 +24,16 @@ import org.keycloak.OAuthErrorException;
|
|||||||
import org.keycloak.adapters.KeycloakDeployment;
|
import org.keycloak.adapters.KeycloakDeployment;
|
||||||
import org.keycloak.adapters.KeycloakDeploymentBuilder;
|
import org.keycloak.adapters.KeycloakDeploymentBuilder;
|
||||||
import org.keycloak.adapters.ServerRequest;
|
import org.keycloak.adapters.ServerRequest;
|
||||||
import org.keycloak.adapters.rotation.AdapterTokenVerifier;
|
import org.keycloak.adapters.rotation.AdapterRSATokenVerifier;
|
||||||
import org.keycloak.common.VerificationException;
|
import org.keycloak.common.VerificationException;
|
||||||
import org.keycloak.common.util.KeycloakUriBuilder;
|
import org.keycloak.common.util.KeycloakUriBuilder;
|
||||||
|
import org.keycloak.jose.jws.JWSInput;
|
||||||
|
import org.keycloak.jose.jws.JWSInputException;
|
||||||
import org.keycloak.representations.AccessToken;
|
import org.keycloak.representations.AccessToken;
|
||||||
import org.keycloak.representations.AccessTokenResponse;
|
import org.keycloak.representations.AccessTokenResponse;
|
||||||
import org.keycloak.representations.IDToken;
|
import org.keycloak.representations.IDToken;
|
||||||
|
|
||||||
|
import javax.ws.rs.client.Client;
|
||||||
import javax.ws.rs.client.Entity;
|
import javax.ws.rs.client.Entity;
|
||||||
import javax.ws.rs.core.Form;
|
import javax.ws.rs.core.Form;
|
||||||
import javax.ws.rs.core.HttpHeaders;
|
import javax.ws.rs.core.HttpHeaders;
|
||||||
@@ -534,9 +537,15 @@ public class KeycloakInstalled {
|
|||||||
refreshToken = tokenResponse.getRefreshToken();
|
refreshToken = tokenResponse.getRefreshToken();
|
||||||
idTokenString = tokenResponse.getIdToken();
|
idTokenString = tokenResponse.getIdToken();
|
||||||
|
|
||||||
AdapterTokenVerifier.VerifiedTokens tokens = AdapterTokenVerifier.verifyTokens(tokenString, idTokenString, deployment);
|
token = AdapterRSATokenVerifier.verifyToken(tokenString, deployment);
|
||||||
token = tokens.getAccessToken();
|
if (idTokenString != null) {
|
||||||
idToken = tokens.getIdToken();
|
try {
|
||||||
|
JWSInput input = new JWSInput(idTokenString);
|
||||||
|
idToken = input.readJsonContent(IDToken.class);
|
||||||
|
} catch (JWSInputException e) {
|
||||||
|
throw new VerificationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AccessToken getToken() {
|
public AccessToken getToken() {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -87,5 +87,17 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -14,24 +14,21 @@
|
|||||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~ See the License for the specific language governing permissions and
|
~ See the License for the specific language governing permissions and
|
||||||
~ limitations under the License.
|
~ limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>keycloak-jetty-core</artifactId>
|
<artifactId>keycloak-jetty-core</artifactId>
|
||||||
<name>Keycloak Jetty Core Integration</name>
|
<name>Keycloak Jetty Core Integration</name>
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<jetty9.version>8.1.17.v20150415</jetty9.version>
|
<jetty9.version>8.1.17.v20150415</jetty9.version>
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
org.keycloak.adapters.jetty.core.*
|
org.keycloak.adapters.jetty.core.*
|
||||||
@@ -43,17 +40,18 @@
|
|||||||
*;resolution:=optional
|
*;resolution:=optional
|
||||||
</keycloak.osgi.import>
|
</keycloak.osgi.import>
|
||||||
</properties>
|
</properties>
|
||||||
<description />
|
<description />
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-core</artifactId>
|
<artifactId>keycloak-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-spi</artifactId>
|
<artifactId>keycloak-adapter-spi</artifactId>
|
||||||
@@ -63,29 +61,29 @@
|
|||||||
<artifactId>keycloak-jetty-adapter-spi</artifactId>
|
<artifactId>keycloak-jetty-adapter-spi</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-core</artifactId>
|
<artifactId>keycloak-adapter-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-core</artifactId>
|
<artifactId>jackson-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-annotations</artifactId>
|
<artifactId>jackson-annotations</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
<artifactId>jetty-server</artifactId>
|
<artifactId>jetty-server</artifactId>
|
||||||
@@ -107,14 +105,23 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
@@ -147,7 +154,7 @@
|
|||||||
</instructions>
|
</instructions>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
+2
-2
@@ -85,7 +85,7 @@ public class JettyCookieTokenStore implements AdapterTokenStore {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void logout() {
|
public void logout() {
|
||||||
CookieTokenStore.removeCookie(deployment, facade);
|
CookieTokenStore.removeCookie(facade);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ public class JettyCookieTokenStore implements AdapterTokenStore {
|
|||||||
if (success && session.isActive()) return principal;
|
if (success && session.isActive()) return principal;
|
||||||
|
|
||||||
log.debugf("Cleanup and expire cookie for user %s after failed refresh", principal.getName());
|
log.debugf("Cleanup and expire cookie for user %s after failed refresh", principal.getName());
|
||||||
CookieTokenStore.removeCookie(deployment, facade);
|
CookieTokenStore.removeCookie(facade);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,24 +14,21 @@
|
|||||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~ See the License for the specific language governing permissions and
|
~ See the License for the specific language governing permissions and
|
||||||
~ limitations under the License.
|
~ limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>keycloak-jetty81-adapter</artifactId>
|
<artifactId>keycloak-jetty81-adapter</artifactId>
|
||||||
<name>Keycloak Jetty 8.1.x Integration</name>
|
<name>Keycloak Jetty 8.1.x Integration</name>
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<jetty9.version>8.1.17.v20150415</jetty9.version>
|
<jetty9.version>8.1.17.v20150415</jetty9.version>
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
org.keycloak.adapters.jetty.*
|
org.keycloak.adapters.jetty.*
|
||||||
@@ -42,17 +39,18 @@
|
|||||||
*;resolution:=optional
|
*;resolution:=optional
|
||||||
</keycloak.osgi.import>
|
</keycloak.osgi.import>
|
||||||
</properties>
|
</properties>
|
||||||
<description />
|
<description />
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-core</artifactId>
|
<artifactId>keycloak-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-core</artifactId>
|
<artifactId>keycloak-adapter-core</artifactId>
|
||||||
@@ -65,26 +63,26 @@
|
|||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-jetty-core</artifactId>
|
<artifactId>keycloak-jetty-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-core</artifactId>
|
<artifactId>jackson-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-annotations</artifactId>
|
<artifactId>jackson-annotations</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
<artifactId>jetty-server</artifactId>
|
<artifactId>jetty-server</artifactId>
|
||||||
@@ -106,14 +104,23 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
@@ -146,7 +153,7 @@
|
|||||||
</instructions>
|
</instructions>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -14,20 +14,20 @@
|
|||||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~ See the License for the specific language governing permissions and
|
~ See the License for the specific language governing permissions and
|
||||||
~ limitations under the License.
|
~ limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>keycloak-jetty91-adapter</artifactId>
|
<artifactId>keycloak-jetty91-adapter</artifactId>
|
||||||
<name>Keycloak Jetty 9.1.x Integration</name>
|
<name>Keycloak Jetty 9.1.x Integration</name>
|
||||||
<properties>
|
<properties>
|
||||||
<jetty9.version>9.1.5.v20140505</jetty9.version>
|
<jetty9.version>9.1.5.v20140505</jetty9.version>
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
@@ -40,17 +40,18 @@
|
|||||||
*;resolution:=optional
|
*;resolution:=optional
|
||||||
</keycloak.osgi.import>
|
</keycloak.osgi.import>
|
||||||
</properties>
|
</properties>
|
||||||
<description />
|
<description />
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-core</artifactId>
|
<artifactId>keycloak-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-core</artifactId>
|
<artifactId>keycloak-adapter-core</artifactId>
|
||||||
@@ -66,33 +67,33 @@
|
|||||||
<exclusion>
|
<exclusion>
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
<artifactId>jetty-util</artifactId>
|
<artifactId>jetty-util</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
<artifactId>jetty-security</artifactId>
|
<artifactId>jetty-security</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-core</artifactId>
|
<artifactId>jackson-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-annotations</artifactId>
|
<artifactId>jackson-annotations</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
<artifactId>jetty-server</artifactId>
|
<artifactId>jetty-server</artifactId>
|
||||||
@@ -114,22 +115,22 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.6</source>
|
<source>1.6</source>
|
||||||
<target>1.6</target>
|
<target>1.6</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
@@ -163,7 +164,7 @@
|
|||||||
</instructions>
|
</instructions>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -14,24 +14,21 @@
|
|||||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~ See the License for the specific language governing permissions and
|
~ See the License for the specific language governing permissions and
|
||||||
~ limitations under the License.
|
~ limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>keycloak-jetty92-adapter</artifactId>
|
<artifactId>keycloak-jetty92-adapter</artifactId>
|
||||||
<name>Keycloak Jetty 9.2.x Integration</name>
|
<name>Keycloak Jetty 9.2.x Integration</name>
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<jetty9.version>9.2.4.v20141103</jetty9.version>
|
<jetty9.version>9.2.4.v20141103</jetty9.version>
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
org.keycloak.adapters.jetty.*
|
org.keycloak.adapters.jetty.*
|
||||||
@@ -43,17 +40,18 @@
|
|||||||
*;resolution:=optional
|
*;resolution:=optional
|
||||||
</keycloak.osgi.import>
|
</keycloak.osgi.import>
|
||||||
</properties>
|
</properties>
|
||||||
<description />
|
<description />
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-core</artifactId>
|
<artifactId>keycloak-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-core</artifactId>
|
<artifactId>keycloak-adapter-core</artifactId>
|
||||||
@@ -62,26 +60,26 @@
|
|||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-jetty-core</artifactId>
|
<artifactId>keycloak-jetty-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-core</artifactId>
|
<artifactId>jackson-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-annotations</artifactId>
|
<artifactId>jackson-annotations</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
<artifactId>jetty-server</artifactId>
|
<artifactId>jetty-server</artifactId>
|
||||||
@@ -103,14 +101,23 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
@@ -143,7 +150,7 @@
|
|||||||
</instructions>
|
</instructions>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -14,20 +14,20 @@
|
|||||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~ See the License for the specific language governing permissions and
|
~ See the License for the specific language governing permissions and
|
||||||
~ limitations under the License.
|
~ limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>keycloak-jetty93-adapter</artifactId>
|
<artifactId>keycloak-jetty93-adapter</artifactId>
|
||||||
<name>Keycloak Jetty 9.3.x Integration</name>
|
<name>Keycloak Jetty 9.3.x Integration</name>
|
||||||
<properties>
|
<properties>
|
||||||
<jetty9.version>9.3.9.v20160517</jetty9.version>
|
<jetty9.version>9.3.9.v20160517</jetty9.version>
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
@@ -40,17 +40,18 @@
|
|||||||
*;resolution:=optional
|
*;resolution:=optional
|
||||||
</keycloak.osgi.import>
|
</keycloak.osgi.import>
|
||||||
</properties>
|
</properties>
|
||||||
<description />
|
<description />
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-core</artifactId>
|
<artifactId>keycloak-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-core</artifactId>
|
<artifactId>keycloak-adapter-core</artifactId>
|
||||||
@@ -59,26 +60,26 @@
|
|||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-jetty-core</artifactId>
|
<artifactId>keycloak-jetty-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-core</artifactId>
|
<artifactId>jackson-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-annotations</artifactId>
|
<artifactId>jackson-annotations</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
<artifactId>jetty-server</artifactId>
|
<artifactId>jetty-server</artifactId>
|
||||||
@@ -100,14 +101,23 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
@@ -140,7 +150,7 @@
|
|||||||
</instructions>
|
</instructions>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -14,20 +14,20 @@
|
|||||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~ See the License for the specific language governing permissions and
|
~ See the License for the specific language governing permissions and
|
||||||
~ limitations under the License.
|
~ limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>keycloak-jetty94-adapter</artifactId>
|
<artifactId>keycloak-jetty94-adapter</artifactId>
|
||||||
<name>Keycloak Jetty 9.4.x Integration</name>
|
<name>Keycloak Jetty 9.4.x Integration</name>
|
||||||
<properties>
|
<properties>
|
||||||
<jetty9.version>9.4.2.v20170220</jetty9.version>
|
<jetty9.version>9.4.2.v20170220</jetty9.version>
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
@@ -40,17 +40,18 @@
|
|||||||
*;resolution:=optional
|
*;resolution:=optional
|
||||||
</keycloak.osgi.import>
|
</keycloak.osgi.import>
|
||||||
</properties>
|
</properties>
|
||||||
<description />
|
<description />
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-core</artifactId>
|
<artifactId>keycloak-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-core</artifactId>
|
<artifactId>keycloak-adapter-core</artifactId>
|
||||||
@@ -59,26 +60,26 @@
|
|||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-jetty-core</artifactId>
|
<artifactId>keycloak-jetty-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-core</artifactId>
|
<artifactId>jackson-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-annotations</artifactId>
|
<artifactId>jackson-annotations</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
<artifactId>jetty-server</artifactId>
|
<artifactId>jetty-server</artifactId>
|
||||||
@@ -100,14 +101,23 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
@@ -140,7 +150,7 @@
|
|||||||
</instructions>
|
</instructions>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak Jetty Integration</name>
|
<name>Keycloak Jetty Integration</name>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -73,12 +73,6 @@
|
|||||||
loginIframe.interval = initOptions.checkLoginIframeInterval;
|
loginIframe.interval = initOptions.checkLoginIframeInterval;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (initOptions.promiseType === 'native') {
|
|
||||||
kc.useNativePromise = typeof Promise === "function";
|
|
||||||
} else {
|
|
||||||
kc.useNativePromise = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (initOptions.onLoad === 'login-required') {
|
if (initOptions.onLoad === 'login-required') {
|
||||||
kc.loginRequired = true;
|
kc.loginRequired = true;
|
||||||
}
|
}
|
||||||
@@ -125,9 +119,9 @@
|
|||||||
kc.flow = 'standard';
|
kc.flow = 'standard';
|
||||||
}
|
}
|
||||||
|
|
||||||
var promise = createPromise(false);
|
var promise = createPromise();
|
||||||
|
|
||||||
var initPromise = createPromise(true);
|
var initPromise = createPromise();
|
||||||
initPromise.promise.success(function() {
|
initPromise.promise.success(function() {
|
||||||
kc.onReady && kc.onReady(kc.authenticated);
|
kc.onReady && kc.onReady(kc.authenticated);
|
||||||
promise.setSuccess(kc.authenticated);
|
promise.setSuccess(kc.authenticated);
|
||||||
@@ -154,14 +148,10 @@
|
|||||||
case 'check-sso':
|
case 'check-sso':
|
||||||
if (loginIframe.enable) {
|
if (loginIframe.enable) {
|
||||||
setupCheckLoginIframe().success(function() {
|
setupCheckLoginIframe().success(function() {
|
||||||
checkLoginIframe().success(function (unchanged) {
|
checkLoginIframe().success(function () {
|
||||||
if (!unchanged) {
|
doLogin(false);
|
||||||
doLogin(false);
|
|
||||||
} else {
|
|
||||||
initPromise.setSuccess();
|
|
||||||
}
|
|
||||||
}).error(function () {
|
}).error(function () {
|
||||||
initPromise.setError();
|
initPromise.setSuccess();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -180,7 +170,7 @@
|
|||||||
var callback = parseCallback(window.location.href);
|
var callback = parseCallback(window.location.href);
|
||||||
|
|
||||||
if (callback) {
|
if (callback) {
|
||||||
window.history.replaceState(window.history.state, null, callback.newUrl);
|
window.history.replaceState({}, null, callback.newUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (callback && callback.valid) {
|
if (callback && callback.valid) {
|
||||||
@@ -195,16 +185,12 @@
|
|||||||
|
|
||||||
if (loginIframe.enable) {
|
if (loginIframe.enable) {
|
||||||
setupCheckLoginIframe().success(function() {
|
setupCheckLoginIframe().success(function() {
|
||||||
checkLoginIframe().success(function (unchanged) {
|
checkLoginIframe().success(function () {
|
||||||
if (unchanged) {
|
kc.onAuthSuccess && kc.onAuthSuccess();
|
||||||
kc.onAuthSuccess && kc.onAuthSuccess();
|
initPromise.setSuccess();
|
||||||
initPromise.setSuccess();
|
|
||||||
scheduleCheckIframe();
|
|
||||||
} else {
|
|
||||||
initPromise.setSuccess();
|
|
||||||
}
|
|
||||||
}).error(function () {
|
}).error(function () {
|
||||||
initPromise.setError();
|
setToken(null, null, null);
|
||||||
|
initPromise.setSuccess();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -376,7 +362,7 @@
|
|||||||
req.setRequestHeader('Accept', 'application/json');
|
req.setRequestHeader('Accept', 'application/json');
|
||||||
req.setRequestHeader('Authorization', 'bearer ' + kc.token);
|
req.setRequestHeader('Authorization', 'bearer ' + kc.token);
|
||||||
|
|
||||||
var promise = createPromise(false);
|
var promise = createPromise();
|
||||||
|
|
||||||
req.onreadystatechange = function () {
|
req.onreadystatechange = function () {
|
||||||
if (req.readyState == 4) {
|
if (req.readyState == 4) {
|
||||||
@@ -401,7 +387,7 @@
|
|||||||
req.setRequestHeader('Accept', 'application/json');
|
req.setRequestHeader('Accept', 'application/json');
|
||||||
req.setRequestHeader('Authorization', 'bearer ' + kc.token);
|
req.setRequestHeader('Authorization', 'bearer ' + kc.token);
|
||||||
|
|
||||||
var promise = createPromise(false);
|
var promise = createPromise();
|
||||||
|
|
||||||
req.onreadystatechange = function () {
|
req.onreadystatechange = function () {
|
||||||
if (req.readyState == 4) {
|
if (req.readyState == 4) {
|
||||||
@@ -437,7 +423,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
kc.updateToken = function(minValidity) {
|
kc.updateToken = function(minValidity) {
|
||||||
var promise = createPromise(false);
|
var promise = createPromise();
|
||||||
|
|
||||||
if (!kc.refreshToken) {
|
if (!kc.refreshToken) {
|
||||||
promise.setError();
|
promise.setError();
|
||||||
@@ -601,7 +587,6 @@
|
|||||||
|
|
||||||
var tokenResponse = JSON.parse(req.responseText);
|
var tokenResponse = JSON.parse(req.responseText);
|
||||||
authSuccess(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], kc.flow === 'standard');
|
authSuccess(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], kc.flow === 'standard');
|
||||||
scheduleCheckIframe();
|
|
||||||
} else {
|
} else {
|
||||||
kc.onAuthError && kc.onAuthError();
|
kc.onAuthError && kc.onAuthError();
|
||||||
promise && promise.setError();
|
promise && promise.setError();
|
||||||
@@ -635,7 +620,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function loadConfig(url) {
|
function loadConfig(url) {
|
||||||
var promise = createPromise(true);
|
var promise = createPromise();
|
||||||
var configUrl;
|
var configUrl;
|
||||||
|
|
||||||
if (!config) {
|
if (!config) {
|
||||||
@@ -994,8 +979,8 @@
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function createPromise(internal) {
|
function createPromise() {
|
||||||
if (!internal && kc.useNativePromise) {
|
if (typeof Promise === "function") {
|
||||||
return createNativePromise();
|
return createNativePromise();
|
||||||
} else {
|
} else {
|
||||||
return createLegacyPromise();
|
return createLegacyPromise();
|
||||||
@@ -1007,10 +992,12 @@
|
|||||||
// interface of the custom promise type previously used by the API
|
// interface of the custom promise type previously used by the API
|
||||||
var p = {
|
var p = {
|
||||||
setSuccess: function(result) {
|
setSuccess: function(result) {
|
||||||
|
p.success = true;
|
||||||
p.resolve(result);
|
p.resolve(result);
|
||||||
},
|
},
|
||||||
|
|
||||||
setError: function(result) {
|
setError: function(result) {
|
||||||
|
p.success = false;
|
||||||
p.reject(result);
|
p.reject(result);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -1018,6 +1005,14 @@
|
|||||||
p.resolve = resolve;
|
p.resolve = resolve;
|
||||||
p.reject = reject;
|
p.reject = reject;
|
||||||
});
|
});
|
||||||
|
p.promise.success = function(callback) {
|
||||||
|
p.promise.then(callback);
|
||||||
|
return p.promise;
|
||||||
|
}
|
||||||
|
p.promise.error = function(callback) {
|
||||||
|
p.promise.catch(callback);
|
||||||
|
return p.promise;
|
||||||
|
}
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1062,7 +1057,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setupCheckLoginIframe() {
|
function setupCheckLoginIframe() {
|
||||||
var promise = createPromise(true);
|
var promise = createPromise();
|
||||||
|
|
||||||
if (!loginIframe.enable) {
|
if (!loginIframe.enable) {
|
||||||
promise.setSuccess();
|
promise.setSuccess();
|
||||||
@@ -1085,6 +1080,8 @@
|
|||||||
loginIframe.iframeOrigin = authUrl.substring(0, authUrl.indexOf('/', 8));
|
loginIframe.iframeOrigin = authUrl.substring(0, authUrl.indexOf('/', 8));
|
||||||
}
|
}
|
||||||
promise.setSuccess();
|
promise.setSuccess();
|
||||||
|
|
||||||
|
setTimeout(check, loginIframe.interval * 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
var src = kc.endpoints.checkSessionIframe();
|
var src = kc.endpoints.checkSessionIframe();
|
||||||
@@ -1111,38 +1108,31 @@
|
|||||||
|
|
||||||
for (var i = callbacks.length - 1; i >= 0; --i) {
|
for (var i = callbacks.length - 1; i >= 0; --i) {
|
||||||
var promise = callbacks[i];
|
var promise = callbacks[i];
|
||||||
if (event.data == 'error') {
|
if (event.data == 'unchanged') {
|
||||||
promise.setError();
|
promise.setSuccess();
|
||||||
} else {
|
} else {
|
||||||
promise.setSuccess(event.data == 'unchanged');
|
promise.setError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
window.addEventListener('message', messageCallback, false);
|
window.addEventListener('message', messageCallback, false);
|
||||||
|
|
||||||
|
var check = function() {
|
||||||
|
checkLoginIframe();
|
||||||
|
if (kc.token) {
|
||||||
|
setTimeout(check, loginIframe.interval * 1000);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return promise.promise;
|
return promise.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
function scheduleCheckIframe() {
|
|
||||||
if (loginIframe.enable) {
|
|
||||||
if (kc.token) {
|
|
||||||
setTimeout(function() {
|
|
||||||
checkLoginIframe().success(function(unchanged) {
|
|
||||||
if (unchanged) {
|
|
||||||
scheduleCheckIframe();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, loginIframe.interval * 1000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkLoginIframe() {
|
function checkLoginIframe() {
|
||||||
var promise = createPromise(true);
|
var promise = createPromise();
|
||||||
|
|
||||||
if (loginIframe.iframe && loginIframe.iframeOrigin ) {
|
if (loginIframe.iframe && loginIframe.iframeOrigin ) {
|
||||||
var msg = kc.clientId + ' ' + (kc.sessionId ? kc.sessionId : '');
|
var msg = kc.clientId + ' ' + kc.sessionId;
|
||||||
loginIframe.callbackList.push(promise);
|
loginIframe.callbackList.push(promise);
|
||||||
var origin = loginIframe.iframeOrigin;
|
var origin = loginIframe.iframeOrigin;
|
||||||
if (loginIframe.callbackList.length == 1) {
|
if (loginIframe.callbackList.length == 1) {
|
||||||
@@ -1159,17 +1149,17 @@
|
|||||||
if (!type || type == 'default') {
|
if (!type || type == 'default') {
|
||||||
return {
|
return {
|
||||||
login: function(options) {
|
login: function(options) {
|
||||||
window.location.replace(kc.createLoginUrl(options));
|
window.location.href = kc.createLoginUrl(options);
|
||||||
return createPromise().promise;
|
return createPromise().promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
logout: function(options) {
|
logout: function(options) {
|
||||||
window.location.replace(kc.createLogoutUrl(options));
|
window.location.href = kc.createLogoutUrl(options);
|
||||||
return createPromise().promise;
|
return createPromise().promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
register: function(options) {
|
register: function(options) {
|
||||||
window.location.replace(kc.createRegisterUrl(options));
|
window.location.href = kc.createRegisterUrl(options);
|
||||||
return createPromise().promise;
|
return createPromise().promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1180,7 +1170,7 @@
|
|||||||
} else {
|
} else {
|
||||||
throw "Not supported by the OIDC server";
|
throw "Not supported by the OIDC server";
|
||||||
}
|
}
|
||||||
return createPromise(false).promise;
|
return createPromise().promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
redirectUri: function(options, encodeHash) {
|
redirectUri: function(options, encodeHash) {
|
||||||
@@ -1239,7 +1229,7 @@
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
login: function(options) {
|
login: function(options) {
|
||||||
var promise = createPromise(false);
|
var promise = createPromise();
|
||||||
|
|
||||||
var cordovaOptions = createCordovaOptions(options);
|
var cordovaOptions = createCordovaOptions(options);
|
||||||
var loginUrl = kc.createLoginUrl(options);
|
var loginUrl = kc.createLoginUrl(options);
|
||||||
@@ -1287,7 +1277,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
logout: function(options) {
|
logout: function(options) {
|
||||||
var promise = createPromise(false);
|
var promise = createPromise();
|
||||||
|
|
||||||
var logoutUrl = kc.createLogoutUrl(options);
|
var logoutUrl = kc.createLogoutUrl(options);
|
||||||
var ref = cordovaOpenWindowWrapper(logoutUrl, '_blank', 'location=no,hidden=yes');
|
var ref = cordovaOpenWindowWrapper(logoutUrl, '_blank', 'location=no,hidden=yes');
|
||||||
@@ -1357,7 +1347,7 @@
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
login: function(options) {
|
login: function(options) {
|
||||||
var promise = createPromise(false);
|
var promise = createPromise();
|
||||||
var loginUrl = kc.createLoginUrl(options);
|
var loginUrl = kc.createLoginUrl(options);
|
||||||
|
|
||||||
universalLinks.subscribe('keycloak', function(event) {
|
universalLinks.subscribe('keycloak', function(event) {
|
||||||
@@ -1372,7 +1362,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
logout: function(options) {
|
logout: function(options) {
|
||||||
var promise = createPromise(false);
|
var promise = createPromise();
|
||||||
var logoutUrl = kc.createLogoutUrl(options);
|
var logoutUrl = kc.createLogoutUrl(options);
|
||||||
|
|
||||||
universalLinks.subscribe('keycloak', function(event) {
|
universalLinks.subscribe('keycloak', function(event) {
|
||||||
@@ -1387,7 +1377,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
register : function(options) {
|
register : function(options) {
|
||||||
var promise = createPromise(false);
|
var promise = createPromise();
|
||||||
var registerUrl = kc.createRegisterUrl(options);
|
var registerUrl = kc.createRegisterUrl(options);
|
||||||
universalLinks.subscribe('keycloak' , function(event) {
|
universalLinks.subscribe('keycloak' , function(event) {
|
||||||
universalLinks.unsubscribe('keycloak');
|
universalLinks.unsubscribe('keycloak');
|
||||||
|
|||||||
@@ -23,20 +23,9 @@
|
|||||||
function checkState(clientId, origin, sessionState, callback) {
|
function checkState(clientId, origin, sessionState, callback) {
|
||||||
var cookie = getCookie();
|
var cookie = getCookie();
|
||||||
|
|
||||||
var checkCookie = function() {
|
if (!cookie) {
|
||||||
if (clientId === init.clientId && origin === init.origin) {
|
callback('changed');
|
||||||
var c = cookie.split('/');
|
} else if (!init) {
|
||||||
if (sessionState === c[2]) {
|
|
||||||
callback('unchanged');
|
|
||||||
} else {
|
|
||||||
callback('changed');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
callback('error');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!init) {
|
|
||||||
var req = new XMLHttpRequest();
|
var req = new XMLHttpRequest();
|
||||||
|
|
||||||
var url = location.href.split("?")[0] + "/init";
|
var url = location.href.split("?")[0] + "/init";
|
||||||
@@ -52,15 +41,9 @@
|
|||||||
clientId: clientId,
|
clientId: clientId,
|
||||||
origin: origin
|
origin: origin
|
||||||
}
|
}
|
||||||
if (!cookie) {
|
callback('unchanged');
|
||||||
if (sessionState != '') {
|
} else if (req.status === 404) {
|
||||||
callback('changed');
|
callback('changed');
|
||||||
} else {
|
|
||||||
callback('unchanged');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
checkCookie();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
callback('error');
|
callback('error');
|
||||||
}
|
}
|
||||||
@@ -68,14 +51,17 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
req.send();
|
req.send();
|
||||||
} else if (!cookie) {
|
|
||||||
if (sessionState != '') {
|
|
||||||
callback('changed');
|
|
||||||
} else {
|
|
||||||
callback('unchanged');
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
checkCookie();
|
if (clientId === init.clientId && origin === init.origin) {
|
||||||
|
var c = cookie.split('/');
|
||||||
|
if (sessionState === c[2]) {
|
||||||
|
callback('unchanged');
|
||||||
|
} else {
|
||||||
|
callback('changed');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
callback('error');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -39,6 +39,14 @@
|
|||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-shade-plugin</artifactId>
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -31,9 +31,6 @@
|
|||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<jetty9.version>8.1.17.v20150415</jetty9.version>
|
<jetty9.version>8.1.17.v20150415</jetty9.version>
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
org.keycloak.adapters.osgi.*
|
org.keycloak.adapters.osgi.*
|
||||||
@@ -107,6 +104,15 @@
|
|||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak OIDC Client Adapter Modules</name>
|
<name>Keycloak OIDC Client Adapter Modules</name>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -31,9 +31,6 @@
|
|||||||
<description/>
|
<description/>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
org.keycloak.adapters.servlet.*
|
org.keycloak.adapters.servlet.*
|
||||||
</keycloak.osgi.export>
|
</keycloak.osgi.export>
|
||||||
@@ -48,6 +45,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -99,6 +97,15 @@
|
|||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -30,11 +30,6 @@
|
|||||||
<name>Keycloak Servlet OAuth Client</name>
|
<name>Keycloak Servlet OAuth Client</name>
|
||||||
<description/>
|
<description/>
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
@@ -79,6 +74,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -87,4 +83,17 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -105,4 +105,12 @@
|
|||||||
<version>${spring-boot.version}</version>
|
<version>${spring-boot.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
</project>
|
</project>
|
||||||
+3
-8
@@ -35,7 +35,6 @@ import org.eclipse.jetty.webapp.WebAppContext;
|
|||||||
import org.keycloak.adapters.jetty.KeycloakJettyAuthenticator;
|
import org.keycloak.adapters.jetty.KeycloakJettyAuthenticator;
|
||||||
import org.keycloak.adapters.undertow.KeycloakServletExtension;
|
import org.keycloak.adapters.undertow.KeycloakServletExtension;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -55,10 +54,6 @@ public class KeycloakBaseSpringBootConfiguration {
|
|||||||
KeycloakSpringBootConfigResolver.setAdapterConfig(keycloakProperties);
|
KeycloakSpringBootConfigResolver.setAdapterConfig(keycloakProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public void setApplicationContext(ApplicationContext context) {
|
|
||||||
KeycloakSpringBootConfigResolverWrapper.setApplicationContext(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
static class KeycloakBaseUndertowDeploymentInfoCustomizer {
|
static class KeycloakBaseUndertowDeploymentInfoCustomizer {
|
||||||
|
|
||||||
@@ -75,7 +70,7 @@ public class KeycloakBaseSpringBootConfiguration {
|
|||||||
|
|
||||||
deploymentInfo.setLoginConfig(loginConfig);
|
deploymentInfo.setLoginConfig(loginConfig);
|
||||||
|
|
||||||
deploymentInfo.addInitParameter("keycloak.config.resolver", KeycloakSpringBootConfigResolverWrapper.class.getName());
|
deploymentInfo.addInitParameter("keycloak.config.resolver", KeycloakSpringBootConfigResolver.class.getName());
|
||||||
deploymentInfo.addSecurityConstraints(getSecurityConstraints());
|
deploymentInfo.addSecurityConstraints(getSecurityConstraints());
|
||||||
|
|
||||||
deploymentInfo.addServletExtension(new KeycloakServletExtension());
|
deploymentInfo.addServletExtension(new KeycloakServletExtension());
|
||||||
@@ -117,7 +112,7 @@ public class KeycloakBaseSpringBootConfiguration {
|
|||||||
public void customize(Server server) {
|
public void customize(Server server) {
|
||||||
|
|
||||||
KeycloakJettyAuthenticator keycloakJettyAuthenticator = new KeycloakJettyAuthenticator();
|
KeycloakJettyAuthenticator keycloakJettyAuthenticator = new KeycloakJettyAuthenticator();
|
||||||
keycloakJettyAuthenticator.setConfigResolver(new KeycloakSpringBootConfigResolverWrapper());
|
keycloakJettyAuthenticator.setConfigResolver(new KeycloakSpringBootConfigResolver());
|
||||||
|
|
||||||
/* see org.eclipse.jetty.webapp.StandardDescriptorProcessor#visitSecurityConstraint for an example
|
/* see org.eclipse.jetty.webapp.StandardDescriptorProcessor#visitSecurityConstraint for an example
|
||||||
on how to map servlet spec to Constraints */
|
on how to map servlet spec to Constraints */
|
||||||
@@ -268,7 +263,7 @@ public class KeycloakBaseSpringBootConfiguration {
|
|||||||
context.addConstraint(tomcatConstraint);
|
context.addConstraint(tomcatConstraint);
|
||||||
}
|
}
|
||||||
|
|
||||||
context.addParameter("keycloak.config.resolver", KeycloakSpringBootConfigResolverWrapper.class.getName());
|
context.addParameter("keycloak.config.resolver", KeycloakSpringBootConfigResolver.class.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
-48
@@ -1,48 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2018 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.adapters.springboot;
|
|
||||||
|
|
||||||
import org.keycloak.adapters.KeycloakConfigResolver;
|
|
||||||
import org.keycloak.adapters.springsecurity.config.KeycloakSpringConfigResolverWrapper;
|
|
||||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>A specific implementation of {@link KeycloakSpringConfigResolverWrapper} that first tries to register any {@link KeycloakConfigResolver}
|
|
||||||
* instance provided by the application. if none is provided, {@link KeycloakSpringBootConfigResolver} is set.
|
|
||||||
*
|
|
||||||
* <p>This implementation is specially useful when using Spring Boot and Spring Security in the same application where the same {@link KeycloakConfigResolver}
|
|
||||||
* instance must be used across the different stacks.
|
|
||||||
*
|
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
|
||||||
*/
|
|
||||||
public class KeycloakSpringBootConfigResolverWrapper extends KeycloakSpringConfigResolverWrapper {
|
|
||||||
|
|
||||||
private static ApplicationContext context;
|
|
||||||
|
|
||||||
public KeycloakSpringBootConfigResolverWrapper() {
|
|
||||||
super(new KeycloakSpringBootConfigResolver());
|
|
||||||
try {
|
|
||||||
setDelegate(context.getBean(KeycloakConfigResolver.class));
|
|
||||||
} catch (NoSuchBeanDefinitionException ignore) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setApplicationContext(ApplicationContext context) {
|
|
||||||
KeycloakSpringBootConfigResolverWrapper.context = context;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
|
org.keycloak.adapters.springboot.KeycloakAutoConfiguration
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>spring-boot-container-bundle</artifactId>
|
<artifactId>spring-boot-container-bundle</artifactId>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -31,8 +31,6 @@
|
|||||||
<description/>
|
<description/>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
<spring-boot.version>1.4.0.RELEASE</spring-boot.version>
|
<spring-boot.version>1.4.0.RELEASE</spring-boot.version>
|
||||||
<spring.version>4.1.6.RELEASE</spring.version>
|
<spring.version>4.1.6.RELEASE</spring.version>
|
||||||
<mockito.version>1.9.5</mockito.version>
|
<mockito.version>1.9.5</mockito.version>
|
||||||
@@ -127,5 +125,16 @@
|
|||||||
<version>${spring-boot.version}</version>
|
<version>${spring-boot.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.7</source>
|
||||||
|
<target>1.7</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
</project>
|
</project>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -67,11 +67,13 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
<version>2.9.4</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-annotations</artifactId>
|
<artifactId>jackson-annotations</artifactId>
|
||||||
|
<version>2.9.4</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -138,4 +140,12 @@
|
|||||||
<version>${spring-boot.version}</version>
|
<version>${spring-boot.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
</project>
|
</project>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -72,16 +72,19 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>${slf4j.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
|
<version>${apache-httpcomponents.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
|
|||||||
-46
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2018 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.adapters.springsecurity.config;
|
|
||||||
|
|
||||||
import org.keycloak.adapters.KeycloakConfigResolver;
|
|
||||||
import org.keycloak.adapters.KeycloakDeployment;
|
|
||||||
import org.keycloak.adapters.spi.HttpFacade;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Spring applications may use different security stacks in order to enforce access based on the configuration provided
|
|
||||||
* by a {@code KeycloakDeployment}. This implementation of {@code KeycloakConfigResolver} wraps and avoid calling multiple
|
|
||||||
* {@code KeycloakConfigResolver} instances but only those defined by applications or set as default by the configuration.
|
|
||||||
*
|
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
|
||||||
*/
|
|
||||||
public class KeycloakSpringConfigResolverWrapper implements KeycloakConfigResolver {
|
|
||||||
|
|
||||||
private KeycloakConfigResolver delegate;
|
|
||||||
|
|
||||||
public KeycloakSpringConfigResolverWrapper(KeycloakConfigResolver delegate) {
|
|
||||||
this.delegate = delegate;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public KeycloakDeployment resolve(HttpFacade.Request facade) {
|
|
||||||
return delegate.resolve(facade);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setDelegate(KeycloakConfigResolver delegate) {
|
|
||||||
this.delegate = delegate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-1
@@ -65,7 +65,7 @@ public abstract class KeycloakWebSecurityConfigurerAdapter extends WebSecurityCo
|
|||||||
protected AdapterDeploymentContext adapterDeploymentContext() throws Exception {
|
protected AdapterDeploymentContext adapterDeploymentContext() throws Exception {
|
||||||
AdapterDeploymentContextFactoryBean factoryBean;
|
AdapterDeploymentContextFactoryBean factoryBean;
|
||||||
if (keycloakConfigResolver != null) {
|
if (keycloakConfigResolver != null) {
|
||||||
factoryBean = new AdapterDeploymentContextFactoryBean(new KeycloakSpringConfigResolverWrapper(keycloakConfigResolver));
|
factoryBean = new AdapterDeploymentContextFactoryBean(keycloakConfigResolver);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
factoryBean = new AdapterDeploymentContextFactoryBean(keycloakConfigFileResource);
|
factoryBean = new AdapterDeploymentContextFactoryBean(keycloakConfigFileResource);
|
||||||
|
|||||||
+3
-24
@@ -48,11 +48,10 @@ public class KeycloakPreAuthActionsFilter extends GenericFilterBean implements A
|
|||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(KeycloakPreAuthActionsFilter.class);
|
private static final Logger log = LoggerFactory.getLogger(KeycloakPreAuthActionsFilter.class);
|
||||||
|
|
||||||
private NodesRegistrationManagement nodesRegistrationManagement = new NodesRegistrationManagement();
|
private final NodesRegistrationManagement management = new NodesRegistrationManagement();
|
||||||
private ApplicationContext applicationContext;
|
private ApplicationContext applicationContext;
|
||||||
private AdapterDeploymentContext deploymentContext;
|
private AdapterDeploymentContext deploymentContext;
|
||||||
private UserSessionManagement userSessionManagement;
|
private UserSessionManagement userSessionManagement;
|
||||||
private PreAuthActionsHandlerFactory preAuthActionsHandlerFactory = new PreAuthActionsHandlerFactory();
|
|
||||||
|
|
||||||
public KeycloakPreAuthActionsFilter() {
|
public KeycloakPreAuthActionsFilter() {
|
||||||
super();
|
super();
|
||||||
@@ -70,7 +69,7 @@ public class KeycloakPreAuthActionsFilter extends GenericFilterBean implements A
|
|||||||
@Override
|
@Override
|
||||||
public void destroy() {
|
public void destroy() {
|
||||||
log.debug("Unregistering deployment");
|
log.debug("Unregistering deployment");
|
||||||
nodesRegistrationManagement.stop();
|
management.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -78,8 +77,7 @@ public class KeycloakPreAuthActionsFilter extends GenericFilterBean implements A
|
|||||||
throws IOException, ServletException {
|
throws IOException, ServletException {
|
||||||
|
|
||||||
HttpFacade facade = new SimpleHttpFacade((HttpServletRequest)request, (HttpServletResponse)response);
|
HttpFacade facade = new SimpleHttpFacade((HttpServletRequest)request, (HttpServletResponse)response);
|
||||||
nodesRegistrationManagement.tryRegister(deploymentContext.resolveDeployment(facade));
|
PreAuthActionsHandler handler = new PreAuthActionsHandler(userSessionManagement, deploymentContext, facade);
|
||||||
PreAuthActionsHandler handler = preAuthActionsHandlerFactory.createPreAuthActionsHandler(facade);
|
|
||||||
if (handler.handleRequest()) {
|
if (handler.handleRequest()) {
|
||||||
log.debug("Pre-auth filter handled request: {}", ((HttpServletRequest) request).getRequestURI());
|
log.debug("Pre-auth filter handled request: {}", ((HttpServletRequest) request).getRequestURI());
|
||||||
} else {
|
} else {
|
||||||
@@ -95,23 +93,4 @@ public class KeycloakPreAuthActionsFilter extends GenericFilterBean implements A
|
|||||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
||||||
this.applicationContext = applicationContext;
|
this.applicationContext = applicationContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setNodesRegistrationManagement(NodesRegistrationManagement nodesRegistrationManagement) {
|
|
||||||
this.nodesRegistrationManagement = nodesRegistrationManagement;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setPreAuthActionsHandlerFactory(PreAuthActionsHandlerFactory preAuthActionsHandlerFactory) {
|
|
||||||
this.preAuthActionsHandlerFactory = preAuthActionsHandlerFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates {@link PreAuthActionsHandler}s.
|
|
||||||
*
|
|
||||||
* Package-private class to enable mocking.
|
|
||||||
*/
|
|
||||||
class PreAuthActionsHandlerFactory {
|
|
||||||
PreAuthActionsHandler createPreAuthActionsHandler(HttpFacade facade) {
|
|
||||||
return new PreAuthActionsHandler(userSessionManagement, deploymentContext, facade);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
+1
-1
@@ -63,7 +63,7 @@ public class KeycloakSecurityContextRequestFilter extends GenericFilterBean impl
|
|||||||
RefreshableKeycloakSecurityContext refreshableSecurityContext = (RefreshableKeycloakSecurityContext) keycloakSecurityContext;
|
RefreshableKeycloakSecurityContext refreshableSecurityContext = (RefreshableKeycloakSecurityContext) keycloakSecurityContext;
|
||||||
KeycloakDeployment deployment = resolveDeployment(request, response);
|
KeycloakDeployment deployment = resolveDeployment(request, response);
|
||||||
|
|
||||||
if (!refreshableSecurityContext.isActive() || deployment.isAlwaysRefreshToken()) {
|
if (deployment.isAlwaysRefreshToken()) {
|
||||||
if (refreshableSecurityContext.refreshExpiredToken(false)) {
|
if (refreshableSecurityContext.refreshExpiredToken(false)) {
|
||||||
request.setAttribute(KeycloakSecurityContext.class.getName(), refreshableSecurityContext);
|
request.setAttribute(KeycloakSecurityContext.class.getName(), refreshableSecurityContext);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
-90
@@ -1,90 +0,0 @@
|
|||||||
package org.keycloak.adapters.springsecurity.filter;
|
|
||||||
|
|
||||||
import static org.mockito.Matchers.any;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
import static org.mockito.MockitoAnnotations.initMocks;
|
|
||||||
|
|
||||||
import javax.servlet.FilterChain;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
|
|
||||||
import org.junit.After;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.keycloak.adapters.AdapterDeploymentContext;
|
|
||||||
import org.keycloak.adapters.KeycloakDeployment;
|
|
||||||
import org.keycloak.adapters.NodesRegistrationManagement;
|
|
||||||
import org.keycloak.adapters.PreAuthActionsHandler;
|
|
||||||
import org.keycloak.adapters.spi.HttpFacade;
|
|
||||||
import org.keycloak.adapters.spi.UserSessionManagement;
|
|
||||||
import org.keycloak.adapters.springsecurity.filter.KeycloakPreAuthActionsFilter.PreAuthActionsHandlerFactory;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
|
|
||||||
public class KeycloakPreAuthActionsFilterTest {
|
|
||||||
|
|
||||||
private KeycloakPreAuthActionsFilter filter;
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private NodesRegistrationManagement nodesRegistrationManagement;
|
|
||||||
@Mock
|
|
||||||
private ApplicationContext applicationContext;
|
|
||||||
@Mock
|
|
||||||
private AdapterDeploymentContext deploymentContext;
|
|
||||||
@Mock
|
|
||||||
private PreAuthActionsHandlerFactory preAuthActionsHandlerFactory;
|
|
||||||
@Mock
|
|
||||||
private UserSessionManagement userSessionManagement;
|
|
||||||
@Mock
|
|
||||||
private PreAuthActionsHandler preAuthActionsHandler;
|
|
||||||
@Mock
|
|
||||||
private KeycloakDeployment deployment;
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private HttpServletRequest request;
|
|
||||||
@Mock
|
|
||||||
private HttpServletResponse response;
|
|
||||||
@Mock
|
|
||||||
private FilterChain chain;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() throws Exception {
|
|
||||||
initMocks(this);
|
|
||||||
filter = new KeycloakPreAuthActionsFilter(userSessionManagement);
|
|
||||||
filter.setNodesRegistrationManagement(nodesRegistrationManagement);
|
|
||||||
filter.setApplicationContext(applicationContext);
|
|
||||||
filter.setPreAuthActionsHandlerFactory(preAuthActionsHandlerFactory);
|
|
||||||
when(applicationContext.getBean(AdapterDeploymentContext.class)).thenReturn(deploymentContext);
|
|
||||||
when(deploymentContext.resolveDeployment(any(HttpFacade.class))).thenReturn(deployment);
|
|
||||||
when(preAuthActionsHandlerFactory.createPreAuthActionsHandler(any(HttpFacade.class))).thenReturn(preAuthActionsHandler);
|
|
||||||
filter.initFilterBean();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void shouldIgnoreChainWhenPreAuthActionHandlerHandled() throws Exception {
|
|
||||||
when(preAuthActionsHandler.handleRequest()).thenReturn(true);
|
|
||||||
|
|
||||||
filter.doFilter(request, response, chain);
|
|
||||||
|
|
||||||
verifyZeroInteractions(chain);
|
|
||||||
verify(nodesRegistrationManagement).tryRegister(deployment);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void shouldContinueChainWhenPreAuthActionHandlerDidNotHandle() throws Exception {
|
|
||||||
when(preAuthActionsHandler.handleRequest()).thenReturn(false);
|
|
||||||
|
|
||||||
filter.doFilter(request, response, chain);
|
|
||||||
|
|
||||||
verify(chain).doFilter(request, response);;
|
|
||||||
verify(nodesRegistrationManagement).tryRegister(deployment);
|
|
||||||
}
|
|
||||||
|
|
||||||
@After
|
|
||||||
public void tearDown() {
|
|
||||||
filter.destroy();
|
|
||||||
verify(nodesRegistrationManagement).stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak Tomcat Integration</name>
|
<name>Keycloak Tomcat Integration</name>
|
||||||
|
|||||||
@@ -14,38 +14,36 @@
|
|||||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~ See the License for the specific language governing permissions and
|
~ See the License for the specific language governing permissions and
|
||||||
~ limitations under the License.
|
~ limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>keycloak-tomcat-core-adapter</artifactId>
|
<artifactId>keycloak-tomcat-core-adapter</artifactId>
|
||||||
<name>Keycloak Tomcat Core Integration</name>
|
<name>Keycloak Tomcat Core Integration</name>
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<tomcat.version>6.0.41</tomcat.version>
|
<tomcat.version>6.0.41</tomcat.version>
|
||||||
</properties>
|
</properties>
|
||||||
<description />
|
<description />
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-core</artifactId>
|
<artifactId>keycloak-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-spi</artifactId>
|
<artifactId>keycloak-adapter-spi</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -53,57 +51,69 @@
|
|||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-tomcat-adapter-spi</artifactId>
|
<artifactId>keycloak-tomcat-adapter-spi</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-core</artifactId>
|
<artifactId>keycloak-adapter-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-core</artifactId>
|
<artifactId>jackson-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-annotations</artifactId>
|
<artifactId>jackson-annotations</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Authorization -->
|
<!-- Authorization -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-authz-client</artifactId>
|
<artifactId>keycloak-authz-client</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.tomcat</groupId>
|
<groupId>org.apache.tomcat</groupId>
|
||||||
<artifactId>tomcat-servlet-api</artifactId>
|
<artifactId>tomcat-servlet-api</artifactId>
|
||||||
<version>${tomcat.version}</version>
|
<version>${tomcat.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
-->
|
-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.tomcat</groupId>
|
<groupId>org.apache.tomcat</groupId>
|
||||||
<artifactId>catalina</artifactId>
|
<artifactId>catalina</artifactId>
|
||||||
<version>${tomcat.version}</version>
|
<version>${tomcat.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
+2
-2
@@ -93,7 +93,7 @@ public class CatalinaCookieTokenStore implements AdapterTokenStore {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void logout() {
|
public void logout() {
|
||||||
CookieTokenStore.removeCookie(deployment, facade);
|
CookieTokenStore.removeCookie(facade);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -132,7 +132,7 @@ public class CatalinaCookieTokenStore implements AdapterTokenStore {
|
|||||||
log.fine("Cleanup and expire cookie for user " + principal.getName() + " after failed refresh");
|
log.fine("Cleanup and expire cookie for user " + principal.getName() + " after failed refresh");
|
||||||
request.setUserPrincipal(null);
|
request.setUserPrincipal(null);
|
||||||
request.setAuthType(null);
|
request.setAuthType(null);
|
||||||
CookieTokenStore.removeCookie(deployment, facade);
|
CookieTokenStore.removeCookie(facade);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
|
|||||||
@@ -14,38 +14,36 @@
|
|||||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~ See the License for the specific language governing permissions and
|
~ See the License for the specific language governing permissions and
|
||||||
~ limitations under the License.
|
~ limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
<artifactId>keycloak-tomcat-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>keycloak-tomcat8-adapter</artifactId>
|
<artifactId>keycloak-tomcat8-adapter</artifactId>
|
||||||
<name>Keycloak Tomcat 8 Integration</name>
|
<name>Keycloak Tomcat 8 Integration</name>
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<tomcat.version>8.0.14</tomcat.version>
|
<tomcat.version>8.0.14</tomcat.version>
|
||||||
</properties>
|
</properties>
|
||||||
<description />
|
<description />
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-core</artifactId>
|
<artifactId>keycloak-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-adapter-core</artifactId>
|
<artifactId>keycloak-adapter-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -80,31 +78,43 @@
|
|||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
<artifactId>bcprov-jdk15on</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-core</artifactId>
|
<artifactId>jackson-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-annotations</artifactId>
|
<artifactId>jackson-annotations</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -31,14 +31,10 @@
|
|||||||
<description/>
|
<description/>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<keycloak.osgi.export>
|
<keycloak.osgi.export>
|
||||||
org.keycloak.adapters.undertow.*
|
org.keycloak.adapters.undertow.*
|
||||||
</keycloak.osgi.export>
|
</keycloak.osgi.export>
|
||||||
<keycloak.osgi.import>
|
<keycloak.osgi.import>
|
||||||
io.undertow.*;version="[1.4,3)",
|
|
||||||
*;resolution:=optional
|
*;resolution:=optional
|
||||||
</keycloak.osgi.import>
|
</keycloak.osgi.import>
|
||||||
</properties>
|
</properties>
|
||||||
@@ -47,6 +43,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -109,6 +106,15 @@
|
|||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
<!-- Adding OSGI metadata to the JAR without changing the packaging type. -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
|||||||
+2
-2
@@ -74,7 +74,7 @@ public class UndertowCookieTokenStore implements AdapterTokenStore {
|
|||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
log.debug("Account was not active, removing cookie and returning false");
|
log.debug("Account was not active, removing cookie and returning false");
|
||||||
CookieTokenStore.removeCookie(deployment, facade);
|
CookieTokenStore.removeCookie(facade);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@ public class UndertowCookieTokenStore implements AdapterTokenStore {
|
|||||||
KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal = CookieTokenStore.getPrincipalFromCookie(deployment, facade, this);
|
KeycloakPrincipal<RefreshableKeycloakSecurityContext> principal = CookieTokenStore.getPrincipalFromCookie(deployment, facade, this);
|
||||||
if (principal == null) return;
|
if (principal == null) return;
|
||||||
|
|
||||||
CookieTokenStore.removeCookie(deployment, facade);
|
CookieTokenStore.removeCookie(facade);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -31,6 +31,11 @@
|
|||||||
<name>Keycloak Wildfly Elytron OIDC Adapter</name>
|
<name>Keycloak Wildfly Elytron OIDC Adapter</name>
|
||||||
<description/>
|
<description/>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.target>1.8</maven.compiler.target>
|
||||||
|
<maven.compiler.source>1.8</maven.compiler.source>
|
||||||
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wildfly.common</groupId>
|
<groupId>org.wildfly.common</groupId>
|
||||||
@@ -50,6 +55,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -95,4 +101,4 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
+5
-2
@@ -18,9 +18,12 @@
|
|||||||
|
|
||||||
package org.keycloak.adapters.elytron;
|
package org.keycloak.adapters.elytron;
|
||||||
|
|
||||||
|
import java.security.Principal;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.KeycloakPrincipal;
|
import org.keycloak.KeycloakPrincipal;
|
||||||
import org.keycloak.KeycloakSecurityContext;
|
import org.keycloak.KeycloakSecurityContext;
|
||||||
|
import org.keycloak.adapters.AdapterTokenStore;
|
||||||
import org.keycloak.adapters.CookieTokenStore;
|
import org.keycloak.adapters.CookieTokenStore;
|
||||||
import org.keycloak.adapters.KeycloakDeployment;
|
import org.keycloak.adapters.KeycloakDeployment;
|
||||||
import org.keycloak.adapters.OidcKeycloakAccount;
|
import org.keycloak.adapters.OidcKeycloakAccount;
|
||||||
@@ -95,7 +98,7 @@ public class ElytronCookieTokenStore implements ElytronTokeStore {
|
|||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
log.debug("Account was not active, removing cookie and returning false");
|
log.debug("Account was not active, removing cookie and returning false");
|
||||||
CookieTokenStore.removeCookie(deployment, httpFacade);
|
CookieTokenStore.removeCookie(httpFacade);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -142,7 +145,7 @@ public class ElytronCookieTokenStore implements ElytronTokeStore {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CookieTokenStore.removeCookie(this.httpFacade.getDeployment(), this.httpFacade);
|
CookieTokenStore.removeCookie(this.httpFacade);
|
||||||
|
|
||||||
if (glo) {
|
if (glo) {
|
||||||
KeycloakSecurityContext ksc = (KeycloakSecurityContext) principal.getKeycloakSecurityContext();
|
KeycloakSecurityContext ksc = (KeycloakSecurityContext) principal.getKeycloakSecurityContext();
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak WildFly Integration</name>
|
<name>Keycloak WildFly Integration</name>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
-7
@@ -96,12 +96,6 @@ public class SecureDeploymentDefinition extends SimpleResourceDefinition {
|
|||||||
.setValidator(new IntRangeValidator(-1, true))
|
.setValidator(new IntRangeValidator(-1, true))
|
||||||
.setAllowExpression(true)
|
.setAllowExpression(true)
|
||||||
.build();
|
.build();
|
||||||
protected static final SimpleAttributeDefinition PUBLIC_KEY_CACHE_TTL =
|
|
||||||
new SimpleAttributeDefinitionBuilder("public-key-cache-ttl", ModelType.INT, true)
|
|
||||||
.setXmlName("public-key-cache-ttl")
|
|
||||||
.setAllowExpression(true)
|
|
||||||
.setValidator(new IntRangeValidator(-1, true))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
protected static final List<SimpleAttributeDefinition> DEPLOYMENT_ONLY_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
protected static final List<SimpleAttributeDefinition> DEPLOYMENT_ONLY_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
||||||
static {
|
static {
|
||||||
@@ -114,7 +108,6 @@ public class SecureDeploymentDefinition extends SimpleResourceDefinition {
|
|||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(TURN_OFF_CHANGE_SESSION);
|
DEPLOYMENT_ONLY_ATTRIBUTES.add(TURN_OFF_CHANGE_SESSION);
|
||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(TOKEN_MINIMUM_TIME_TO_LIVE);
|
DEPLOYMENT_ONLY_ATTRIBUTES.add(TOKEN_MINIMUM_TIME_TO_LIVE);
|
||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(MIN_TIME_BETWEEN_JWKS_REQUESTS);
|
DEPLOYMENT_ONLY_ATTRIBUTES.add(MIN_TIME_BETWEEN_JWKS_REQUESTS);
|
||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(PUBLIC_KEY_CACHE_TTL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static final List<SimpleAttributeDefinition> ALL_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
protected static final List<SimpleAttributeDefinition> ALL_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
||||||
|
|||||||
-8
@@ -194,13 +194,6 @@ public class SharedAttributeDefinitons {
|
|||||||
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
|
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
protected static final SimpleAttributeDefinition VERIFY_TOKEN_AUDIENCE =
|
|
||||||
new SimpleAttributeDefinitionBuilder("verify-token-audience", ModelType.BOOLEAN, true)
|
|
||||||
.setXmlName("verify-token-audience")
|
|
||||||
.setAllowExpression(true)
|
|
||||||
.setDefaultValue(new ModelNode(false))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
protected static final List<SimpleAttributeDefinition> ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
protected static final List<SimpleAttributeDefinition> ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
||||||
static {
|
static {
|
||||||
ATTRIBUTES.add(REALM_PUBLIC_KEY);
|
ATTRIBUTES.add(REALM_PUBLIC_KEY);
|
||||||
@@ -229,7 +222,6 @@ public class SharedAttributeDefinitons {
|
|||||||
ATTRIBUTES.add(AUTODETECT_BEARER_ONLY);
|
ATTRIBUTES.add(AUTODETECT_BEARER_ONLY);
|
||||||
ATTRIBUTES.add(IGNORE_OAUTH_QUERY_PARAMETER);
|
ATTRIBUTES.add(IGNORE_OAUTH_QUERY_PARAMETER);
|
||||||
ATTRIBUTES.add(PROXY_URL);
|
ATTRIBUTES.add(PROXY_URL);
|
||||||
ATTRIBUTES.add(VERIFY_TOKEN_AUDIENCE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
-3
@@ -50,7 +50,6 @@ keycloak.realm.principal-attribute=token attribute to use to set Principal name
|
|||||||
keycloak.realm.autodetect-bearer-only=autodetect bearer-only requests
|
keycloak.realm.autodetect-bearer-only=autodetect bearer-only requests
|
||||||
keycloak.realm.ignore-oauth-query-parameter=disable query parameter parsing for access_token
|
keycloak.realm.ignore-oauth-query-parameter=disable query parameter parsing for access_token
|
||||||
keycloak.realm.proxy-url=The URL for the HTTP proxy if one is used.
|
keycloak.realm.proxy-url=The URL for the HTTP proxy if one is used.
|
||||||
keycloak.realm.verify-token-audience=If true, then during bearer-only authentication, the adapter will verify if token contains this client name (resource) as an audience
|
|
||||||
|
|
||||||
keycloak.secure-deployment=A deployment secured by Keycloak
|
keycloak.secure-deployment=A deployment secured by Keycloak
|
||||||
keycloak.secure-deployment.add=Add a deployment to be secured by Keycloak
|
keycloak.secure-deployment.add=Add a deployment to be secured by Keycloak
|
||||||
@@ -88,11 +87,9 @@ keycloak.secure-deployment.principal-attribute=token attribute to use to set Pri
|
|||||||
keycloak.secure-deployment.turn-off-change-session-id-on-login=The session id is changed by default on a successful login. Change this to true if you want to turn this off
|
keycloak.secure-deployment.turn-off-change-session-id-on-login=The session id is changed by default on a successful login. Change this to true if you want to turn this off
|
||||||
keycloak.secure-deployment.token-minimum-time-to-live=The adapter will refresh the token if the current token is expired OR will expire in 'token-minimum-time-to-live' seconds or less
|
keycloak.secure-deployment.token-minimum-time-to-live=The adapter will refresh the token if the current token is expired OR will expire in 'token-minimum-time-to-live' seconds or less
|
||||||
keycloak.secure-deployment.min-time-between-jwks-requests=If adapter recognize token signed by unknown public key, it will try to download new public key from keycloak server. However it won't try to download if already tried it in less than 'min-time-between-jwks-requests' seconds
|
keycloak.secure-deployment.min-time-between-jwks-requests=If adapter recognize token signed by unknown public key, it will try to download new public key from keycloak server. However it won't try to download if already tried it in less than 'min-time-between-jwks-requests' seconds
|
||||||
keycloak.secure-deployment.public-key-cache-ttl=Maximum time the downloaded public keys are considered valid. When this time reach, the adapter is forced to download public keys from keycloak server
|
|
||||||
keycloak.secure-deployment.autodetect-bearer-only=autodetect bearer-only requests
|
keycloak.secure-deployment.autodetect-bearer-only=autodetect bearer-only requests
|
||||||
keycloak.secure-deployment.ignore-oauth-query-parameter=disable query parameter parsing for access_token
|
keycloak.secure-deployment.ignore-oauth-query-parameter=disable query parameter parsing for access_token
|
||||||
keycloak.secure-deployment.proxy-url=The URL for the HTTP proxy if one is used.
|
keycloak.secure-deployment.proxy-url=The URL for the HTTP proxy if one is used.
|
||||||
keycloak.secure-deployment.verify-token-audience=If true, then during bearer-only authentication, the adapter will verify if token contains this client name (resource) as an audience
|
|
||||||
keycloak.secure-deployment.credential=Credential value
|
keycloak.secure-deployment.credential=Credential value
|
||||||
|
|
||||||
keycloak.credential=Credential
|
keycloak.credential=Credential
|
||||||
|
|||||||
@@ -69,7 +69,6 @@
|
|||||||
<xs:element name="autodetect-bearer-only" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="autodetect-bearer-only" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="ignore-oauth-query-parameter" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="ignore-oauth-query-parameter" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="verify-token-audience" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
|
||||||
</xs:all>
|
</xs:all>
|
||||||
<xs:attribute name="name" type="xs:string" use="required">
|
<xs:attribute name="name" type="xs:string" use="required">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
@@ -113,11 +112,9 @@
|
|||||||
<xs:element name="turn-off-change-session-id-on-login" type="xs:boolean" minOccurs="0" maxOccurs="1" />
|
<xs:element name="turn-off-change-session-id-on-login" type="xs:boolean" minOccurs="0" maxOccurs="1" />
|
||||||
<xs:element name="token-minimum-time-to-live" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="token-minimum-time-to-live" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="min-time-between-jwks-requests" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="min-time-between-jwks-requests" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="public-key-cache-ttl" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
|
||||||
<xs:element name="autodetect-bearer-only" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="autodetect-bearer-only" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="ignore-oauth-query-parameter" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="ignore-oauth-query-parameter" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="verify-token-audience" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
|
||||||
</xs:all>
|
</xs:all>
|
||||||
<xs:attribute name="name" type="xs:string" use="required">
|
<xs:attribute name="name" type="xs:string" use="required">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
|
|||||||
-2
@@ -23,14 +23,12 @@
|
|||||||
<turn-off-change-session-id-on-login>false</turn-off-change-session-id-on-login>
|
<turn-off-change-session-id-on-login>false</turn-off-change-session-id-on-login>
|
||||||
<token-minimum-time-to-live>10</token-minimum-time-to-live>
|
<token-minimum-time-to-live>10</token-minimum-time-to-live>
|
||||||
<min-time-between-jwks-requests>20</min-time-between-jwks-requests>
|
<min-time-between-jwks-requests>20</min-time-between-jwks-requests>
|
||||||
<public-key-cache-ttl>3600</public-key-cache-ttl>
|
|
||||||
<realm-public-key>
|
<realm-public-key>
|
||||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4siLKUew0WYxdtq6/rwk4Uj/4amGFFnE/yzIxQVU0PUqz3QBRVkUWpDj0K6ZnS5nzJV/y6DHLEy7hjZTdRDphyF1sq09aDOYnVpzu8o2sIlMM8q5RnUyEfIyUZqwo8pSZDJ90fS0s+IDUJNCSIrAKO3w1lqZDHL6E/YFHXyzkvQIDAQAB
|
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4siLKUew0WYxdtq6/rwk4Uj/4amGFFnE/yzIxQVU0PUqz3QBRVkUWpDj0K6ZnS5nzJV/y6DHLEy7hjZTdRDphyF1sq09aDOYnVpzu8o2sIlMM8q5RnUyEfIyUZqwo8pSZDJ90fS0s+IDUJNCSIrAKO3w1lqZDHL6E/YFHXyzkvQIDAQAB
|
||||||
</realm-public-key>
|
</realm-public-key>
|
||||||
<auth-server-url>http://localhost:8080/auth</auth-server-url>
|
<auth-server-url>http://localhost:8080/auth</auth-server-url>
|
||||||
<ssl-required>EXTERNAL</ssl-required>
|
<ssl-required>EXTERNAL</ssl-required>
|
||||||
<proxy-url>http://localhost:9000</proxy-url>
|
<proxy-url>http://localhost:9000</proxy-url>
|
||||||
<verify-token-audience>true</verify-token-audience>
|
|
||||||
<credential name="secret">0aa31d98-e0aa-404c-b6e0-e771dba1e798</credential>
|
<credential name="secret">0aa31d98-e0aa-404c-b6e0-e771dba1e798</credential>
|
||||||
</secure-deployment>
|
</secure-deployment>
|
||||||
<secure-deployment name="http-endpoint">
|
<secure-deployment name="http-endpoint">
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -34,6 +34,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -83,7 +84,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.picketbox</groupId>
|
<groupId>org.picketbox</groupId>
|
||||||
<artifactId>picketbox</artifactId>
|
<artifactId>picketbox</artifactId>
|
||||||
<version>${picketbox.version}</version>
|
<version>4.0.20.Final</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -108,5 +109,17 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
<relativePath>../../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
-14
@@ -95,18 +95,6 @@ abstract class AbstractAdapterConfigurationDefinition extends SimpleResourceDefi
|
|||||||
.setValidator(new IntRangeValidator(-1, true))
|
.setValidator(new IntRangeValidator(-1, true))
|
||||||
.setAllowExpression(true)
|
.setAllowExpression(true)
|
||||||
.build();
|
.build();
|
||||||
protected static final SimpleAttributeDefinition PUBLIC_KEY_CACHE_TTL =
|
|
||||||
new SimpleAttributeDefinitionBuilder("public-key-cache-ttl", ModelType.INT, true)
|
|
||||||
.setXmlName("public-key-cache-ttl")
|
|
||||||
.setAllowExpression(true)
|
|
||||||
.setValidator(new IntRangeValidator(-1, true))
|
|
||||||
.build();
|
|
||||||
protected static final SimpleAttributeDefinition ADAPTER_STATE_COOKIE_PATH =
|
|
||||||
new SimpleAttributeDefinitionBuilder("adapter-state-cookie-path", ModelType.STRING, true)
|
|
||||||
.setXmlName("adapter-state-cookie-path")
|
|
||||||
.setAllowExpression(true)
|
|
||||||
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
static final List<SimpleAttributeDefinition> DEPLOYMENT_ONLY_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
static final List<SimpleAttributeDefinition> DEPLOYMENT_ONLY_ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
||||||
|
|
||||||
@@ -120,8 +108,6 @@ abstract class AbstractAdapterConfigurationDefinition extends SimpleResourceDefi
|
|||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(TURN_OFF_CHANGE_SESSION);
|
DEPLOYMENT_ONLY_ATTRIBUTES.add(TURN_OFF_CHANGE_SESSION);
|
||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(TOKEN_MINIMUM_TIME_TO_LIVE);
|
DEPLOYMENT_ONLY_ATTRIBUTES.add(TOKEN_MINIMUM_TIME_TO_LIVE);
|
||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(MIN_TIME_BETWEEN_JWKS_REQUESTS);
|
DEPLOYMENT_ONLY_ATTRIBUTES.add(MIN_TIME_BETWEEN_JWKS_REQUESTS);
|
||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(PUBLIC_KEY_CACHE_TTL);
|
|
||||||
DEPLOYMENT_ONLY_ATTRIBUTES.add(ADAPTER_STATE_COOKIE_PATH);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static final List<SimpleAttributeDefinition> ALL_ATTRIBUTES = new ArrayList();
|
static final List<SimpleAttributeDefinition> ALL_ATTRIBUTES = new ArrayList();
|
||||||
|
|||||||
-8
@@ -200,13 +200,6 @@ public class SharedAttributeDefinitons {
|
|||||||
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
|
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, true, true))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
protected static final SimpleAttributeDefinition VERIFY_TOKEN_AUDIENCE =
|
|
||||||
new SimpleAttributeDefinitionBuilder("verify-token-audience", ModelType.BOOLEAN, true)
|
|
||||||
.setXmlName("verify-token-audience")
|
|
||||||
.setAllowExpression(true)
|
|
||||||
.setDefaultValue(new ModelNode(false))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
|
|
||||||
protected static final List<SimpleAttributeDefinition> ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
protected static final List<SimpleAttributeDefinition> ATTRIBUTES = new ArrayList<SimpleAttributeDefinition>();
|
||||||
static {
|
static {
|
||||||
@@ -237,7 +230,6 @@ public class SharedAttributeDefinitons {
|
|||||||
ATTRIBUTES.add(AUTODETECT_BEARER_ONLY);
|
ATTRIBUTES.add(AUTODETECT_BEARER_ONLY);
|
||||||
ATTRIBUTES.add(IGNORE_OAUTH_QUERY_PARAMETER);
|
ATTRIBUTES.add(IGNORE_OAUTH_QUERY_PARAMETER);
|
||||||
ATTRIBUTES.add(PROXY_URL);
|
ATTRIBUTES.add(PROXY_URL);
|
||||||
ATTRIBUTES.add(VERIFY_TOKEN_AUDIENCE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isSet(ModelNode attributes, SimpleAttributeDefinition def) {
|
private static boolean isSet(ModelNode attributes, SimpleAttributeDefinition def) {
|
||||||
|
|||||||
-7
@@ -53,7 +53,6 @@ keycloak.realm.principal-attribute=token attribute to use to set Principal name
|
|||||||
keycloak.realm.autodetect-bearer-only=autodetect bearer-only requests
|
keycloak.realm.autodetect-bearer-only=autodetect bearer-only requests
|
||||||
keycloak.realm.ignore-oauth-query-parameter=disable query parameter parsing for access_token
|
keycloak.realm.ignore-oauth-query-parameter=disable query parameter parsing for access_token
|
||||||
keycloak.realm.proxy-url=The URL for the HTTP proxy if one is used.
|
keycloak.realm.proxy-url=The URL for the HTTP proxy if one is used.
|
||||||
keycloak.realm.verify-token-audience=If true, then during bearer-only authentication, the adapter will verify if token contains this client name (resource) as an audience
|
|
||||||
|
|
||||||
keycloak.secure-deployment=A deployment secured by Keycloak
|
keycloak.secure-deployment=A deployment secured by Keycloak
|
||||||
keycloak.secure-deployment.add=Add a deployment to be secured by Keycloak
|
keycloak.secure-deployment.add=Add a deployment to be secured by Keycloak
|
||||||
@@ -94,11 +93,8 @@ keycloak.secure-deployment.principal-attribute=token attribute to use to set Pri
|
|||||||
keycloak.secure-deployment.turn-off-change-session-id-on-login=The session id is changed by default on a successful login. Change this to true if you want to turn this off
|
keycloak.secure-deployment.turn-off-change-session-id-on-login=The session id is changed by default on a successful login. Change this to true if you want to turn this off
|
||||||
keycloak.secure-deployment.token-minimum-time-to-live=The adapter will refresh the token if the current token is expired OR will expire in 'token-minimum-time-to-live' seconds or less
|
keycloak.secure-deployment.token-minimum-time-to-live=The adapter will refresh the token if the current token is expired OR will expire in 'token-minimum-time-to-live' seconds or less
|
||||||
keycloak.secure-deployment.min-time-between-jwks-requests=If adapter recognize token signed by unknown public key, it will try to download new public key from keycloak server. However it won't try to download if already tried it in less than 'min-time-between-jwks-requests' seconds
|
keycloak.secure-deployment.min-time-between-jwks-requests=If adapter recognize token signed by unknown public key, it will try to download new public key from keycloak server. However it won't try to download if already tried it in less than 'min-time-between-jwks-requests' seconds
|
||||||
keycloak.secure-deployment.public-key-cache-ttl=Maximum time the downloaded public keys are considered valid. When this time reach, the adapter is forced to download public keys from keycloak server
|
|
||||||
keycloak.secure-deployment.ignore-oauth-query-parameter=disable query parameter parsing for access_token
|
keycloak.secure-deployment.ignore-oauth-query-parameter=disable query parameter parsing for access_token
|
||||||
keycloak.secure-deployment.proxy-url=The URL for the HTTP proxy if one is used.
|
keycloak.secure-deployment.proxy-url=The URL for the HTTP proxy if one is used.
|
||||||
keycloak.secure-deployment.verify-token-audience=If true, then during bearer-only authentication, the adapter will verify if token contains this client name (resource) as an audience
|
|
||||||
keycloak.secure-deployment.adapter-state-cookie-path=If set, defines the path used in cookies set by the adapter. Useful when deploying the application in the root context path.
|
|
||||||
|
|
||||||
keycloak.secure-server=A deployment secured by Keycloak
|
keycloak.secure-server=A deployment secured by Keycloak
|
||||||
keycloak.secure-server.add=Add a deployment to be secured by Keycloak
|
keycloak.secure-server.add=Add a deployment to be secured by Keycloak
|
||||||
@@ -139,11 +135,8 @@ keycloak.secure-server.principal-attribute=token attribute to use to set Princip
|
|||||||
keycloak.secure-server.turn-off-change-session-id-on-login=The session id is changed by default on a successful login. Change this to true if you want to turn this off
|
keycloak.secure-server.turn-off-change-session-id-on-login=The session id is changed by default on a successful login. Change this to true if you want to turn this off
|
||||||
keycloak.secure-server.token-minimum-time-to-live=The adapter will refresh the token if the current token is expired OR will expire in 'token-minimum-time-to-live' seconds or less
|
keycloak.secure-server.token-minimum-time-to-live=The adapter will refresh the token if the current token is expired OR will expire in 'token-minimum-time-to-live' seconds or less
|
||||||
keycloak.secure-server.min-time-between-jwks-requests=If adapter recognize token signed by unknown public key, it will try to download new public key from keycloak server. However it won't try to download if already tried it in less than 'min-time-between-jwks-requests' seconds
|
keycloak.secure-server.min-time-between-jwks-requests=If adapter recognize token signed by unknown public key, it will try to download new public key from keycloak server. However it won't try to download if already tried it in less than 'min-time-between-jwks-requests' seconds
|
||||||
keycloak.secure-server.public-key-cache-ttl=Maximum time the downloaded public keys are considered valid. When this time reach, the adapter is forced to download public keys from keycloak server
|
|
||||||
keycloak.secure-server.ignore-oauth-query-parameter=disable query parameter parsing for access_token
|
keycloak.secure-server.ignore-oauth-query-parameter=disable query parameter parsing for access_token
|
||||||
keycloak.secure-server.proxy-url=The URL for the HTTP proxy if one is used.
|
keycloak.secure-server.proxy-url=The URL for the HTTP proxy if one is used.
|
||||||
keycloak.secure-server.verify-token-audience=If true, then during bearer-only authentication, the adapter will verify if token contains this client name (resource) as an audience
|
|
||||||
keycloak.secure-server.adapter-state-cookie-path=If set, defines the path used in cookies set by the adapter. Useful when deploying the application in the root context path.
|
|
||||||
|
|
||||||
keycloak.secure-deployment.credential=Credential value
|
keycloak.secure-deployment.credential=Credential value
|
||||||
keycloak.secure-server.credential=Credential value
|
keycloak.secure-server.credential=Credential value
|
||||||
|
|||||||
-4
@@ -71,7 +71,6 @@
|
|||||||
<xs:element name="autodetect-bearer-only" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="autodetect-bearer-only" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="ignore-oauth-query-parameter" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="ignore-oauth-query-parameter" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="verify-token-audience" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
|
||||||
</xs:all>
|
</xs:all>
|
||||||
<xs:attribute name="name" type="xs:string" use="required">
|
<xs:attribute name="name" type="xs:string" use="required">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
@@ -117,12 +116,9 @@
|
|||||||
<xs:element name="turn-off-change-session-id-on-login" type="xs:boolean" minOccurs="0" maxOccurs="1" />
|
<xs:element name="turn-off-change-session-id-on-login" type="xs:boolean" minOccurs="0" maxOccurs="1" />
|
||||||
<xs:element name="token-minimum-time-to-live" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="token-minimum-time-to-live" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="min-time-between-jwks-requests" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="min-time-between-jwks-requests" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="public-key-cache-ttl" type="xs:integer" minOccurs="0" maxOccurs="1"/>
|
|
||||||
<xs:element name="autodetect-bearer-only" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="autodetect-bearer-only" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="ignore-oauth-query-parameter" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="ignore-oauth-query-parameter" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
<xs:element name="proxy-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
||||||
<xs:element name="verify-token-audience" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
|
|
||||||
<xs:element name="adapter-state-cookie-path" type="xs:string" minOccurs="0" maxOccurs="1"/>
|
|
||||||
</xs:all>
|
</xs:all>
|
||||||
<xs:attribute name="name" type="xs:string" use="required">
|
<xs:attribute name="name" type="xs:string" use="required">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
|
|||||||
-4
@@ -53,7 +53,6 @@
|
|||||||
<turn-off-change-session-id-on-login>false</turn-off-change-session-id-on-login>
|
<turn-off-change-session-id-on-login>false</turn-off-change-session-id-on-login>
|
||||||
<token-minimum-time-to-live>10</token-minimum-time-to-live>
|
<token-minimum-time-to-live>10</token-minimum-time-to-live>
|
||||||
<min-time-between-jwks-requests>20</min-time-between-jwks-requests>
|
<min-time-between-jwks-requests>20</min-time-between-jwks-requests>
|
||||||
<public-key-cache-ttl>3600</public-key-cache-ttl>
|
|
||||||
<realm-public-key>
|
<realm-public-key>
|
||||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4siLKUew0WYxdtq6/rwk4Uj/4amGFFnE/yzIxQVU0PUqz3QBRVkUWpDj0K6ZnS5nzJV/y6DHLEy7hjZTdRDphyF1sq09aDOYnVpzu8o2sIlMM8q5RnUyEfIyUZqwo8pSZDJ90fS0s+IDUJNCSIrAKO3w1lqZDHL6E/YFHXyzkvQIDAQAB
|
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4siLKUew0WYxdtq6/rwk4Uj/4amGFFnE/yzIxQVU0PUqz3QBRVkUWpDj0K6ZnS5nzJV/y6DHLEy7hjZTdRDphyF1sq09aDOYnVpzu8o2sIlMM8q5RnUyEfIyUZqwo8pSZDJ90fS0s+IDUJNCSIrAKO3w1lqZDHL6E/YFHXyzkvQIDAQAB
|
||||||
</realm-public-key>
|
</realm-public-key>
|
||||||
@@ -61,7 +60,6 @@
|
|||||||
<ssl-required>EXTERNAL</ssl-required>
|
<ssl-required>EXTERNAL</ssl-required>
|
||||||
<confidential-port>443</confidential-port>
|
<confidential-port>443</confidential-port>
|
||||||
<proxy-url>http://localhost:9000</proxy-url>
|
<proxy-url>http://localhost:9000</proxy-url>
|
||||||
<verify-token-audience>true</verify-token-audience>
|
|
||||||
<credential name="secret">0aa31d98-e0aa-404c-b6e0-e771dba1e798</credential>
|
<credential name="secret">0aa31d98-e0aa-404c-b6e0-e771dba1e798</credential>
|
||||||
<redirect-rewrite-rule name="^/wsmaster/api/(.*)$">api/$1/</redirect-rewrite-rule>
|
<redirect-rewrite-rule name="^/wsmaster/api/(.*)$">api/$1/</redirect-rewrite-rule>
|
||||||
</secure-deployment>
|
</secure-deployment>
|
||||||
@@ -69,7 +67,6 @@
|
|||||||
<realm>master</realm>
|
<realm>master</realm>
|
||||||
<resource>http-endpoint</resource>
|
<resource>http-endpoint</resource>
|
||||||
<use-resource-role-mappings>true</use-resource-role-mappings>
|
<use-resource-role-mappings>true</use-resource-role-mappings>
|
||||||
<adapter-state-cookie-path>/</adapter-state-cookie-path>
|
|
||||||
<realm-public-key>
|
<realm-public-key>
|
||||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4siLKUew0WYxdtq6/rwk4Uj/4amGFFnE/yzIxQVU0PUqz3QBRVkUWpDj0K6ZnS5nzJV/y6DHLEy7hjZTdRDphyF1sq09aDOYnVpzu8o2sIlMM8q5RnUyEfIyUZqwo8pSZDJ90fS0s+IDUJNCSIrAKO3w1lqZDHL6E/YFHXyzkvQIDAQAB
|
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4siLKUew0WYxdtq6/rwk4Uj/4amGFFnE/yzIxQVU0PUqz3QBRVkUWpDj0K6ZnS5nzJV/y6DHLEy7hjZTdRDphyF1sq09aDOYnVpzu8o2sIlMM8q5RnUyEfIyUZqwo8pSZDJ90fS0s+IDUJNCSIrAKO3w1lqZDHL6E/YFHXyzkvQIDAQAB
|
||||||
</realm-public-key>
|
</realm-public-key>
|
||||||
@@ -91,7 +88,6 @@
|
|||||||
<realm>jboss-infra</realm>
|
<realm>jboss-infra</realm>
|
||||||
<resource>wildfly-console</resource>
|
<resource>wildfly-console</resource>
|
||||||
<public-client>true</public-client>
|
<public-client>true</public-client>
|
||||||
<adapter-state-cookie-path>/</adapter-state-cookie-path>
|
|
||||||
<ssl-required>EXTERNAL</ssl-required>
|
<ssl-required>EXTERNAL</ssl-required>
|
||||||
<confidential-port>443</confidential-port>
|
<confidential-port>443</confidential-port>
|
||||||
<proxy-url>http://localhost:9000</proxy-url>
|
<proxy-url>http://localhost:9000</proxy-url>
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak Adapters</name>
|
<name>Keycloak Adapters</name>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-saml-eap-integration-pom</artifactId>
|
<artifactId>keycloak-saml-eap-integration-pom</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -63,6 +63,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logging</groupId>
|
<groupId>org.jboss.logging</groupId>
|
||||||
<artifactId>jboss-logging</artifactId>
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<version>${jboss.logging.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -113,5 +114,17 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<name>Keycloak SAML EAP Integration</name>
|
<name>Keycloak SAML EAP Integration</name>
|
||||||
@@ -30,11 +30,6 @@
|
|||||||
<artifactId>keycloak-saml-eap-integration-pom</artifactId>
|
<artifactId>keycloak-saml-eap-integration-pom</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-eap-integration-pom</artifactId>
|
<artifactId>keycloak-saml-eap-integration-pom</artifactId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -30,11 +30,6 @@
|
|||||||
<description/>
|
<description/>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
@@ -69,21 +64,25 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-naming</artifactId>
|
<artifactId>jboss-as-naming</artifactId>
|
||||||
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-server</artifactId>
|
<artifactId>jboss-as-server</artifactId>
|
||||||
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-ee</artifactId>
|
<artifactId>jboss-as-ee</artifactId>
|
||||||
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-web</artifactId>
|
<artifactId>jboss-as-web</artifactId>
|
||||||
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -104,6 +103,7 @@ projects that depend on this project.-->
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.as</groupId>
|
<groupId>org.jboss.as</groupId>
|
||||||
<artifactId>jboss-as-controller</artifactId>
|
<artifactId>jboss-as-controller</artifactId>
|
||||||
|
<version>${jboss.as.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -32,9 +32,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<timestamp>${maven.build.timestamp}</timestamp>
|
<timestamp>${maven.build.timestamp}</timestamp>
|
||||||
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
|
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
|
||||||
</properties>
|
</properties>
|
||||||
@@ -70,5 +67,17 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
Whitespace-only changes.
@@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>4.7.0.Final-SNAPSHOT</version>
|
<version>4.5.0.Final-SNAPSHOT</version>
|
||||||
<relativePath>../../../pom.xml</relativePath>
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -31,9 +31,6 @@
|
|||||||
<description/>
|
<description/>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
|
||||||
|
|
||||||
<timestamp>${maven.build.timestamp}</timestamp>
|
<timestamp>${maven.build.timestamp}</timestamp>
|
||||||
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
|
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
|
||||||
</properties>
|
</properties>
|
||||||
@@ -85,5 +82,17 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
-5
@@ -68,11 +68,6 @@ public class DeploymentBuilder {
|
|||||||
SP sp = adapter.getSps().get(0);
|
SP sp = adapter.getSps().get(0);
|
||||||
deployment.setConfigured(true);
|
deployment.setConfigured(true);
|
||||||
deployment.setEntityID(sp.getEntityID());
|
deployment.setEntityID(sp.getEntityID());
|
||||||
try {
|
|
||||||
URI.create(sp.getEntityID());
|
|
||||||
} catch (IllegalArgumentException ex) {
|
|
||||||
log.warnf("Entity ID is not an URI, assertion that restricts audience will fail. Update Entity ID to be URI.", sp.getEntityID());
|
|
||||||
}
|
|
||||||
deployment.setForceAuthentication(sp.isForceAuthentication());
|
deployment.setForceAuthentication(sp.isForceAuthentication());
|
||||||
deployment.setIsPassive(sp.isIsPassive());
|
deployment.setIsPassive(sp.isIsPassive());
|
||||||
deployment.setNameIDPolicyFormat(sp.getNameIDPolicyFormat());
|
deployment.setNameIDPolicyFormat(sp.getNameIDPolicyFormat());
|
||||||
|
|||||||
+1
-10
@@ -84,7 +84,6 @@ import org.keycloak.dom.saml.v2.protocol.ExtensionsType;
|
|||||||
import org.keycloak.rotation.KeyLocator;
|
import org.keycloak.rotation.KeyLocator;
|
||||||
import org.keycloak.saml.processing.core.util.KeycloakKeySamlExtensionGenerator;
|
import org.keycloak.saml.processing.core.util.KeycloakKeySamlExtensionGenerator;
|
||||||
import org.keycloak.saml.processing.core.util.XMLEncryptionUtil;
|
import org.keycloak.saml.processing.core.util.XMLEncryptionUtil;
|
||||||
import org.keycloak.saml.validators.ConditionsValidator;
|
|
||||||
import org.keycloak.saml.validators.DestinationValidator;
|
import org.keycloak.saml.validators.DestinationValidator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -343,15 +342,7 @@ public abstract class AbstractSamlAuthenticationHandler implements SamlAuthentic
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
assertion = AssertionUtil.getAssertion(responseHolder, responseType, deployment.getDecryptionKey());
|
assertion = AssertionUtil.getAssertion(responseHolder, responseType, deployment.getDecryptionKey());
|
||||||
ConditionsValidator.Builder cvb = new ConditionsValidator.Builder(assertion.getID(), assertion.getConditions(), destinationValidator);
|
if (AssertionUtil.hasExpired(assertion)) {
|
||||||
try {
|
|
||||||
cvb.addAllowedAudience(URI.create(deployment.getEntityID()));
|
|
||||||
// getDestination has been validated to match request URL already so it matches SAML endpoint
|
|
||||||
cvb.addAllowedAudience(URI.create(responseType.getDestination()));
|
|
||||||
} catch (IllegalArgumentException ex) {
|
|
||||||
// warning has been already emitted in DeploymentBuilder
|
|
||||||
}
|
|
||||||
if (! cvb.build().isValid()) {
|
|
||||||
return initiateLogin();
|
return initiateLogin();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
Loaded 100 of 1424 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user