No description
Find a file
phil 2e878a5370
All checks were successful
/ build (push) Successful in 12s
CI: continue if pnpm publish fails (package version already exists)
2025-02-25 14:55:27 +01:00
.forgejo/workflows CI: continue if pnpm publish fails (package version already exists) 2025-02-25 14:55:27 +01:00
public Support third party resource providers 2025-02-21 13:45:18 +01:00
src Support third party resource providers 2025-02-21 13:45:18 +01:00
.gitignore Read ssl cert and key for https from .env file 2025-01-31 04:36:38 +01:00
Containerfile CI: add run command to run nginx 2025-02-25 13:41:31 +01:00
example_settings.json Read ssl cert and key for https from .env file 2025-01-31 04:36:38 +01:00
index.html Add resource provider queries 2025-01-28 19:50:17 +01:00
package-lock.json Initial commit 2025-01-25 02:23:43 +01:00
package.json Firx typo in package name 2025-02-25 13:44:43 +01:00
pnpm-lock.yaml Cleanup 2025-01-30 20:34:22 +01:00
README.md Update doc (README) 2025-02-24 04:23:46 +01:00
tsconfig.app.json Add resource provider queries 2025-01-28 19:50:17 +01:00
tsconfig.json Initial commit 2025-01-25 02:23:43 +01:00
tsconfig.node.json Read ssl cert and key for https from .env file 2025-01-31 04:36:38 +01:00
vite.config.ts Cosmetic 2025-02-01 01:19:13 +01:00

Test app for OIDC, OAuth2 - web app version written with Vue3

Small web app for experimenting a web app with a Keycloak auth server.

It is a sibling of the server version oidc-test, which acts also as a resource server.

Live demo: https://philo.ydns.eu/oidc-test-web:

  • configured with a test realm on a private Keycloak instance
  • 2 users are defined: foo (foofoo) and bar (barbar).

Note: decoding tokens requires the use of cryto extension, that web browsers allow only with a secured connection (https).

Configuration

The app expects that a settings.json file is available on the server at the app's base url.

For example:

{
  "keycloakUri": "https://keycloak.your.domain",
  "realm": "test",
  "authProvider": "keycloak",
  "sso": false,
  "clientId": "oidc-test-web",
  "tokenSandbox": true,
  "resourceServerUrl": "https://someserver.your.domain/resourceBaseUrl",
  "resourceScopes": [
    "get:time",
    "get:bs"
  ],
  "resourceProviders": {
    "resourceProvider1": {
      "name": "Third party 1",
      "baseUrl": "https://otherserver.your.domain/resources/",
      "verifySSL": true,
      "resources": {
        "public": {
          "name": "A public resource",
          "url": "resource/public"
        },
        "bs": {
          "name": "A secured resource, eg by scope",
          "url": "resource/secured1"
        },
        "time": {
          "name": "Another secured resource, eg by role",
          "url": "resource/secured2"
        }
      }
    }
  }
}

Build

For generating a dist directory ready to be copied to a web server static data tree, it's a straightforward:

pnpm run build

Eventually specify a base url (eg. accessible from https://for.example.com/oidc-test-web):

pnpm run build --base oidc-test-web

Deployment

Examples of deployment are presented below.

  • Using the nginx default container, from the development source tree:
podman run -it --rm -p 8874:80 -v ./dist:/usr/share/nginx/html/oidc-test-web -v ./settings.json:/usr/share/nginx/html/oidc-test-web/settings.json docker.io/nginx:alpine
  • The build is packaged in a provided container (see pakcages), serving with the /oidc-test-web base url:
podman run -it --rm -p 8874:80 -v ./settings.json:/usr/share/nginx/html/oidc-test-web/settings.json code.philo.ydns.eu/philorg/oidc-vue-test:latest
  • A quadlet systemd service, in ~/.config/containers/systemd/oidc-vue-test.container:
[Container]
ContainerName=oidc-vue-test
Image=code.philo.ydns.eu/philorg/oidc-vue-test:latest
Mount=type=bind,source=/path/to/settings.json,destination=/usr/share/nginx/html/oidc-test-web/settings.json
PublishPort=8874:80

[Service]
Restart=always
RestartSec=5

[Unit]
After=podman-user-wait-network-online.service

[Install]
WantedBy=default.target

Run with:

systemctl --user daemon-reload
systemcrl --user start oidc-vue-test

Frontend

YMMV, easy with Caddy:

handle /oidc-test-web {
  reverse-proxy hostname.domainame:8874
}
redir /oidc-test-web /oidc-test-web/