Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Register OAuth providers for specific domains
  • Authenticate users using domain-specific provider credentials
  • Domain-level oauth2.enabled setting to control OAuth availability per domain
  • Error handling - duplicate provider rejection, provider not found, OAuth disabled for domain

API Changes:

registerOAuthProvider

New parameter:

  • domainid: optional UUID parameter to register the OAuth provider for a specific domain. If not provided, the provider is registered at the global level.

listOAuthProviders

New parameter:

  • domainid: optional UUID parameter to filter providers by domain. When specified, returns providers for that domain plus global providers. Use -1 to list only global providers.

New response field:

  • domainid: indicates the domain association of the provider (null for global).

verifyOAuthCodeAndGetUser

New parameters:

  • domainid: optional UUID parameter to lookup provider for a specific domain.
  • domain: optional string parameter to lookup provider by domain path (e.g., /ROOT/Engineering).

If both are provided, domainid takes precedence.

oauthlogin

No new parameters. Existing domain and domainid parameters are now also used to determine which OAuth provider credentials to use during authentication.


CloudMonkey (cmk) Examples:

Register domain-specific OAuth provider:


Code Block
languagebash
cmk register oauthprovider \
    provider=github \
    description="Engineering GitHub" \
    clientid="Iv1.abc123" \
    secretkey="secret456" \
    redirecturi="https://cloudstack.example.com/client/oauth2" \
    domainid=<domain-uuid>

List providers for a domain:


Code Block
languagebash
cmk list oauthproviders domainid=<domain-uuid>

List only global providers

Code Block
languagebash
cmk list oauthproviders domainid=-1

Database Changes:

Table: oauth_provider:

Code Block
languagesql
ALTER TABLE `cloud`.`oauth_provider`
  ADD COLUMN `domain_id` bigint unsigned DEFAULT NULL;

ALTER TABLE `cloud`.`oauth_provider`
  ADD CONSTRAINT `fk_oauth_provider__domain_id`
  FOREIGN KEY (`domain_id`) REFERENCES `domain`(`id`);

ALTER TABLE `cloud`.`oauth_provider`
  ADD INDEX `i_oauth_provider__domain_id`(`domain_id`);

ALTER TABLE `cloud`.`oauth_provider`
  ADD UNIQUE KEY `uk_oauth_provider__provider_domain` (`provider`, `domain_id`);


  • domain_id = NULL indicates a global provider
  • Unique constraint on (provider, domain_id) prevents duplicate registrations