Commit 5db42ccb authored by Brian Long's avatar Brian Long
Browse files

initial checkin

parents
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+11 −0
Original line number Diff line number Diff line
# Maven
target
pom.xml.versionsBackup

# Eclipse
.project
.classpath
.settings

# Visual Studio Code
.factorypath

pom.xml

0 → 100644
+65 −0
Original line number Diff line number Diff line
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.inteligr8.activiti</groupId>
	<artifactId>oidc-activiti-app-ext</artifactId>
	<version>1.0-SNAPSHOT</version>
	<name>Keycloak Authentication &amp; Authorization for APS</name>

	<properties>
		<maven.compiler.source>11</maven.compiler.source>
		<maven.compiler.target>11</maven.compiler.target>
		<maven.compiler.release>11</maven.compiler.release>

		<aps.version>1.11.1.1</aps.version>
		<keycloak.version>6.0.1</keycloak.version>
		<spring-security-oauth2.version>2.0.17.RELEASE</spring-security-oauth2.version>
		<slf4j.version>1.7.26</slf4j.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.security.oauth</groupId>
			<artifactId>spring-security-oauth2</artifactId>
			<version>${spring-security-oauth2.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.keycloak</groupId>
			<artifactId>keycloak-spring-security-adapter</artifactId>
			<version>${keycloak.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>com.activiti</groupId>
			<artifactId>activiti-app</artifactId>
			<version>${aps.version}</version>
			<classifier>classes</classifier>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>com.activiti</groupId>
			<artifactId>activiti-app-logic</artifactId>
			<version>${aps.version}</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>

	<repositories>
		<repository>
			<id>alfresco-public</id>
			<url>https://artifacts.alfresco.com/nexus/content/repositories/public</url>
		</repository>
		<repository>
			<id>activiti-releases</id>
			<url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-enterprise-releases</url>
		</repository>
	</repositories>
</project>
 No newline at end of file
+10 −0
Original line number Diff line number Diff line
package com.activiti.extension.conf;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = {"com.inteligr8.activiti.oidc"})
public class OidcExtSpringComponentScanner {

}
+54 −0
Original line number Diff line number Diff line
package com.inteligr8.activiti.ais;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import org.keycloak.KeycloakPrincipal;
import org.keycloak.KeycloakSecurityContext;
import org.keycloak.adapters.OidcKeycloakAccount;
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
import org.keycloak.representations.AccessToken;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;

import com.activiti.security.identity.service.authentication.provider.IdentityServiceAuthenticationToken;

public abstract class AbstractIdentityServiceActivitiAuthenticator implements Authenticator {
	
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    

    
    protected AccessToken getOidcAccessToken(Authentication auth) {
    	KeycloakSecurityContext ksc = this.getKeycloakSecurityContext(auth);
    	return ksc.getToken();
    }
    
    @SuppressWarnings("unchecked")
	protected KeycloakSecurityContext getKeycloakSecurityContext(Authentication auth) {
    	if (auth instanceof KeycloakAuthenticationToken) {
    		this.logger.debug("Fetching KeycloakSecurityContext from KeycloakAuthenticationToken");
    		if (auth.getPrincipal() instanceof KeycloakPrincipal) {
    			return ((KeycloakPrincipal<? extends KeycloakSecurityContext>)auth.getPrincipal()).getKeycloakSecurityContext();
    		} else {
    			return null;
    		}
    	} else if (auth instanceof IdentityServiceAuthenticationToken) {
    		this.logger.debug("Fetching KeycloakSecurityContext from IdentityServiceAuthenticationToken");
    		OidcKeycloakAccount account = ((IdentityServiceAuthenticationToken)auth).getAccount();
    		return account == null ? null : account.getKeycloakSecurityContext();
    	} else {
    		return null;
    	}
    }
    
    protected Set<String> toSet(Collection<? extends GrantedAuthority> grantedAuthorities) {
    	Set<String> authorities = new HashSet<>(grantedAuthorities.size());
    	for (GrantedAuthority grantedAuthority : grantedAuthorities)
    		authorities.add(grantedAuthority.getAuthority());
    	return authorities;
    }
}
+14 −0
Original line number Diff line number Diff line
package com.inteligr8.activiti.ais;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;

public interface Authenticator {
	
    default void preAuthenticate(Authentication authentication) throws AuthenticationException {
    }
    
    default void postAuthenticate(Authentication authentication) throws AuthenticationException {
    }
    
}
Loading