[
https://issues.apache.org/jira/browse/GUACAMOLE-2140?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tom P updated GUACAMOLE-2140:
-----------------------------
Description:
h2. Summary
Requesting API support for persisting TOTP disable attributes when TOTP is
globally enabled, avoiding database workarounds during automated deployment.
_Edit: clarified API behaviour after further testing._
h2. Use Case: Automated Deployment
Our deployment scenario requires:
* {*}Global TOTP{*}: Enabled for all new users by default{*}{*}
* {*}API automation user{*}: TOTP disabled for programmatic access
* {*}Custom admin user{*}: TOTP enabled for interactive use
This configuration enables automation workflows that cannot handle interactive
TOTP challenges.
h2. Current Problem
Automated installed is done in 2 phases
# Automated user creation with TOTP disabled attribute
# Enabling TOTP
When TOTP is *not globally enabled* ('Phase 1'), the REST API does not store
TOTP disable attributes:
{code:python}
# This this call works during Phase 1 (TOTP not globally enabled)
api_attributes = {"guac-totp-disabled": "true"}
client.create_user(api_user, api_pass, api_attributes)
client.update_user_attributes(api_user, {"guac-totp-disabled": "true"})
{code}
However, when TOTP is *globally enabled* ('Phase 2'), TOTP is still enabled for
all users as the attribute was not saved
h3. Root Cause
API does not save TOTP user attributes when TOTP extension is not enabled.
h2. Current Workaround
Database manipulation is required to restore the disable attribute:
{code:sql}
-- Restore the disable attribute
INSERT INTO guacamole_user_attribute (user_id, attribute_name, attribute_value)
VALUES (user_id, 'guac-totp-disabled', 'true')
ON DUPLICATE KEY UPDATE attribute_value='true';
-- Clear forced enrolment
DELETE FROM guacamole_user_attribute
WHERE user_id = user_id
AND attribute_name IN ('guac-totp-key-secret', 'guac-totp-key-confirmed');
{code}
h2. Proposed Improvement
Modify the API module to save {{guac-totp-disabled}} attributes for new and
updated users, even when global TOTP is disabled.
h2. Benefits
* Eliminates need for database workarounds
* Simplifies automated deploys
was:
h2. Summary
Requesting API support for persisting TOTP disable attributes when TOTP is
globally enabled, avoiding database workarounds during automated deployment.
h2. Use Case: Automated Deployment
Our deployment scenario requires:
* {*}Global TOTP{*}: Enabled for all new users by default{*}{*}
* {*}API automation user{*}: TOTP disabled for programmatic access
* {*}Custom admin user{*}: TOTP enabled for interactive use
This configuration enables automation workflows that cannot handle interactive
TOTP challenges.
h2. Current Problem
Automated installed is done in 2 phases
# Automated user creation with TOTP disabled attribute
# Enabling TOTP
When TOTP is *not globally enabled* ('Phase 1'), the REST API correctly
processes TOTP disable attributes:
{code:python}
# This approach WORKS during Phase 1 (TOTP not globally enabled)
api_attributes = {"guac-totp-disabled": "true"}
client.create_user(api_user, api_pass, api_attributes)
client.update_user_attributes(api_user, {"guac-totp-disabled": "true"})
{code}
However, when TOTP is *globally enabled* ('Phase 2'), the TOTP module
*overwrites/removes* the disable attribute:
{code:sql}
-- Before Phase 2 (TOTP globally enabled):
username | attribute_name | attribute_value
eiguacadmin-api | guac-totp-disabled | true
-- After Phase 2 (TOTP globally enabled):
username | attribute_name | attribute_value
eiguacadmin-api | guac-totp-key-confirmed | true
eiguacadmin-api | guac-totp-key-secret | ABC46UT52UQHC4P3LW5FZYQ4IN7JXYZ
-- guac-totp-disabled attribute was REMOVED
{code}
h3. Root Cause
The TOTP module does not respect existing {{guac-totp-disabled}} attributes
when TOTP is enabled globally - it forces enrolment and removes disable flags.
h2. Current Workaround
Database manipulation is required to restore the disable attribute:
{code:sql}
-- Restore the disable attribute
INSERT INTO guacamole_user_attribute (user_id, attribute_name, attribute_value)
VALUES (user_id, 'guac-totp-disabled', 'true')
ON DUPLICATE KEY UPDATE attribute_value='true';
-- Clear forced enrolment
DELETE FROM guacamole_user_attribute
WHERE user_id = user_id
AND attribute_name IN ('guac-totp-key-secret', 'guac-totp-key-confirmed');
{code}
h2. Proposed Improvement
Modify the TOTP module to respect existing {{guac-totp-disabled}} attributes
when global TOTP is enabled
h2. Benefits
* Eliminates need for database workarounds
> API support for persisting TOTP disable attributes when TOTP is globally
> enabled
> --------------------------------------------------------------------------------
>
> Key: GUACAMOLE-2140
> URL: https://issues.apache.org/jira/browse/GUACAMOLE-2140
> Project: Guacamole
> Issue Type: Improvement
> Components: guacamole, guacamole-auth-jdbc, guacamole-auth-totp
> Environment: Guacamole Version: 1.6.0
> Deployment: Docker containers with two-phase deployment
> Authentication: Database with TOTP extension
> Reporter: Tom P
> Priority: Minor
>
> h2. Summary
> Requesting API support for persisting TOTP disable attributes when TOTP is
> globally enabled, avoiding database workarounds during automated deployment.
> _Edit: clarified API behaviour after further testing._
> h2. Use Case: Automated Deployment
> Our deployment scenario requires:
> * {*}Global TOTP{*}: Enabled for all new users by default{*}{*}
> * {*}API automation user{*}: TOTP disabled for programmatic access
> * {*}Custom admin user{*}: TOTP enabled for interactive use
> This configuration enables automation workflows that cannot handle
> interactive TOTP challenges.
> h2. Current Problem
> Automated installed is done in 2 phases
> # Automated user creation with TOTP disabled attribute
> # Enabling TOTP
> When TOTP is *not globally enabled* ('Phase 1'), the REST API does not store
> TOTP disable attributes:
> {code:python}
> # This this call works during Phase 1 (TOTP not globally enabled)
> api_attributes = {"guac-totp-disabled": "true"}
> client.create_user(api_user, api_pass, api_attributes)
> client.update_user_attributes(api_user, {"guac-totp-disabled": "true"})
> {code}
> However, when TOTP is *globally enabled* ('Phase 2'), TOTP is still enabled
> for all users as the attribute was not saved
> h3. Root Cause
> API does not save TOTP user attributes when TOTP extension is not enabled.
> h2. Current Workaround
> Database manipulation is required to restore the disable attribute:
> {code:sql}
> -- Restore the disable attribute
> INSERT INTO guacamole_user_attribute (user_id, attribute_name,
> attribute_value)
> VALUES (user_id, 'guac-totp-disabled', 'true')
> ON DUPLICATE KEY UPDATE attribute_value='true';
> -- Clear forced enrolment
> DELETE FROM guacamole_user_attribute
> WHERE user_id = user_id
> AND attribute_name IN ('guac-totp-key-secret', 'guac-totp-key-confirmed');
> {code}
> h2. Proposed Improvement
> Modify the API module to save {{guac-totp-disabled}} attributes for new and
> updated users, even when global TOTP is disabled.
> h2. Benefits
> * Eliminates need for database workarounds
> * Simplifies automated deploys
--
This message was sent by Atlassian Jira
(v8.20.10#820010)