PocketID with openZro Self-Hosted
PocketID is a simplified identity management solution designed for self-hosted environments, offering a lightweight and easy-to-deploy option for authentication.
PocketID is secure and effective but makes some tradeoffs in terms of features. Notably, it does not allow scoping the access of API Tokens. Keep careful track of the token used by openZro for management.
Management Setup (Recommended)
Add PocketID as an external IdP directly in the openZro Management Dashboard. This is the simplest approach and recommended for most deployments.
Prerequisites
- openZro self-hosted with embedded IdP enabled
- PocketID instance with admin access
Step 1: Create OIDC Client in PocketID
- Navigate to PocketID console
- Click the Administration dropdown in the left-hand bar
- Select OIDC Clients
- Click Add to create a new client

- Fill in the form:
- Name:
openZro - Public Client: Off (for confidential client)
- PKCE: Off
- Name:
- Click Save

- Note the Client ID and Client Secret

Step 2: Add Identity Provider in openZro
- Log in to your openZro Dashboard
- Navigate to Settings → Identity Providers
- Click Add Identity Provider
- Fill in the fields:
| Field | Value |
|---|---|
| Type | PocketID |
| Name | PocketID (or your preferred display name) |
| Client ID | From PocketID |
| Client Secret | From PocketID |
| Issuer | https://pocketid.example.com |
Important: Make sure not to add a trailing slash "/" after the issuer URL for PocketID. This differs from some of the other providers.
- Click Save

Step 3: Configure Redirect URI
After saving, openZro displays the Redirect URL. Copy this URL and add it to your PocketID client:

- Return to PocketID console → OIDC Clients
- Edit your openZro client
- Add the redirect URL to Callback URLs

- Click Save
Step 4: Create User Group and Assign to Client
- Return to PocketID console → User Groups
- Click Add to create a new group
- Fill in:
- Name:
openZro
- Name:
- Click Save

- Add users to the openZro group:
- Click on the openZro group
- Click Add Users
- Select the users who should have access to openZro
- Click Save or Add

- Go to OIDC Clients → openZro (the client you created earlier)
- Find the Groups or User Groups section
- Add the openZro group to the client

- Click Save
Step 5: Test the Connection
- Log out of openZro Dashboard
- On the login page, you should see a "PocketID" button
- Click it and authenticate with your PocketID credentials
- You should be redirected back to openZro and logged in
Configuring JWT 'groups' Claim
PocketID includes user groups in the ID token by default when you've assigned groups to users and linked those groups to the OIDC client. If you followed Step 4 above, groups should already be included in the token.
Verify Groups Are Included
- Ensure you've created a User Group in PocketID (Step 4)
- Ensure users are assigned to the group
- Ensure the group is linked to your openZro OIDC client
Enable JWT Group Sync in openZro
- In openZro Dashboard, go to Settings → Groups
- Enable JWT group sync
- Set JWT claim to
groups - Optionally configure JWT allow groups to restrict access to users in specific PocketID groups
PocketID restricts OIDC client access based on group membership. Only users in groups assigned to the OIDC client can authenticate. This is configured in Step 4 above.
Standalone Setup (Advanced)
The standalone setup wires PocketID as openZro's only identity provider — Dex is disabled and the management daemon talks directly to PocketID for token validation. Choose this path only if all three apply:
- You want to skip the Dex layer entirely. Unlike Keycloak or Zitadel, PocketID does not expose a writeback API to openZro — the management cannot list, invite, or delete users in PocketID. The standalone path's only motivation is removing one component (Dex) at the cost of multi-IdP support and the static admin fallback.
- You need just one IdP, and it's PocketID. The standalone path doesn't support multiple upstreams — there's no Dex to aggregate them.
- You're willing to give up the bootstrap admin fallback. No embedded local user store. If PocketID is down or misconfigured, nobody can log into the dashboard.
For everyone else — multi-IdP shops, anyone wanting a static admin fallback, or anyone unsure whether they'll outgrow PocketID later — stick with the Management Setup (Recommended) above. It runs Dex in front of PocketID and makes a future swap to a different IdP painless.
For detailed standalone instructions, see PocketID SSO with openZro Self-Hosted (Advanced).
Troubleshooting
"Invalid redirect URI" error
- Ensure all callback URLs are properly configured in PocketID
- Include both HTTP (localhost) and HTTPS (domain) variants