[ 
https://issues.apache.org/jira/browse/GUACAMOLE-96?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15457699#comment-15457699
 ] 

Michael Jumper commented on GUACAMOLE-96:
-----------------------------------------

{quote}
I am not completely sure how the authentication extensions work, but how I 
understand it is that guacamole will query them one by one untill one of them 
returns a UserContext, is that right?
{quote}

Not quite.

All extensions will be queried, in filename order, until one of them returns an 
*AuthenticatedUser*.

That AuthenticatedUser is then passed to getUserContext() of *all* extensions, 
and each extension can thus either (a) return a UserContext of its own or (b) 
throw an exception to override the authentication result. If no exceptions are 
thrown, the union of all returned UserContexts is exposed to the user, with 
each UserContext defining a unique set of data and associated permissions.

If an extension's getUserContext() throws a 
GuacamoleInsufficientCredentialsException (or anything else that extends 
GuacamoleUnauthorizedException), the authentication result is vetoed, and 
authentication fails. For MFA, an extension could:

# Not implement authenticateUser(), thus relying on any other extension to 
provide the first authentication factor
# Check the values within the AuthenticatedUser to see if the additional 
authentication code was provided
# Lacking the code, throw a GuacamoleInsufficientCredentialsException 
requesting that code, thus invalidating the pending authentication result
# Once the user provides the code, that code along with all 
previously-submitted credentials is resubmitted.

See:

https://github.com/apache/incubator-guacamole-client/blob/30639f2805f656784ff82400ec86b1abadf90e12/guacamole/src/main/java/org/apache/guacamole/rest/auth/AuthenticationService.java#L353-L406


> Two factor authentication with Google Authenticator
> ---------------------------------------------------
>
>                 Key: GUACAMOLE-96
>                 URL: https://issues.apache.org/jira/browse/GUACAMOLE-96
>             Project: Guacamole
>          Issue Type: New Feature
>          Components: guacamole-client
>            Reporter: L.J. van Ruiten
>            Priority: Trivial
>
> We have a few critical systems that are accessible through Guacamole and we 
> have had some clients requesting a safer way to login. Two factor 
> authentication is probably the best and easiest way to improve on the current 
> username/password login, and I can imagine that this is something that other 
> companies using Guacamole would also be interesting in this feature.
> I already did some tinkering myself and I found that Google Auhtenticator is 
> simple to use, does not require any configuration (like you would with SMS 
> codes) easy to implement and the "client" side of the authentication (the 
> part that generates the codes) is easily integrated into existing apps.
> So far I have got Google Authenticator "kinda working". What I did is:
> - Started with guacamole-auth-jdbc as base
> - Added a secret key to a user account that is randomly generated upon 
> creation. Also added a boolean field to indicate wether TFA is required for 
> loggin in.
> - Used the GuacamoleInsufficientCredentialsException to redirect the user the 
> a second screen asking for a TFA code after loggin in with the username and 
> password.
> However as said before this only "kinda works" because:
> I have only gotten the TFA enable button to appear in the user's managing 
> page, so it can only be enabled by administrators and that's also where I put 
> the secret key shows up, so users can't find it themself.
> For as far as I could find the previous point cannot be done with just the 
> guacamole-ext api. Even with the new API that enables you to insert HTML 
> parts, you would also need an API endpoint to provide the secret key or 
> ideally generate a QR code that Google Auhtenticator can read to bind a 
> device to the account (I would like it to appear in the user's preference 
> page). 
> So in summary if other people are interested I would be willing to contribute 
> this, but I would need some directions and I have a few questions:
> - Am I right that it is currently not possible to add an API endpoint just 
> using guacamole-ext to provide the QR codes?
> - What would be the way to implement this? Personally I thought that adding 
> these options to the user's page would be the easiest.
> - Is this a feature you would like me to work on and contribute?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to