Standalone authorization server that implements a subset of OIDC and related OAuth2 specifications. The goal is to make it useful for testing your OIDC enabled apps without setting up an actual IAM like Okta, Keycloak or Entra ID.
$ goliath \
--port 8000 \
--pkce
Configured in conf/golang.toml.
- ✅
/pingfor debugging purposes - ✅
/authorizeOIDC Authorization Endpoint - ✅
/tokenOIDC Token Endpoint
/.well-known/openid-configurationOpenID Connect Discovery 1.0 incorporating errata set 2/introspectOAuth 2.0 Token Introspection- PKCE, RFC7636 Proof Key for Code Exchange by OAuth Public Clients
$ curl --include 'http://localhost:8000/authorize?client_id=goliath-client-id&response_type=code&scope=openid&state=foo-state-from-client&redirect_uri=https://example.com/callback&nonce=2324'
HTTP/1.1 200 OK
Location: https://example.com/callback?code=K4C6CIUMG4YXUVNQUSZXCLR5TI&state=foo-state-from-client
Date: Sun, 25 May 2025 13:32:56 GMT
Content-Length: 19
Content-Type: text/plain; charset=utf-8
Starting code flowTo extract the returned code and put it into a variable in the
shell, do:
$ code=$(
curl --include \
'http://localhost:8000/authorize?client_id=goliath-client-id&response_type=code&scope=openid&state=foo-state-from-client&redirect_uri=https://example.com/callback&nonce=2324' \
2>&1 |
sed -nr 's#.*Location: .*code=([^&]*)\&.*#\1#p')You can use $code to refer to the server code in the step below.
$ curl \
--verbose \
--header "Content-Type: application/x-www-form-urlencoded" \
--data code=$code \
http://localhost:8000/token{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDgxOTAxMTIsImlhdCI6MTc0ODE4MjkxMiwiaXNzIjoiOi8vbG9jYWxob3N0OjgwMDAifQ.l2BAAx72K82RUiC5gJleAdzisGGK2EFWE6xSDdZZ4ic",
"id_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDgxOTAxMTIsImlhdCI6MTc0ODE4MjkxMiwiaXNzIjoiOi8vbG9jYWxob3N0OjgwMDAiLCJub25jZSI6IjIzMjQifQ.27rxUD5gd3fVJ4HYUZk4ZMuGHJvqAL4dyrtjSDVD5v0",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDgxOTAxMTIsImlhdCI6MTc0ODE4MjkxMiwiaXNzIjoiOi8vbG9jYWxob3N0OjgwMDAifQ.l2BAAx72K82RUiC5gJleAdzisGGK2EFWE6xSDdZZ4ic",
"expires_in": 3600,
"token_type": "Bearer"
}