Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions docs/admin/admin-ui/auth-server-interaction.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ When accessing the Gluu Flex Admin UI through a web browser, the following steps

1. The user accesses the Gluu Flex Admin UI frontend through a web browser.
2. The frontend requests the Admin UI backend to retrieve Admin UI configuration from Janssen persistence. The [Admin UI configuration](./configuration.md) includes OIDC client details for accessing the Auth Server, OIDC client details for accessing the Token Server, OIDC client details for accessing the License APIs, and license metadata. It's important to note that **the Admin UI backend is implemented as a Jans Config API plugin**.
3. The frontend calls the Admin UI backend API (`/isConfigValid`) to validate the license configuration in persistence, essentially verifying the validity of the OIDC client used to access the License APIs. If it is not valid, the same API tries to register a new OIDC client using the SSA uploaded during installation. In case the SSA is invalid, the Admin UI shows a page to upload a new valid SSA. To minimize network calls to account.gluu.org, `/isConfigValid` verifies the OIDC client validity only at a set interval (default: 30 days). Otherwise, `/isConfigValid` checks if the required OIDC client for License APIs exists in the Admin UI configuration (persistence).
4. After validating the OIDC client, the Admin UI calls the backend API (/isActive) to check if a valid license is present in the license configuration. It verifies whether the license key and its details are valid and not expired. At regular intervals (default is 30 days), the Admin UI backend calls the SCAN API (/scan/license/isActive) to verify license validity and sync its details into the license configuration (persistence).
5. If a valid license is not present, the frontend calls the backend API (/retrieve) to retrieve the license for the user via the SCAN API (/scan/license/retrieve). The license can only be retrieved from SCAN if the user has subscribed to the Admin UI license in Agama Lab.
3. The frontend calls the Admin UI backend API (`/v1/license/isConfigValid`) to validate the license configuration in persistence, essentially verifying the validity of the OIDC client used to access the License APIs. If it is not valid, the same API tries to register a new OIDC client using the SSA uploaded during installation. In case the SSA is invalid, the Admin UI shows a page to upload a new valid SSA. To minimize network calls to account.gluu.org, `/v1/license/isConfigValid` verifies the OIDC client validity only at a set interval (default: 30 days). Otherwise, `/v1/license/isConfigValid` checks if the required OIDC client for License APIs exists in the Admin UI configuration (persistence).
4. After validating the OIDC client, the Admin UI calls the backend API (/v1/license/isActive) to check if a valid license is present in the license configuration. It verifies whether the license key and its details are valid and not expired. At regular intervals (default is 30 days), the Admin UI backend calls the License API (/v1/license/isActive) in Agama Lab to verify license validity and sync its details into the license configuration (persistence).
5. If a valid license is not present, the frontend calls the backend API (/v1/license/retrieve) to retrieve the license for the user via the Agama Lab's License API (/v1/license/retrieve). The license can only be retrieved if the user has subscribed to the Admin UI license in Agama Lab.
6. If the user has not already subscribed to a valid license in Agama Lab, the Admin UI displays a page to generate a 30-day trial license. The user cannot generate another trial license after expiry of a generated trial license and will need to subscribe to the Admin UI license in Agama Lab to access the user interface.
7. After verification of valid license the frontend initiates the Authorization Code Flow by redirecting the user to the login page.

Expand Down Expand Up @@ -48,16 +48,16 @@ else license client invalid
end
Gluu Flex Admin UI->>Admin UI Backend: /license/isActive
Note over Gluu Flex Admin UI,Admin UI Backend: validate license
Admin UI Backend->>SCAN: /scan/license/isActive
Admin UI Backend->>Agama Lab: /license/isActive
alt license active
SCAN->>Admin UI Backend: true
Agama Lab->>Admin UI Backend: true
else license inactive / not present
SCAN->>Admin UI Backend: false
Admin UI Backend->>SCAN: /retrieve
Agama Lab->>Admin UI Backend: false
Admin UI Backend->>Agama Lab: /retrieve
alt license subscribed
SCAN->>Admin UI Backend: license
Agama Lab->>Admin UI Backend: license
else license not subscribed
SCAN->>Admin UI Backend: false
Agama Lab->>Admin UI Backend: false
Admin UI Backend->>Gluu Flex Admin UI: false
Gluu Flex Admin UI->>Browser: Screen to generate Trial license
end
Expand Down
14 changes: 2 additions & 12 deletions docs/admin/admin-ui/auth-server-menu.md
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,8 @@ assurance or the context of the authentication process used for user authenticat
This page allows the administrator to view all enabled ACRs and select the default ACR, which refers to the predefined
or default authentication assurance when no specific ACR value is requested or specified.

This menu also address the deployment of Agama projects on the Janssen Auth Server either by uploading the untampered Agama project packages (with .gama extension) or by adding a Agama Community project.

![image](../../assets/admin-ui/authn.png)

## Config API Properties
Expand All @@ -250,15 +252,3 @@ details and the administrator can revoke the sessions of the selected user.

![image](../../assets/admin-ui/sessions.png)

<!-- ## Agama

This menu addresses deployment of [Agama](https://docs.jans.io/head/agama/introduction/) project packages (file with
.gama extension). To make sure that package is untempered, the file containing sha256 checksum also need to be uploaded on UI.

![image](../../assets/admin-ui/agama-deployment.png)

The project name, description, version, deployment start/end date-time and deployment error (if any) can be seen on details popup of the record. User can export sample and current configuration or import configuration.

![image](../../assets/admin-ui/gama-details.png)

![image](../../assets/admin-ui/export-gama-config.png) -->
94 changes: 66 additions & 28 deletions docs/admin/admin-ui/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ The information is stored in json format with following attributes.
|Attribute Name|Description|
|--------------|-----------|
|uiConfig|Object with UI configuration attributes|
|sessionTimeoutInMins|The admin UI will auto-logout after a period of inactivity defined in this field.|

uiConfig

Expand All @@ -80,7 +79,6 @@ uiConfig
|cedarlingLogType|Set embeded Cedarling log-type in Admin UI. The allowed values are `off` and `std_out`.|
|auiPolicyStoreUrl|Path of Policy Store archive file|
|auiDefaultPolicyStorePath|The path of the default Policy Store json file on Config Api pod.|
|cedarlingPolicyStoreRetrievalPoint|The retrieval point of the Policy Store. The allowed values are `default` and `remote`.|

### OIDC Client Details for License Server

Expand All @@ -105,63 +103,103 @@ The information is stored in json format with following attributes.
|licenseConfig| Object with License configuration details |
|ssa| SSA used to register OIDC client to access license APIs |
|scanLicenseApiHostname| SCAN License server hostname |
|licenseKey|License-key to access Admin UI|
|licenseHardwareKey| Hardware key (org_id) to access license APIs |
|intervalForSyncLicenseDetailsInDays| The Admin UI backend syncs license details into the configuration (persistence) after the set interval (default: 30 days). |
|licenseValidUpto|Expiry date to the subscribed flex license|
|licenseDetailsLastUpdatedOn|The date on which the license details were synced from Agama Lab to the Admin UI's License Configuration|
|productCode|The product code of the issued license at [LicenseSpring](https://licensespring.com/)|
|licenseType|The license type of the issued license at [LicenseSpring](https://licensespring.com/)
|licenseActive|Is the license configured currently active?|
|licenseExpired|Is the license configured expired?|
|licenseMAUThreshold|The allowed monthly active users for issued license|
|oidcClient|Object with details of OIDC client to access license API|



**Sample configuration stored in persistence**

```text

{
"oidcConfig": {
"auiWebClient": {
"introspectionEndpoint": null,
"tokenEndpoint": null,
"redirectUri": "https://your.host.com/admin",
"postLogoutUri": "https://your.gost.com/admin",
"postLogoutUri": "https://your.host.com/admin",
"frontchannelLogoutUri": "https://your.host.com/admin/logout",
"scopes": [
"openid",
"https://jans.io/auth/ssa.admin",
"email",
"profile",
"user_name",
"email"
"offline_access",
"jans_stat"
],
"acrValues": [
"basic"
"simple_password_auth"
],
"opHost": "https://your.host.com",
"clientId": "2001.aaf0b8eb-a82e-4798-b1a0-e007803a6568",
"clientSecret": "GGO4t1uixrTpl4Rizt3zag==".
"clientId": "xxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxx",
"clientSecret": "xxxxxxxxxxxxx",
"additionalParameters": []
},
"auiBackendApiClient": {
"introspectionEndpoint": "https://your.host.com/jans-auth/restv1/introspection",
"tokenEndpoint": "https://your.host.com/jans-auth/restv1/token",
"redirectUri": null,
"postLogoutUri": null,
"frontchannelLogoutUri": null,
"scopes": [
"openid",
"profile",
"user_name",
"email"
"https://jans.io/auth/ssa.admin"
],
"acrValues": null,
"opHost": "https://your.host.com",
"clientId": "2001.aaf0b8eb-a82e-4798-b1a0-e007803a6568",
"clientSecret": "GGO4t1uixrTpl4Rizt3zag=="
"clientId": "xxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxx",
"clientSecret": "xxxxxxxxxxxxx",
"additionalParameters": null
}
},
"uiConfig": {
"sessionTimeoutInMins": 30,
"allowSmtpKeystoreEdit": true,
"cedarlingLogType":"off",
"auiPolicyStoreUrl": "",
"auiDefaultPolicyStorePath": "./custom/config/adminUI/policy-store.json",
"cedarlingPolicyStoreRetrievalPoint": "default"
},
"licenseConfig": {
"ssa": "...ssa in jwt format...",
"scanLicenseApiHostname": "https://cloud-dev.gluu.cloud",
"licenseKey": "XXXX-XXXX-XXXX-XXXX",
"licenseHardwareKey": "github:ghUsername",
"ssa": "eyJraWQiOiJzc2FfN2IyMGM1MDYtMDlhNi00MTU1LWF....",
"scanLicenseApiHostname": "https://license-server-hostname.gluu.org",
"licenseKey": "xxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxx",
"licenseHardwareKey": "xxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxx",
"licenseValidUpto": "2026-07-07",
"licenseDetailsLastUpdatedOn": "2026-06-18",
"productCode": "adminui001",
"productName": "Gluu Admin UI",
"licenseType": "time-limited",
"customerFirstName": "",
"customerLastName": "",
"customerEmail": "trial_request",
"companyName": "",
"licenseActive": true,
"licenseExpired": false,
"licenseMAUThreshold": 1000,
"intervalForSyncLicenseDetailsInDays": 30,
"oidcClient": {
"opHost": "https://account-dev.gluu.cloud",
"clientId": "36a43e2b-a77b-4e9c-a966-a9d98af1665c",
"clientSecret": "211188d8-a2d8-4562-ab53-80907c1bb5ba"
"introspectionEndpoint": null,
"tokenEndpoint": null,
"redirectUri": null,
"postLogoutUri": null,
"frontchannelLogoutUri": null,
"scopes": null,
"acrValues": null,
"opHost": "https://account-server-hostname.gluu.org",
"clientId": "xxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxx",
"clientSecret": "xxxx.xxxxxxx-xxxx-xxxx-xxxx-xxxxxx",
"additionalParameters": null
}
},
"uiConfig": {
"sessionTimeoutInMins": 31,
"allowSmtpKeystoreEdit": true,
"cedarlingLogType": "off",
"auiPolicyStoreUrl": "",
"auiDefaultPolicyStorePath": "./custom/config/adminUI/policy-store.cjar"
}
}
```
Loading
Loading