MagentoOidcIntegration.java
package com.cloudforge.core.oidc;
import com.cloudforge.core.interfaces.Ec2Context;
import com.cloudforge.core.interfaces.OidcConfiguration;
import com.cloudforge.core.interfaces.OidcIntegration;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* OIDC integration for Magento 2 using miniOrange module.
*
* <p>This integration uses the miniOrange OAuth/OIDC SSO module
* to enable OIDC authentication with AWS Cognito or other providers.</p>
*
* <h2>Module Details:</h2>
* <ul>
* <li>Name: miniOrange OAuth Single Sign-On</li>
* <li>Marketplace: Adobe Commerce Marketplace</li>
* <li>Supports: OAuth 2.0, OpenID Connect</li>
* </ul>
*
* @since 3.1.0
* @see OidcIntegration
*/
public class MagentoOidcIntegration implements OidcIntegration {
private static final String CALLBACK_PATH = "/mioauth/actions/sendAuthorizationRequest";
@Override
public boolean isSupported() {
return true;
}
@Override
public String getIntegrationMethod() {
return "miniOrange OAuth/OIDC SSO Module";
}
@Override
public Map<String, String> getEnvironmentVariables(OidcConfiguration config) {
Map<String, String> env = new HashMap<>();
env.put("MAGENTO_OIDC_CLIENT_ID", config.getClientId());
env.put("MAGENTO_OIDC_AUTHORIZE_URL", config.getAuthorizationEndpoint());
env.put("MAGENTO_OIDC_TOKEN_URL", config.getTokenEndpoint());
env.put("MAGENTO_OIDC_USERINFO_URL", config.getUserInfoEndpoint());
env.put("MAGENTO_OIDC_LOGOUT_URL", config.getLogoutEndpoint());
env.put("MAGENTO_OIDC_SCOPE", config.getScopes() != null ? config.getScopes() : "openid email profile");
return env;
}
@Override
public String getConfigurationFile(OidcConfiguration config) {
return """
<?php
/**
* CloudForge OIDC Configuration for Magento
* Auto-generated - Do not edit manually
*
* Configure via Stores > Configuration > miniOrange > OAuth Client
*/
return [
'client_id' => getenv('MAGENTO_OIDC_CLIENT_ID'),
'client_secret' => getenv('MAGENTO_OIDC_CLIENT_SECRET'),
'authorize_url' => getenv('MAGENTO_OIDC_AUTHORIZE_URL'),
'token_url' => getenv('MAGENTO_OIDC_TOKEN_URL'),
'userinfo_url' => getenv('MAGENTO_OIDC_USERINFO_URL'),
'scope' => getenv('MAGENTO_OIDC_SCOPE') ?: 'openid email profile',
];
""";
}
@Override
public String getConfigurationFilePath() {
return "/var/www/html/app/etc/cloudforge-oidc.php";
}
@Override
public List<String> getUserDataCommands(OidcConfiguration config, Ec2Context context) {
List<String> commands = new ArrayList<>();
commands.add("# Install Magento OIDC module");
commands.add("echo 'Configuring Magento OIDC...' >> /var/log/userdata.log");
// Note: miniOrange module requires manual installation from marketplace
// This configures the environment for when the module is installed
commands.add("cat > /var/www/html/app/etc/cloudforge-oidc.php << 'OIDC_EOF'");
commands.add("<?php");
commands.add("// CloudForge OIDC Configuration");
commands.add("return [");
commands.add(" 'enabled' => true,");
commands.add(" 'provider' => 'cognito',");
commands.add("];");
commands.add("OIDC_EOF");
commands.add("chown nginx:nginx /var/www/html/app/etc/cloudforge-oidc.php");
commands.add("chmod 644 /var/www/html/app/etc/cloudforge-oidc.php");
commands.add("echo 'Magento OIDC configured' >> /var/log/userdata.log");
return commands;
}
@Override
public String getPostDeploymentInstructions() {
return """
Magento OIDC Integration Setup
==============================
The miniOrange OAuth/OIDC SSO module must be installed from the
Adobe Commerce Marketplace.
Installation Steps:
1. Purchase/download the module from marketplace.magento.com
2. Install via composer: composer require miniorange/module-oauth-sso
3. Enable the module: bin/magento module:enable MiniOrange_OAuth
4. Run setup: bin/magento setup:upgrade
5. Deploy static content: bin/magento setup:static-content:deploy
Configuration:
1. Navigate to Stores > Configuration > miniOrange > OAuth Client
2. Enter the following settings:
- Client ID: From environment variable MAGENTO_OIDC_CLIENT_ID
- Client Secret: From Secrets Manager
- Authorization URL: From MAGENTO_OIDC_AUTHORIZE_URL
- Token URL: From MAGENTO_OIDC_TOKEN_URL
- UserInfo URL: From MAGENTO_OIDC_USERINFO_URL
Testing:
1. Clear Magento cache: bin/magento cache:clean
2. Navigate to customer login page
3. Click "Login with SSO" button
4. Verify redirect to Cognito and back
Troubleshooting:
- Check var/log/system.log for errors
- Verify callback URL is registered in Cognito
- Ensure HTTPS is properly configured
""";
}
@Override
public String getContainerStartupCommand() {
return "/usr/local/bin/docker-php-entrypoint php-fpm";
}
@Override
public String getOidcCallbackPath() {
return CALLBACK_PATH;
}
@Override
public boolean isDistroless() {
return false;
}
@Override
public boolean supportsAlbOidc() {
return true;
}
@Override
public boolean supportsCognito() {
return true;
}
@Override
public boolean supportsIdentityCenterSaml() {
return false;
}
@Override
public String getAuthenticationType() {
return "OIDC";
}
}