CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-apereo-cas--cas-server-core-multitenancy

Apereo CAS Core Multitenancy library providing tenant management capabilities for Central Authentication Service

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

CAS Server Core Multitenancy

CAS Server Core Multitenancy is a Java library that provides comprehensive tenant management capabilities for the Central Authentication Service (CAS). It enables multi-tenant authentication deployments where different organizations or environments can coexist within a single CAS infrastructure while maintaining complete isolation and customization capabilities for each tenant.

Package Information

  • Package Name: cas-server-core-multitenancy
  • Package Type: maven
  • Language: Java
  • Version: 7.2.4
  • Group ID: org.apereo.cas
  • Installation: Add dependency to your Maven/Gradle build file

Maven:

<dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-core-multitenancy</artifactId>
    <version>7.2.4</version>
</dependency>

Gradle:

implementation 'org.apereo.cas:cas-server-core-multitenancy:7.2.4'

Core Imports

import org.apereo.cas.multitenancy.TenantsManager;
import org.apereo.cas.multitenancy.TenantExtractor;
import org.apereo.cas.multitenancy.TenantDefinition;
import org.apereo.cas.multitenancy.DefaultTenantsManager;
import org.apereo.cas.multitenancy.DefaultTenantExtractor;

Basic Usage

import org.apereo.cas.multitenancy.*;
import org.apereo.cas.configuration.CasConfigurationProperties;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import java.util.Optional;

// Create a tenants manager with JSON configuration
Resource tenantsConfig = new ClassPathResource("tenants.json");
TenantsManager tenantsManager = new DefaultTenantsManager(tenantsConfig);

// Find a specific tenant
Optional<TenantDefinition> tenant = tenantsManager.findTenant("tenant1");
if (tenant.isPresent()) {
    TenantDefinition tenantDef = tenant.get();
    System.out.println("Tenant: " + tenantDef.getId());
    System.out.println("Description: " + tenantDef.getDescription());
}

// Extract tenant from request path (requires CAS configuration)
CasConfigurationProperties casProperties = new CasConfigurationProperties();
TenantExtractor extractor = new DefaultTenantExtractor(tenantsManager, casProperties);
Optional<TenantDefinition> extractedTenant = extractor.extract("/tenants/tenant1/login");

Architecture

The CAS multitenancy module is built around several key components:

  • Tenant Management: Central repository for tenant definitions with JSON-based configuration and dynamic reloading
  • Tenant Extraction: URL pattern matching to identify tenant context from incoming requests
  • Policy Framework: Separate, configurable policies for authentication, communication, delegation, and multifactor authentication per tenant
  • Spring Integration: Full Spring Boot auto-configuration with proper bean lifecycle management
  • Configuration Watching: File system monitoring for dynamic tenant configuration updates

Capabilities

Tenant Management

Core functionality for managing tenant definitions, including loading from JSON configuration files and providing lookup capabilities.

public interface TenantsManager {
    Optional<TenantDefinition> findTenant(String tenantId);
    List<TenantDefinition> findTenants();
}

public class DefaultTenantsManager implements TenantsManager, DisposableBean {
    public DefaultTenantsManager();
    public DefaultTenantsManager(Resource resource);
}

Tenant Management

Tenant Extraction

System for extracting tenant context from HTTP requests using configurable URL patterns and request processing.

public interface TenantExtractor {
    TenantsManager getTenantsManager();
    Optional<TenantDefinition> extract(HttpServletRequest request);
    Optional<TenantDefinition> extract(RequestContext requestContext);
    Optional<TenantDefinition> extract(String requestPath);
    static String tenantIdFromPath(String requestPath);
}

public class DefaultTenantExtractor implements TenantExtractor {
    public DefaultTenantExtractor(TenantsManager tenantsManager, CasConfigurationProperties casProperties);
}

Tenant Extraction

Tenant Definition and Policies

Complete tenant configuration model with separate policy objects for different aspects of authentication and communication.

public class TenantDefinition implements Serializable {
    private String id;
    private String description;
    private TenantAuthenticationPolicy authenticationPolicy;
    private TenantCommunicationPolicy communicationPolicy;
    private TenantDelegatedAuthenticationPolicy delegatedAuthenticationPolicy;
    private TenantMultifactorAuthenticationPolicy multifactorAuthenticationPolicy;
    
    public String getId();
    public void setId(String id);
    public String getDescription();
    public void setDescription(String description);
    public TenantAuthenticationPolicy getAuthenticationPolicy();
    public void setAuthenticationPolicy(TenantAuthenticationPolicy authenticationPolicy);
    public TenantCommunicationPolicy getCommunicationPolicy();
    public void setCommunicationPolicy(TenantCommunicationPolicy communicationPolicy);
    public TenantDelegatedAuthenticationPolicy getDelegatedAuthenticationPolicy();
    public void setDelegatedAuthenticationPolicy(TenantDelegatedAuthenticationPolicy delegatedAuthenticationPolicy);
    public TenantMultifactorAuthenticationPolicy getMultifactorAuthenticationPolicy();
    public void setMultifactorAuthenticationPolicy(TenantMultifactorAuthenticationPolicy multifactorAuthenticationPolicy);
}

Tenant Policies

Spring Configuration

Auto-configuration classes and beans for seamless Spring Boot integration with proper conditional configuration.

@AutoConfiguration
@EnableConfigurationProperties(CasConfigurationProperties.class)
@ConditionalOnFeatureEnabled(feature = CasFeatureModule.FeatureCatalog.Multitenancy)
public class CasCoreMultitenancyAutoConfiguration {
    @Bean
    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    @ConditionalOnMissingBean(name = TenantsManager.BEAN_NAME)
    public TenantsManager tenantsManager(CasConfigurationProperties casProperties) throws Exception;
    
    @Bean
    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    @ConditionalOnMissingBean(name = TenantExtractor.BEAN_NAME)
    public TenantExtractor tenantExtractor(CasConfigurationProperties casProperties, 
        @Qualifier(TenantsManager.BEAN_NAME) TenantsManager tenantsManager);
    
    @Bean
    @ConditionalOnMissingBean(name = "casMultitenancyEndpointConfigurer")
    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    public CasWebSecurityConfigurer<HttpSecurity> casMultitenancyEndpointConfigurer();
}

Spring Integration

Common Types

Core Constants

public interface TenantsManager {
    String BEAN_NAME = "tenantsManager";
}

public interface TenantExtractor {
    String BEAN_NAME = "tenantExtractor";
    Pattern PATTERN_TENANTS = Pattern.compile("tenants/(.+)/(.+)", Pattern.CASE_INSENSITIVE);
}

Exception Types

public class UnknownTenantException extends RuntimeException {
    public UnknownTenantException(String message);
}
Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.apereo.cas/cas-server-core-multitenancy@7.2.x
Publish Source
CLI
Badge
tessl/maven-org-apereo-cas--cas-server-core-multitenancy badge