Single Sign-On permite que seu time entre no Zoen pelo provedor de identidade da empresa em vez de gerenciar senhas separadas. O Zoen suporta OIDC e SAML 2.0.
Setup
1. Abra as settings de SSO
Vá em Settings → Enterprise → Single Sign-On no seu workspace.
2. Escolha um protocolo
| Protocolo | Use quando |
|---|---|
| OIDC | Seu IdP suporta OpenID Connect — Okta, Microsoft Entra ID, Auth0, Google Workspace |
| SAML 2.0 | Seu IdP é só SAML — ADFS, Shibboleth ou IdPs enterprise mais antigos |
3. Preencha o formulário
Campos obrigatórios para ambos os protocolos:
| Campo | O que informar |
|---|---|
| Provider ID | Um slug curto identificando esta conexão, ex.: okta ou azure-ad. Só letras, números e hífens. |
| Issuer URL | A URL do issuer do provedor de identidade. Precisa ser HTTPS. |
| Domain | O domínio de e-mail da sua organização, ex.: company.com. Usuários com este domínio serão roteados pelo SSO no sign-in. |
Campos adicionais OIDC:
| Campo | O que informar |
|---|---|
| Client ID | O client ID da aplicação no seu IdP. |
| Client Secret | O client secret do seu IdP. |
| Scopes | Scopes OIDC separados por vírgula. Padrão: openid,profile,email. |
Para OIDC, o Zoen busca automaticamente os endpoints (authorization_endpoint, token_endpoint, userinfo_endpoint, jwks_uri) no documento de discovery /.well-known/openid-configuration do seu issuer. Você só precisa fornecer a issuer URL.
Campos adicionais SAML:
| Campo | O que informar |
|---|---|
| Entry Point URL | A URL do serviço SSO do IdP para onde o Zoen envia requests de autenticação. |
| Identity Provider Certificate | O certificado X.509 codificado em Base-64 do seu IdP para verificar assertions. |
4. Copie a Callback URL
A Callback URL mostrada no formulário é o endpoint para o qual seu provedor de identidade deve redirecionar os usuários depois da autenticação. Copie-a e registre-a no seu IdP antes de salvar.
Provedores OIDC (Okta, Microsoft Entra ID, Google Workspace, Auth0):
https://app.zoen.space/api/auth/sso/callback/{provider-id}Provedores SAML (ADFS, Shibboleth):
https://app.zoen.space/api/auth/sso/saml2/callback/{provider-id}5. Salve e teste
Clique em Save. Para testar, saia e use o botão Sign in with SSO na página de login. Informe um endereço de e-mail no domínio configurado — o Zoen redirecionará você ao provedor de identidade.
Guias de provedor
Okta (OIDC)
No Okta (docs oficiais):
- Vá em Applications → Create App Integration
- Selecione OIDC - OpenID Connect e depois Web Application
- Defina o Sign-in redirect URI como sua Callback URL do Zoen:
https://app.zoen.space/api/auth/sso/callback/okta - Em Assignments, conceda acesso aos usuários ou grupos relevantes
- Copie o Client ID e o Client Secret na aba General do app
- Seu domínio Okta é o hostname do console admin, ex.:
dev-1234567.okta.com
No Zoen:
| Campo | Valor |
|---|---|
| Provider Type | OIDC |
| Provider ID | okta |
| Issuer URL | https://dev-1234567.okta.com/oauth2/default |
| Domain | company.com |
| Client ID | Do app Okta |
| Client Secret | Do app Okta |
A issuer URL usa o authorization server padrão do Okta, pré-configurado em toda org Okta. Se você criou um authorization server customizado, substitua default pelo nome do seu server.
Microsoft Entra ID (OIDC)
No Azure (docs oficiais):
- Vá em Microsoft Entra ID → App registrations → New registration
- Em Redirect URI, selecione Web e informe sua Callback URL do Zoen:
https://app.zoen.space/api/auth/sso/callback/azure-ad - Depois do registro, vá em Certificates & secrets → New client secret e copie o valor imediatamente — ele não será mostrado de novo
- Vá em Overview e copie o Application (client) ID e o Directory (tenant) ID
No Zoen:
| Campo | Valor |
|---|---|
| Provider Type | OIDC |
| Provider ID | azure-ad |
| Issuer URL | https://login.microsoftonline.com/{tenant-id}/v2.0 |
| Domain | company.com |
| Client ID | Application (client) ID |
| Client Secret | Valor do secret |
Google Workspace (OIDC)
No Google Cloud Console (docs oficiais):
- Vá em APIs & Services → Credentials → Create Credentials → OAuth 2.0 Client ID
- Defina o tipo de aplicação como Web application
- Adicione sua Callback URL do Zoen em Authorized redirect URIs:
https://app.zoen.space/api/auth/sso/callback/google-workspace - Copie o Client ID e o Client Secret
No Zoen:
| Campo | Valor |
|---|---|
| Provider Type | OIDC |
| Provider ID | google-workspace |
| Issuer URL | https://accounts.google.com |
| Domain | company.com |
| Client ID | Do Google Cloud Console |
| Client Secret | Do Google Cloud Console |
Para restringir o sign-in ao domínio do Google Workspace, configure a OAuth consent screen e garanta que o app está definido como Internal (só usuários do Workspace) em User type. Definir o app como Internal limita o acesso a usuários dentro da organização Google Workspace.
ADFS (SAML 2.0)
No ADFS (docs oficiais):
- Abra AD FS Management → Relying Party Trusts → Add Relying Party Trust
- Escolha Claims aware e depois Enter data about the relying party manually
- Defina o Relying party identifier (Entity ID) como a base URL do Zoen:
https://app.zoen.space - Adicione um endpoint: SAML Assertion Consumer Service (HTTP POST) com a URL:
https://app.zoen.space/api/auth/sso/saml2/callback/adfs - Exporte o Token-signing certificate de Certificates: clique com o botão direito → View Certificate → Details → Copy to File, escolha Base-64 encoded X.509 (.CER). O arquivo
.ceré PEM-encoded — renomeie para.pemantes de colar o conteúdo no Zoen. - Anote a ADFS Federation Service endpoint URL (ex.:
https://adfs.company.com/adfs/ls)
No Zoen:
| Campo | Valor |
|---|---|
| Provider Type | SAML |
| Provider ID | adfs |
| Issuer URL | https://app.zoen.space |
| Domain | company.com |
| Entry Point URL | https://adfs.company.com/adfs/ls |
| Certificate | Conteúdo do arquivo .pem |
Para ADFS, o campo Issuer URL é o SP entity ID — o identificador que o ADFS usa para identificar o Zoen como relying party. Precisa bater com o Relying party identifier que você registrou no ADFS.
Como o sign-in funciona depois do setup
Uma vez que o SSO está configurado, usuários com o seu domínio (company.com) podem entrar pelo provedor de identidade:
- O usuário vai a
app.zoen.spacee clica em Sign in with SSO - Informa o e-mail de trabalho (ex.:
alice@company.com) - O Zoen redireciona ao provedor de identidade
- Depois de autenticar, volta ao Zoen e é adicionado à organização automaticamente
- Cai no workspace
Usuários que entram via SSO pela primeira vez são provisionados automaticamente e adicionados à organização — sem convite manual.
O provisioning de SSO cria membros internos da organização. Membros externos de workspace são diferentes: são convidados a um workspace específico sem entrar na organização nem consumir um seat.
Login por senha continua disponível. Forçar todos os membros da organização a usar só SSO ainda não é suportado.
Common Questions
Setup self-hosted
Deployments self-hosted usam variáveis de ambiente em vez da checagem de billing/plano.
Variáveis de ambiente
# Required
SSO_ENABLED=true
NEXT_PUBLIC_SSO_ENABLED=true
# Required if you want users auto-added to your organization on first SSO sign-in
ORGANIZATIONS_ENABLED=true
NEXT_PUBLIC_ORGANIZATIONS_ENABLED=true
# Optional: comma-separated SSO provider IDs to trust for automatic account linking
# (links an SSO sign-in to an existing account with the same email). Needed when your
# IdP does not assert email_verified — typically SAML providers, or OIDC providers that
# omit the claim. Set it to the Provider ID you registered, then restart.
# (If you also keep SSO_PROVIDER_ID in the app's environment, that provider is trusted
# without listing it here.)
SSO_TRUSTED_PROVIDER_IDS=custom-oidc,partner-samlQuando alguém entra com SSO e já existe uma conta com o mesmo e-mail
(por exemplo, se cadastrou antes com e-mail/senha), o Zoen liga a identidade SSO
àquela conta automaticamente desde que seu IdP reporte o e-mail como
verificado, ou o provedor seja trusted. Se você encontrar um erro account not linked,
confirme que o IdP envia email_verified, ou adicione o ID do provedor a
SSO_TRUSTED_PROVIDER_IDS e reinicie.
Você pode registrar provedores pela Settings UI (como no cloud) ou rodando o script de registro diretamente contra o banco.
Registro via script
Use isso quando precisar registrar um provedor SSO sem passar pela UI — por exemplo, durante o deployment inicial ou automação CI/CD.
# OIDC example (Okta)
SSO_ENABLED=true \
NEXT_PUBLIC_APP_URL=https://your-instance.com \
SSO_PROVIDER_TYPE=oidc \
SSO_PROVIDER_ID=okta \
SSO_ISSUER=https://dev-1234567.okta.com/oauth2/default \
SSO_DOMAIN=company.com \
SSO_USER_EMAIL=admin@company.com \
SSO_OIDC_CLIENT_ID=your-client-id \
SSO_OIDC_CLIENT_SECRET=your-client-secret \
bun run packages/db/scripts/register-sso-provider.ts# SAML example (ADFS)
SSO_ENABLED=true \
NEXT_PUBLIC_APP_URL=https://your-instance.com \
SSO_PROVIDER_TYPE=saml \
SSO_PROVIDER_ID=adfs \
SSO_ISSUER=https://your-instance.com \
SSO_DOMAIN=company.com \
SSO_USER_EMAIL=admin@company.com \
SSO_SAML_ENTRY_POINT=https://adfs.company.com/adfs/ls \
SSO_SAML_CERT="-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----" \
bun run packages/db/scripts/register-sso-provider.tsO script imprime a callback URL para configurar no IdP quando conclui.
Para remover um provedor:
SSO_USER_EMAIL=admin@company.com \
bun run packages/db/scripts/deregister-sso-provider.ts