Hello, I've installed Apache Guacamole v.1.5.4 on Linux CentOS 8.5 -
I'm able to login to GUI, create users, connection, etc. I installed
database (MySQL) as well (to manage users, connection) with all needed *.jar
files according to doc guacamole.apache.org
https://guacamole.apache.org/doc/gug/jdbc-auth.html After that, I'm able
to login as ""guacadmin" user to GUI and manage connections etc.
Now, I want to create URL to direct connection to my VM, but I found errors
like below: ------------------------------ SCRIPT
------------------------------------- #!/bin/bash TOKEN=$(curl -s -X POST
-H "Content-Type: application/x-www-form-urlencoded" -d
"username=guacadmin&password=guacadmin" localhost:8080
http://localhost:8080/guacamole/api/tokens | jq -r '.authToken') #
Endpoint API Guacamole API_ENDPOINT=" localhost:8080
http://localhost:8080/guacamole/api/session/data/mysql/connections "
CONNECTION_DATA='{ "name": "Connection name",
"protocol": "rdp", "parameters": {
"hostname": "10.194.53.45", "port":
"3389", "username": "user",
"password": "password" } }' RESPONSE=$(curl -s -X
POST -H "Content-Type: application/json" -H "Authorization: Bearer
$TOKEN" -d "$CONNECTION_DATA" $API_ENDPOINT) CONNECTION_ID=$(echo
$RESPONSE | jq -r '.identifier') if [ "$CONNECTION_ID" !=
"null" ]; then URL=" localhost:8080
http://localhost:8080/guacamole/#/client/$CONNECTION_ID?token=$TOKEN "
echo "Connection ID: $CONNECTION_ID" echo "URL: $URL" else
echo "Error creating connection." fi
------------------------------ OUTPUT ------------------------------------
Response: {"message":"Permission
Denied.","translatableMessage":{"key":"APP.TEXT_UNTRANSLATED","variables":{"MESSAGE":"Permission
Denied."}},"statusCode":null,"expected":null,"type":"PERMISSION_DENIED"}
Error creating connection. ------------------------------ OUTPUT END
------------------------------- ---------------------------------- L O G S
---------------------------------- Apache Tomcat & system messages:
0:0:0:0:0:0:0:1 - - [09/Feb/2024:12:32:36 +0100] "GET
/guacamole/api/session/data/mysql/users/self HTTP/1.1" 403 192
0:0:0:0:0:0:0:1 - - [09/Feb/2024:12:32:36 +0100] "GET
/guacamole/api/session/data/mysql/users/self HTTP/1.1" 403 192 Feb 9
12:32:36 server[90877]: 12:32:36.207 [http-nio-8080-exec-7] DEBUG
o.a.i.t.jdbc.JdbcTransaction - Committing JDBC Connection
[com.mysql.cj.jdbc.ConnectionImpl@7c9de5c2] Feb 9 12:32:36 server[90877]:
12:32:36.212 [http-nio-8080-exec-7] DEBUG o.a.i.t.jdbc.JdbcTransaction -
Resetting autocommit to true on JDBC Connection
[com.mysql.cj.jdbc.ConnectionImpl@7c9de5c2] Feb 9 12:32:36 server[90877]:
12:32:36.213 [http-nio-8080-exec-7] DEBUG o.a.i.t.jdbc.JdbcTransaction -
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7c9de5c2] Feb 9
12:32:36 server[90877]: 12:32:36.213 [http-nio-8080-exec-7] DEBUG
o.a.i.d.pooled.PooledDataSource - Testing connection 2090722754 ... Feb 9
12:32:36 server[90877]: 12:32:36.214 [http-nio-8080-exec-7] DEBUG
o.a.i.d.pooled.PooledDataSource - Connection 2090722754 is GOOD! Feb 9
12:32:36 server[90877]: 12:32:36.214 [http-nio-8080-exec-7] DEBUG
o.a.i.d.pooled.PooledDataSource - Returned connection 2090722754 to pool. Feb
9 12:32:36 server[90877]: 12:32:36.214 [http-nio-8080-exec-7] DEBUG
o.a.g.r.auth.AuthenticationService - Login was successful for user
"guacadmin". Feb 9 12:32:36 server[90877]: 12:32:36.230
[http-nio-8080-exec-8] DEBUG o.a.g.rest.RESTExceptionMapper - Client request
rejected: Permission Denied. ---------------------------------- L O G S END
---------------------------------- MESSAGE: DEBUG
o.a.g.rest.RESTExceptionMapper - Client request rejected: Permission Denied.
-------------- DATABASE INFO (Permission) ------------------------------------
mysql> SELECT * FROM guacamole_entity JOIN guacamole_user_permission ON
guacamole_entity.entity_id = guacamole_user_permission.entity_id WHERE
guacamole_entity.name = 'guacadmin';
+-----------+-----------+------+-----------+------------------+------------+ |
entity_id | name | type | entity_id | affected_user_id | permission |
+-----------+-----------+------+-----------+------------------+------------+ |
1 | guacadmin | USER | 1 | 1 | READ | |
1 | guacadmin | USER | 1 | 1 | UPDATE | |
1 | guacadmin | USER | 1 | 1 | ADMINISTER | |
1 | guacadmin | USER | 1 | 2 | READ | |
1 | guacadmin | USER | 1 | 2 | UPDATE | | 1
| guacadmin | USER | 1 | 2 | DELETE | | 1 |
guacadmin | USER | 1 | 2 | ADMINISTER |
+-----------+-----------+------+-----------+------------------+------------+
I want to be able to dynamically create a URL after clicking on it, which will
open the VM window in browser (without having to enter parameters, username or
password). -- THANK YOU FOR HELP! Best Regards, Marcin
Dnia 18 stycznia 2024 12:41 Nick Couchman <[email protected]>
napisał(a):
On Thu, Jan 18, 2024 at 1:03 AM anoop yadav < [email protected]
> wrote: I am trying to build a Web app where users can create multiple
Ubuntu instances and use them through my web app. The domain for my web app is
example-app.com example-app.com which is written in reactjs. I have hosted
guacamole clients on separate subdomains lab.example-app.com
lab.example-app.com . In the reactjs app, I am using the Iframe (Not sure if
there is any other way) to show lab.example-app.com lab.example-app.com
(guacamole client app), since I don't want the user to do another login on
the guacamole app. I am planning to use a token. My current logic is as
follows: 1. When the user creates an account (the backend is in Django-python)
I make a rest API request to create an account, get a token from guacamole and
save it to the web app database. 2. When the user creates an Ubuntu instance,
using the rest API I create a connection and associate the user with it. I save
a URL like lab.example-app.com lab.example-app.com/guacamole/#/client/
<CONNECTION>?token=<TOKEN> Everything works fine, the user can
access multiple connections but since the token has a lifetime, and after that
time the URL is not working. To be clear, the token does not have a lifetime,
it has an *idle lifetime* - that is, it times out after a certain period of
inactivity. As long as the Guacamole instance is being used - for an active
connection, for example - the token will remain valid. How do I manage the
token so that it doesn't expire? You can set the api-session-timeout
property in guacamole.properties to adjust the *idle lifetime* of the token -
see guacamole.apache.org
https://guacamole.apache.org/doc/gug/configuring-guacamole.html#guacamole-properties
. That said, I don't think you really want it to never expire - at least,
from a security perspective, I would not recommend that, even if you're
doing some other cleanup of the tokens from your web application. You may want
to extend it such that it more closely fits in with your use case, but setting
it to either never expire (which isn't really possible) or even a very long
idle time just adds security risk to the application. -Nick