The "RelayState" parameter is a value that's passed _back_ to the application by the SAML IdP. The value is unique to each authentication attempt and is generated by Guacamole when the user is redirected to the SAML IdP to authenticate. The SAML IdP receives that value and includes it in its response, which Guacamole then validates.

If the SAML response doesn't contain a valid "RelayState", then one of the following must be true:

* Your SAML provider is not handling the SAML request correctly.
* You are attempting IdP-initiated SSO, which is not supported.
* Something between yourself and your browser is preventing the "RelayState" parameter from being received.

- Mike

On 12/16/23 12:10, Invite System wrote:
Hello,

I have a functioning Guacamole configuration in Docker, that is currently working well. User created, TOTP enabled, Can connect to a RDP instance, etc.

However, as soon as I attempt to: enable SAML, enable more verbose logging in Logbook, enable a custom Home directory, etc. Things tend to go wrong.

I currently access Guacamole at: https://guacamole.domain.org <https://guacamole.domain.org/>

As an example, my docker compose for guacamole only is below:

         guacamole:
             container_name: guacamole
             depends_on:
                 - guacd
                 - postgres.16
             environment:
                 GUACD_HOSTNAME: guacd
                 POSTGRES_DATABASE: ${guacamole_db}
                 POSTGRES_HOSTNAME: ${POSTGRES_HOST}
                 POSTGRES_PASSWORD: ${guac_postgres_pass}
                 POSTGRES_USER: ${guac_postgres_user}
                 WEBAPP_CONTEXT: ROOT
                 GUACAMOLE_HOME: /data
                 EXTENSIONS: "openid, saml"
                 EXTENSION_PRIORITY: "*, saml, openid, totp"
                 RECORDING_SEARCH_PATH: /record
                 REMOTE_IP_VALVE_ENABLED: true
                 ENABLE_ENVIRONMENT_PROPERTIES: true
                 SAML_IDP_METADATA_URL:
    https://subdomain.okta.com/app/UUID1/sso/saml/metadata
    <https://subdomain.okta.com/app/UUID1/sso/saml/metadata>
                 SAML_ENTITY_ID: https://guacamole.DOMAIN.org
    <https://guacamole.domain.org/>
                 SAML_CALLBACK_URL:
    https://subdomain.okta.com/app/subdomain_guacamoleDOMAIN_1/UUID2/sso/saml 
<https://subdomain.okta.com/app/subdomain_guacamoleDOMAIN_1/UUID2/sso/saml>
                 SAML_DEBUG: true
                 SAML_STRICT: true
                 TOTP_ENABLED: true
                 TOTP_MODE: sha256
                 TOTP_ISSUER: "Guacamole"
             image: guacamole/guacamole:latest
             volumes:
                 - /mnt/docker/guacamole/home:/home/guacamole:rw
                 - /mnt/docker/guacamole/data:/data:rw
                 - /mnt/docker/guacamole/guacd/record:/record:rw
             links:
                 - guacd
             networks:
                 - guacnetwork
                 - database
                 - tailscale
             ports:
             #     - 8080:8080
                 - 8080/tcp
             restart: always


Unfortunately, for whatever reason, Guacamole can't solely use the metadata file - even though the URL is connectable (I can curl from within the container to the URL). So I have to use the two other options listed.

I have also tried this with SAML_STRICT set to true or false, and still receive the following error;

    16:44:05.563 [http-nio-8080-exec-4] WARN  
o.a.g.a.s.a.AssertionConsumerServiceResource - Authentication attempted with an invalid 
SAML response: "RelayState" value included with SAML response is not valid.



Now, I have looked at various websites, but I can't seem to find this error anywhere, and the only mention I can find of a potential workaround is this: https://support.okta.com/help/s/question/0D51Y00006aAeE9SAK/sp-initiated-saml-sso-relay-state-issue?language=en_US <https://support.okta.com/help/s/question/0D51Y00006aAeE9SAK/sp-initiated-saml-sso-relay-state-issue?language=en_US>

I have also reviewed this blog post: https://nathancatania.com/posts/deploy-guacamole-ssl-saml/ <https://nathancatania.com/posts/deploy-guacamole-ssl-saml/> , which appears to be (so far from what I have read) the best documentation on getting Okta and Guacamole working, however, it doesn't mention RelayState.

Which unfortunately, does not work when placed on the SAML_IDP_METADATA_URL: env variable. When running a SAML trace in the browser, I notice a switch between RelayState and "state",  in the response from Guacamole to Okta (and vice-a-versa), and am wondering if that is expected.

While I would absolutely prefer to use OIDC here, I believe that the docker container does not natively support OIDC out of the box (EG: through Env variables) and I would have to use the GUACAMOLE_HOME configuration to work around this. Unfortunately, Guacamole doesn't seem to be recognizing the paths specificed and setting the configuration there. I tried to search for the ENV variables required for this, but couldn't find anything specifically.


I was wondering if there was any guidance on setting up the SAML configuration or how I can remove the RelayState error listed above, until I can get a hold of someone at Okta to assist - or if there is a convenient way to get OIDC working with the Docker container given that I can't get GUACAMOLE_HOME to work at the moment.

Best regards,

Andrew

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@guacamole.apache.org
For additional commands, e-mail: user-h...@guacamole.apache.org

Reply via email to