Link cloud accounts
Register a per-organisation Azure or Google OAuth app, then link user accounts to discover storage and tables.
Delegated storage discovery takes two steps. An admin registers an OAuth app per organisation, then each user links their own Azure or Google account so Eddytor can enumerate that user's storage accounts/buckets and discover tables - without anyone hand-entering credentials.
Good to know
Register the provider app
The client id/secret are stored encrypted in the database (not env vars), so
each org brings its own app, and an unconfigured deployment returns
provider_not_configured rather than crashing.
eddytor set provider-app azure \
--client-id "<application-client-id>" \
--client-secret "<client-secret>" \
--tenant "<directory-tenant-id-or-domain>" # omit for multi-tenant apps
# or: POST /v1/organisations/<org_id>/provider-apps/azure (scope provider_apps:write)Check what's configured (secrets are never returned):
eddytor get provider-app # all configured providers
eddytor get provider-app azure # one provider
# or: GET /v1/organisations/<org_id>/provider-apps (scope provider_apps:read)Microsoft Entra ID (Azure AD)
- App registrations → New registration. Name it Eddytor. Single-tenant for org-only, multi-tenant for shared.
- Redirect URI (Web):
${public_url}/api/v1/auth/providers/azure/callback(replace${public_url}with yourserver.public_url). - Copy the Application (client) ID (and Directory (tenant) ID for single-tenant).
- Certificates & secrets → New client secret → copy the value.
- API permissions → add
openid,email,profile,offline_access,User.Read,https://storage.azure.com/user_impersonation, andhttps://management.azure.com/user_impersonation. Grant admin consent. - Store it:
eddytor set provider-app azure ….
Google Workspace
- Google Cloud Console → APIs & Services → Credentials → Create Credentials → OAuth client ID → Web application.
- Authorized redirect URI:
${public_url}/api/v1/auth/providers/google/callback. - Store it:
eddytor set provider-app google …(no tenant). - OAuth consent screen → publish (or keep in testing for a closed list). Add
the
devstorage.full_control+cloud-platform.read-onlyscopes.
Link an account
eddytor link provider azure # opens the browser for consent, waits for the link
eddytor link provider googleFor Azure, add blob data access (not just discovery) with:
eddytor link provider azure --azure-storage-accessInspect and remove links:
eddytor get providers # list your linked identities
eddytor unlink provider azure # remove oneGood to know
provider_not_configured, the org has no
provider OAuth app registered yet - register one first.Linking vs registering storage
Two paths to give Eddytor storage access:
- Link a provider (this page) - delegated, per-user, great for discovery (browse subscriptions/accounts/buckets visually, find tables).
- Register a storage connection directly - with an access key, SAS token, service principal, or managed identity. Best for unattended / server-side access that isn't tied to a person's login.