initial commit
This commit is contained in:
commit
6e86c7ffeb
|
|
@ -0,0 +1 @@
|
|||
target
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.example.keycloak</groupId>
|
||||
<artifactId>redirect-uri-authenticator</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Redirect URI Authenticator</name>
|
||||
<description>Keycloak Authenticator zur Speicherung der redirectUri</description>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<keycloak.version>23.0.7</keycloak.version>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<!-- Keycloak Server SPI -->
|
||||
<dependency>
|
||||
<groupId>org.keycloak</groupId>
|
||||
<artifactId>keycloak-server-spi</artifactId>
|
||||
<version>${keycloak.version}</version>
|
||||
</dependency>
|
||||
<!-- Keycloak Server SPI Private -->
|
||||
<dependency>
|
||||
<groupId>org.keycloak</groupId>
|
||||
<artifactId>keycloak-server-spi-private</artifactId>
|
||||
<version>${keycloak.version}</version>
|
||||
</dependency>
|
||||
<!-- Keycloak Core (not always necessary, but kann helfen) -->
|
||||
<dependency>
|
||||
<groupId>org.keycloak</groupId>
|
||||
<artifactId>keycloak-core</artifactId>
|
||||
<version>${keycloak.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.keycloak</groupId>
|
||||
<artifactId>keycloak-services</artifactId>
|
||||
<version>${keycloak.version}</version>
|
||||
</dependency>
|
||||
<!-- Jakarta WS RS API -->
|
||||
<dependency>
|
||||
<groupId>jakarta.ws.rs</groupId>
|
||||
<artifactId>jakarta.ws.rs-api</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</dependency>
|
||||
<!-- Optional: Lombok für einfachere Getter/Setter -->
|
||||
<!-- <dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.26</version>
|
||||
<scope>provided</scope>
|
||||
</dependency> -->
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- Maven Compiler Plugin -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.10.1</version>
|
||||
<configuration>
|
||||
<source>${maven.compiler.source}</source>
|
||||
<target>${maven.compiler.target}</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- Maven JAR Plugin -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.2.2</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
package com.example.keycloak;
|
||||
|
||||
import org.keycloak.authentication.AuthenticationFlowContext;
|
||||
import org.keycloak.authentication.Authenticator;
|
||||
import org.keycloak.authentication.AuthenticationFlowError;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.RealmModel;
|
||||
import org.keycloak.models.UserModel;
|
||||
import jakarta.ws.rs.core.MultivaluedMap;
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class RedirectUriAuthenticator implements Authenticator {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(RedirectUriAuthenticator.class);
|
||||
|
||||
@Override
|
||||
public void authenticate(AuthenticationFlowContext context) {
|
||||
logger.info("RedirectUriAuthenticator: authenticate() called");
|
||||
|
||||
// Extrahiere 'redirect_uri' aus den Query-Parametern
|
||||
String redirectUri = context.getAuthenticationSession().getClientNotes().get("redirect_uri");
|
||||
logger.infof("RedirectUriAuthenticator: Received redirect_uri: %s", redirectUri);
|
||||
|
||||
if (redirectUri != null) {
|
||||
String priceID = extractLastPartOfUrl(redirectUri);
|
||||
if (priceID.length()>0){
|
||||
UserModel user = context.getUser();
|
||||
user.setAttribute("priceID", Arrays.asList(priceID));
|
||||
logger.infof("RedirectUriAuthenticator: Set priceID attribute for user %s", user.getUsername());
|
||||
}
|
||||
} else {
|
||||
logger.info("RedirectUriAuthenticator: No redirect_uri provided");
|
||||
}
|
||||
|
||||
context.success();
|
||||
}
|
||||
|
||||
public String extractLastPartOfUrl(String url) {
|
||||
if (url == null || url.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
int lastSlashIndex = url.lastIndexOf('/');
|
||||
if (lastSlashIndex == -1 || lastSlashIndex == url.length() - 1) {
|
||||
return url;
|
||||
}
|
||||
|
||||
return url.substring(lastSlashIndex + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void action(AuthenticationFlowContext context) {
|
||||
logger.info("RedirectUriAuthenticator: action() called");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean requiresUser() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean configuredFor(org.keycloak.models.KeycloakSession session,
|
||||
org.keycloak.models.RealmModel realm,
|
||||
UserModel user) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
logger.info("RedirectUriAuthenticator: close() called");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRequiredActions(KeycloakSession session, RealmModel realm, UserModel user) {
|
||||
logger.info("RedirectUriAuthenticator: setRequiredActions() called");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
package com.example.keycloak;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
import org.keycloak.authentication.Authenticator;
|
||||
import org.keycloak.authentication.AuthenticatorFactory;
|
||||
import org.keycloak.authentication.ConfigurableAuthenticatorFactory;
|
||||
import org.keycloak.models.AuthenticationExecutionModel.Requirement;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.KeycloakSessionFactory;
|
||||
import org.keycloak.provider.ProviderConfigProperty;
|
||||
|
||||
public class RedirectUriAuthenticatorFactory implements AuthenticatorFactory, ConfigurableAuthenticatorFactory {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(RedirectUriAuthenticatorFactory.class);
|
||||
public static final String PROVIDER_ID = "redirect-uri-authenticator";
|
||||
|
||||
@Override
|
||||
public Authenticator create(KeycloakSession session) {
|
||||
logger.info("RedirectUriAuthenticatorFactory: create() called");
|
||||
return new RedirectUriAuthenticator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(org.keycloak.Config.Scope config) {
|
||||
logger.info("RedirectUriAuthenticatorFactory: init() called");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postInit(KeycloakSessionFactory factory) {
|
||||
logger.info("RedirectUriAuthenticatorFactory: postInit() called");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
logger.info("RedirectUriAuthenticatorFactory: close() called");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return PROVIDER_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayType() {
|
||||
return "Redirect URI Authenticator";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getReferenceCategory() {
|
||||
return null; // Optional: Implementieren Sie dies bei Bedarf
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isConfigurable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isUserSetupAllowed() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProviderConfigProperty> getConfigProperties() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHelpText() {
|
||||
return "Redirect URI Authenticator";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Requirement[] getRequirementChoices() {
|
||||
return new Requirement[] { Requirement.REQUIRED };
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
com.example.keycloak.RedirectUriAuthenticatorFactory
|
||||
Loading…
Reference in New Issue