@open-mercato/enterprise 0.4.6-develop-15c18897fc → 0.4.6-develop-34aa847ce6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +2 -2
- package/dist/modules/sso/acl.js +11 -0
- package/dist/modules/sso/acl.js.map +7 -0
- package/dist/modules/sso/api/admin-context.js +27 -0
- package/dist/modules/sso/api/admin-context.js.map +7 -0
- package/dist/modules/sso/api/callback/oidc/route.js +103 -0
- package/dist/modules/sso/api/callback/oidc/route.js.map +7 -0
- package/dist/modules/sso/api/config/[id]/activate/route.js +49 -0
- package/dist/modules/sso/api/config/[id]/activate/route.js.map +7 -0
- package/dist/modules/sso/api/config/[id]/domains/route.js +96 -0
- package/dist/modules/sso/api/config/[id]/domains/route.js.map +7 -0
- package/dist/modules/sso/api/config/[id]/route.js +103 -0
- package/dist/modules/sso/api/config/[id]/route.js.map +7 -0
- package/dist/modules/sso/api/config/[id]/test/route.js +41 -0
- package/dist/modules/sso/api/config/[id]/test/route.js.map +7 -0
- package/dist/modules/sso/api/config/route.js +83 -0
- package/dist/modules/sso/api/config/route.js.map +7 -0
- package/dist/modules/sso/api/error-handler.js +28 -0
- package/dist/modules/sso/api/error-handler.js.map +7 -0
- package/dist/modules/sso/api/hrd/route.js +52 -0
- package/dist/modules/sso/api/hrd/route.js.map +7 -0
- package/dist/modules/sso/api/initiate/route.js +66 -0
- package/dist/modules/sso/api/initiate/route.js.map +7 -0
- package/dist/modules/sso/api/scim/context.js +68 -0
- package/dist/modules/sso/api/scim/context.js.map +7 -0
- package/dist/modules/sso/api/scim/logs/route.js +65 -0
- package/dist/modules/sso/api/scim/logs/route.js.map +7 -0
- package/dist/modules/sso/api/scim/tokens/[id]/route.js +42 -0
- package/dist/modules/sso/api/scim/tokens/[id]/route.js.map +7 -0
- package/dist/modules/sso/api/scim/tokens/route.js +83 -0
- package/dist/modules/sso/api/scim/tokens/route.js.map +7 -0
- package/dist/modules/sso/api/scim/v2/ServiceProviderConfig/route.js +42 -0
- package/dist/modules/sso/api/scim/v2/ServiceProviderConfig/route.js.map +7 -0
- package/dist/modules/sso/api/scim/v2/Users/[id]/route.js +94 -0
- package/dist/modules/sso/api/scim/v2/Users/[id]/route.js.map +7 -0
- package/dist/modules/sso/api/scim/v2/Users/route.js +86 -0
- package/dist/modules/sso/api/scim/v2/Users/route.js.map +7 -0
- package/dist/modules/sso/backend/page.js +173 -0
- package/dist/modules/sso/backend/page.js.map +7 -0
- package/dist/modules/sso/backend/page.meta.js +31 -0
- package/dist/modules/sso/backend/page.meta.js.map +7 -0
- package/dist/modules/sso/backend/sso/config/[id]/page.js +749 -0
- package/dist/modules/sso/backend/sso/config/[id]/page.js.map +7 -0
- package/dist/modules/sso/backend/sso/config/[id]/page.meta.js +19 -0
- package/dist/modules/sso/backend/sso/config/[id]/page.meta.js.map +7 -0
- package/dist/modules/sso/backend/sso/config/new/page.js +381 -0
- package/dist/modules/sso/backend/sso/config/new/page.js.map +7 -0
- package/dist/modules/sso/backend/sso/config/new/page.meta.js +19 -0
- package/dist/modules/sso/backend/sso/config/new/page.meta.js.map +7 -0
- package/dist/modules/sso/data/entities.js +299 -0
- package/dist/modules/sso/data/entities.js.map +7 -0
- package/dist/modules/sso/data/validators.js +114 -0
- package/dist/modules/sso/data/validators.js.map +7 -0
- package/dist/modules/sso/di.js +26 -0
- package/dist/modules/sso/di.js.map +7 -0
- package/dist/modules/sso/events.js +24 -0
- package/dist/modules/sso/events.js.map +7 -0
- package/dist/modules/sso/i18n/de.json +146 -0
- package/dist/modules/sso/i18n/en.json +146 -0
- package/dist/modules/sso/i18n/es.json +146 -0
- package/dist/modules/sso/i18n/pl.json +146 -0
- package/dist/modules/sso/index.js +11 -0
- package/dist/modules/sso/index.js.map +7 -0
- package/dist/modules/sso/lib/domains.js +30 -0
- package/dist/modules/sso/lib/domains.js.map +7 -0
- package/dist/modules/sso/lib/oidc-provider.js +140 -0
- package/dist/modules/sso/lib/oidc-provider.js.map +7 -0
- package/dist/modules/sso/lib/registry.js +15 -0
- package/dist/modules/sso/lib/registry.js.map +7 -0
- package/dist/modules/sso/lib/scim-filter.js +43 -0
- package/dist/modules/sso/lib/scim-filter.js.map +7 -0
- package/dist/modules/sso/lib/scim-mapper.js +49 -0
- package/dist/modules/sso/lib/scim-mapper.js.map +7 -0
- package/dist/modules/sso/lib/scim-patch.js +63 -0
- package/dist/modules/sso/lib/scim-patch.js.map +7 -0
- package/dist/modules/sso/lib/scim-response.js +34 -0
- package/dist/modules/sso/lib/scim-response.js.map +7 -0
- package/dist/modules/sso/lib/scim-utils.js +9 -0
- package/dist/modules/sso/lib/scim-utils.js.map +7 -0
- package/dist/modules/sso/lib/state-cookie.js +67 -0
- package/dist/modules/sso/lib/state-cookie.js.map +7 -0
- package/dist/modules/sso/lib/types.js +1 -0
- package/dist/modules/sso/lib/types.js.map +7 -0
- package/dist/modules/sso/migrations/Migration20260219000000_sso.js +20 -0
- package/dist/modules/sso/migrations/Migration20260219000000_sso.js.map +7 -0
- package/dist/modules/sso/migrations/Migration20260222000000_sso_add_name.js +13 -0
- package/dist/modules/sso/migrations/Migration20260222000000_sso_add_name.js.map +7 -0
- package/dist/modules/sso/migrations/Migration20260222000001_sso_partial_unique_org.js +15 -0
- package/dist/modules/sso/migrations/Migration20260222000001_sso_partial_unique_org.js.map +7 -0
- package/dist/modules/sso/migrations/Migration20260223000000_scim_tables.js +22 -0
- package/dist/modules/sso/migrations/Migration20260223000000_scim_tables.js.map +7 -0
- package/dist/modules/sso/migrations/Migration20260224000000_sso_external_id.js +15 -0
- package/dist/modules/sso/migrations/Migration20260224000000_sso_external_id.js.map +7 -0
- package/dist/modules/sso/migrations/Migration20260224100000_sso_role_grants.js +17 -0
- package/dist/modules/sso/migrations/Migration20260224100000_sso_role_grants.js.map +7 -0
- package/dist/modules/sso/migrations/Migration20260224200000_drop_default_role_id.js +13 -0
- package/dist/modules/sso/migrations/Migration20260224200000_drop_default_role_id.js.map +7 -0
- package/dist/modules/sso/migrations/Migration20260225000000_sso_identities_partial_unique.js +23 -0
- package/dist/modules/sso/migrations/Migration20260225000000_sso_identities_partial_unique.js.map +7 -0
- package/dist/modules/sso/migrations/Migration20260305000000_sso_role_grants_org_id.js +14 -0
- package/dist/modules/sso/migrations/Migration20260305000000_sso_role_grants_org_id.js.map +7 -0
- package/dist/modules/sso/services/accountLinkingService.js +298 -0
- package/dist/modules/sso/services/accountLinkingService.js.map +7 -0
- package/dist/modules/sso/services/hrdService.js +18 -0
- package/dist/modules/sso/services/hrdService.js.map +7 -0
- package/dist/modules/sso/services/scimService.js +372 -0
- package/dist/modules/sso/services/scimService.js.map +7 -0
- package/dist/modules/sso/services/scimTokenService.js +94 -0
- package/dist/modules/sso/services/scimTokenService.js.map +7 -0
- package/dist/modules/sso/services/ssoConfigService.js +254 -0
- package/dist/modules/sso/services/ssoConfigService.js.map +7 -0
- package/dist/modules/sso/services/ssoService.js +125 -0
- package/dist/modules/sso/services/ssoService.js.map +7 -0
- package/dist/modules/sso/setup.js +47 -0
- package/dist/modules/sso/setup.js.map +7 -0
- package/dist/modules/sso/subscribers/user-deleted-cleanup.js +21 -0
- package/dist/modules/sso/subscribers/user-deleted-cleanup.js.map +7 -0
- package/dist/modules/sso/widgets/injection/login-sso/widget.client.js +106 -0
- package/dist/modules/sso/widgets/injection/login-sso/widget.client.js.map +7 -0
- package/dist/modules/sso/widgets/injection/login-sso/widget.js +16 -0
- package/dist/modules/sso/widgets/injection/login-sso/widget.js.map +7 -0
- package/dist/modules/sso/widgets/injection-table.js +14 -0
- package/dist/modules/sso/widgets/injection-table.js.map +7 -0
- package/package.json +5 -4
- package/src/index.ts +1 -1
- package/src/modules/sso/acl.ts +7 -0
- package/src/modules/sso/api/admin-context.ts +36 -0
- package/src/modules/sso/api/callback/oidc/route.ts +115 -0
- package/src/modules/sso/api/config/[id]/activate/route.ts +53 -0
- package/src/modules/sso/api/config/[id]/domains/route.ts +107 -0
- package/src/modules/sso/api/config/[id]/route.ts +114 -0
- package/src/modules/sso/api/config/[id]/test/route.ts +44 -0
- package/src/modules/sso/api/config/route.ts +88 -0
- package/src/modules/sso/api/error-handler.ts +36 -0
- package/src/modules/sso/api/hrd/route.ts +55 -0
- package/src/modules/sso/api/initiate/route.ts +70 -0
- package/src/modules/sso/api/scim/context.ts +85 -0
- package/src/modules/sso/api/scim/logs/route.ts +69 -0
- package/src/modules/sso/api/scim/tokens/[id]/route.ts +45 -0
- package/src/modules/sso/api/scim/tokens/route.ts +89 -0
- package/src/modules/sso/api/scim/v2/ServiceProviderConfig/route.ts +40 -0
- package/src/modules/sso/api/scim/v2/Users/[id]/route.ts +103 -0
- package/src/modules/sso/api/scim/v2/Users/route.ts +94 -0
- package/src/modules/sso/backend/page.meta.ts +29 -0
- package/src/modules/sso/backend/page.tsx +232 -0
- package/src/modules/sso/backend/sso/config/[id]/page.meta.ts +15 -0
- package/src/modules/sso/backend/sso/config/[id]/page.tsx +1024 -0
- package/src/modules/sso/backend/sso/config/new/page.meta.ts +15 -0
- package/src/modules/sso/backend/sso/config/new/page.tsx +463 -0
- package/src/modules/sso/data/entities.ts +240 -0
- package/src/modules/sso/data/validators.ts +140 -0
- package/src/modules/sso/di.ts +25 -0
- package/src/modules/sso/docs/entra-id-setup.md +281 -0
- package/src/modules/sso/docs/google-workspace-setup.md +174 -0
- package/src/modules/sso/docs/sso-overview.md +218 -0
- package/src/modules/sso/docs/sso-security-audit-2026-02-27.md +118 -0
- package/src/modules/sso/docs/zitadel-setup.md +195 -0
- package/src/modules/sso/events.ts +21 -0
- package/src/modules/sso/i18n/de.json +146 -0
- package/src/modules/sso/i18n/en.json +146 -0
- package/src/modules/sso/i18n/es.json +146 -0
- package/src/modules/sso/i18n/pl.json +146 -0
- package/src/modules/sso/index.ts +7 -0
- package/src/modules/sso/lib/domains.ts +31 -0
- package/src/modules/sso/lib/oidc-provider.ts +196 -0
- package/src/modules/sso/lib/registry.ts +13 -0
- package/src/modules/sso/lib/scim-filter.ts +62 -0
- package/src/modules/sso/lib/scim-mapper.ts +88 -0
- package/src/modules/sso/lib/scim-patch.ts +88 -0
- package/src/modules/sso/lib/scim-response.ts +40 -0
- package/src/modules/sso/lib/scim-utils.ts +5 -0
- package/src/modules/sso/lib/state-cookie.ts +79 -0
- package/src/modules/sso/lib/types.ts +50 -0
- package/src/modules/sso/migrations/.snapshot-open-mercato.json +912 -0
- package/src/modules/sso/migrations/Migration20260219000000_sso.ts +21 -0
- package/src/modules/sso/migrations/Migration20260222000000_sso_add_name.ts +13 -0
- package/src/modules/sso/migrations/Migration20260222000001_sso_partial_unique_org.ts +15 -0
- package/src/modules/sso/migrations/Migration20260223000000_scim_tables.ts +24 -0
- package/src/modules/sso/migrations/Migration20260224000000_sso_external_id.ts +15 -0
- package/src/modules/sso/migrations/Migration20260224100000_sso_role_grants.ts +18 -0
- package/src/modules/sso/migrations/Migration20260224200000_drop_default_role_id.ts +13 -0
- package/src/modules/sso/migrations/Migration20260225000000_sso_identities_partial_unique.ts +25 -0
- package/src/modules/sso/migrations/Migration20260305000000_sso_role_grants_org_id.ts +14 -0
- package/src/modules/sso/services/accountLinkingService.ts +386 -0
- package/src/modules/sso/services/hrdService.ts +22 -0
- package/src/modules/sso/services/scimService.ts +461 -0
- package/src/modules/sso/services/scimTokenService.ts +136 -0
- package/src/modules/sso/services/ssoConfigService.ts +337 -0
- package/src/modules/sso/services/ssoService.ts +167 -0
- package/src/modules/sso/setup.ts +56 -0
- package/src/modules/sso/subscribers/user-deleted-cleanup.ts +33 -0
- package/src/modules/sso/widgets/injection/login-sso/widget.client.tsx +130 -0
- package/src/modules/sso/widgets/injection/login-sso/widget.ts +16 -0
- package/src/modules/sso/widgets/injection-table.ts +12 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Zitadel Setup Guide for Open Mercato SSO
|
|
2
|
+
|
|
3
|
+
This guide walks through setting up Zitadel as the identity provider for OIDC login and SCIM user provisioning in Open Mercato.
|
|
4
|
+
|
|
5
|
+
**Free tier**: Zitadel Cloud offers a free tier with up to 25,000 monthly active users.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Create a Zitadel Instance
|
|
10
|
+
|
|
11
|
+
1. Go to https://zitadel.com and sign up for a free account
|
|
12
|
+
2. Create a new instance (or use the default one)
|
|
13
|
+
3. Note your instance domain: `https://<instance>.zitadel.cloud`
|
|
14
|
+
|
|
15
|
+
## 2. Create Test Users
|
|
16
|
+
|
|
17
|
+
1. In the Zitadel Console, go to **Users** → **+ New**
|
|
18
|
+
2. Fill in:
|
|
19
|
+
- **Username**: e.g., `testuser@yourdomain.com`
|
|
20
|
+
- **First name** / **Last name**
|
|
21
|
+
- **Email**: the user's email address
|
|
22
|
+
- **Password**: set an initial password
|
|
23
|
+
3. Click **Create**
|
|
24
|
+
4. Repeat for 2-3 test users
|
|
25
|
+
|
|
26
|
+
## 3. Register the OIDC Application
|
|
27
|
+
|
|
28
|
+
1. In the Zitadel Console, go to **Projects** → **+ New**
|
|
29
|
+
2. Name the project `Open Mercato` and click **Continue**
|
|
30
|
+
3. Click **+ New Application**
|
|
31
|
+
4. Configure:
|
|
32
|
+
|
|
33
|
+
| Field | Value |
|
|
34
|
+
|-------|-------|
|
|
35
|
+
| **Name** | `Open Mercato` |
|
|
36
|
+
| **Type** | `Web` |
|
|
37
|
+
| **Authentication Method** | `Code (PKCE)` |
|
|
38
|
+
| **Redirect URIs** | `http://localhost:3000/api/sso/callback/oidc` |
|
|
39
|
+
| **Post-Logout URIs** | `http://localhost:3000/login` |
|
|
40
|
+
|
|
41
|
+
5. Click **Create**
|
|
42
|
+
6. On the application overview, note:
|
|
43
|
+
- **Client ID**
|
|
44
|
+
- **Client Secret** (generate one if using Code flow)
|
|
45
|
+
|
|
46
|
+
### OIDC Credentials Summary
|
|
47
|
+
|
|
48
|
+
| Credential | Where to find it | Value |
|
|
49
|
+
|------------|-----------------|-------|
|
|
50
|
+
| **Issuer URL** | Instance domain | `https://<instance>.zitadel.cloud` |
|
|
51
|
+
| **Client ID** | Application → General | Copy from console |
|
|
52
|
+
| **Client Secret** | Application → General → Generate | Copy immediately |
|
|
53
|
+
| **Redirect URI** | You configured this | `http://localhost:3000/api/sso/callback/oidc` |
|
|
54
|
+
|
|
55
|
+
### Configure Token Claims
|
|
56
|
+
|
|
57
|
+
Zitadel includes `email`, `given_name`, `family_name`, and `email_verified` in ID tokens by default when the `openid`, `profile`, and `email` scopes are requested. No additional configuration is needed.
|
|
58
|
+
|
|
59
|
+
### Assign Users
|
|
60
|
+
|
|
61
|
+
By default, all users in the organization can access the application. To restrict access:
|
|
62
|
+
|
|
63
|
+
1. Go to your Project → **Authorizations** → **+ New**
|
|
64
|
+
2. Select specific users or grant roles
|
|
65
|
+
3. Enable "Require authorization" on the project settings if you want to restrict access
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 4. Create the SSO Config in Open Mercato
|
|
70
|
+
|
|
71
|
+
1. Log into Open Mercato as admin
|
|
72
|
+
2. Go to **Settings** → **Single Sign-On** → **Create New**
|
|
73
|
+
3. Select **OIDC** as the protocol
|
|
74
|
+
4. Enter:
|
|
75
|
+
- **Name**: `Zitadel`
|
|
76
|
+
- **Issuer URL**: `https://<instance>.zitadel.cloud`
|
|
77
|
+
- **Client ID**: (paste from Zitadel)
|
|
78
|
+
- **Client Secret**: (paste from Zitadel)
|
|
79
|
+
5. Add allowed email domains (e.g., `yourdomain.com`)
|
|
80
|
+
6. Test the connection (Verify Discovery)
|
|
81
|
+
7. Activate the config
|
|
82
|
+
|
|
83
|
+
### Verify OIDC Login
|
|
84
|
+
|
|
85
|
+
1. Open a private/incognito browser window
|
|
86
|
+
2. Go to the Open Mercato login page
|
|
87
|
+
3. Enter an email address belonging to one of your test users
|
|
88
|
+
4. The HRD check should detect SSO and redirect to Zitadel login
|
|
89
|
+
5. Authenticate at Zitadel
|
|
90
|
+
6. You should be redirected back to Open Mercato and logged in
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 5. Configure SCIM Provisioning
|
|
95
|
+
|
|
96
|
+
**Prerequisite**: Generate a SCIM bearer token from Open Mercato via the admin UI (SSO config → Provisioning tab → Generate Token).
|
|
97
|
+
|
|
98
|
+
### Zitadel SCIM Support
|
|
99
|
+
|
|
100
|
+
Zitadel supports outbound SCIM provisioning through its **Actions** feature (custom workflows). As of 2026, Zitadel also offers a native SCIM provisioning option:
|
|
101
|
+
|
|
102
|
+
1. Go to your Project → **Open Mercato** application
|
|
103
|
+
2. Navigate to **Provisioning** or **Actions**
|
|
104
|
+
3. Configure SCIM outbound provisioning:
|
|
105
|
+
|
|
106
|
+
| Field | Value |
|
|
107
|
+
|-------|-------|
|
|
108
|
+
| **SCIM Base URL** | `http://localhost:3000/api/sso/scim/v2` (dev) or `https://<your-domain>/api/sso/scim/v2` (prod) |
|
|
109
|
+
| **Bearer Token** | Paste the SCIM token from Open Mercato |
|
|
110
|
+
|
|
111
|
+
4. Test the connection
|
|
112
|
+
|
|
113
|
+
### Alternative: Manual/API-Based Provisioning
|
|
114
|
+
|
|
115
|
+
If Zitadel's native SCIM outbound is not available in your version, use the Zitadel Management API to sync users:
|
|
116
|
+
|
|
117
|
+
1. Create a Service User in Zitadel with Management API access
|
|
118
|
+
2. Use the Zitadel Management API to list users
|
|
119
|
+
3. Push user changes to Open Mercato's SCIM endpoint
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 6. Test the Full Flow
|
|
124
|
+
|
|
125
|
+
### Test OIDC Login
|
|
126
|
+
|
|
127
|
+
1. Navigate to Open Mercato login
|
|
128
|
+
2. Enter a test user's email
|
|
129
|
+
3. **Expected**: Redirect to Zitadel → authenticate → redirect back to Open Mercato
|
|
130
|
+
4. Verify the user appears in the Open Mercato admin panel
|
|
131
|
+
|
|
132
|
+
### Test JIT Provisioning
|
|
133
|
+
|
|
134
|
+
If SCIM is not configured and JIT is enabled:
|
|
135
|
+
|
|
136
|
+
1. Log in as a new user via OIDC
|
|
137
|
+
2. **Expected**: User is automatically created in Open Mercato with `provisioningMethod: jit`
|
|
138
|
+
3. Verify user profile (name, email) matches Zitadel
|
|
139
|
+
|
|
140
|
+
### Test SCIM Provisioning (if configured)
|
|
141
|
+
|
|
142
|
+
1. Create a new user in Zitadel
|
|
143
|
+
2. Wait for provisioning cycle (or trigger manually)
|
|
144
|
+
3. **Expected**: User appears in Open Mercato with `provisioningMethod: scim`
|
|
145
|
+
4. Update the user in Zitadel → verify changes propagate
|
|
146
|
+
5. Deactivate the user in Zitadel → verify deactivation in Open Mercato
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Zitadel SCIM Quirks
|
|
151
|
+
|
|
152
|
+
| Quirk | Description | How to handle |
|
|
153
|
+
|-------|-------------|---------------|
|
|
154
|
+
| **Standard-compliant** | Zitadel follows SCIM 2.0 spec closely | Standard parsing works |
|
|
155
|
+
| **`email_verified` claim** | Always included in ID tokens | No special handling needed |
|
|
156
|
+
| **Group claims** | Available via project roles | Configure role mappings if needed |
|
|
157
|
+
| **PKCE support** | Natively supports S256 PKCE | Automatically used by Open Mercato |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Troubleshooting
|
|
162
|
+
|
|
163
|
+
### OIDC login redirects but fails
|
|
164
|
+
|
|
165
|
+
- Verify the Redirect URI matches exactly: `http://localhost:3000/api/sso/callback/oidc`
|
|
166
|
+
- Check that the Issuer URL matches your instance: `https://<instance>.zitadel.cloud`
|
|
167
|
+
- Verify Client ID and Client Secret
|
|
168
|
+
- Check the Zitadel Console → **Events** for error details
|
|
169
|
+
|
|
170
|
+
### "redirect_uri_mismatch" error
|
|
171
|
+
|
|
172
|
+
- Ensure the redirect URI registered in Zitadel matches exactly (including protocol and port)
|
|
173
|
+
- No trailing slash differences
|
|
174
|
+
- For production, use HTTPS
|
|
175
|
+
|
|
176
|
+
### Users can't log in
|
|
177
|
+
|
|
178
|
+
- Check that users exist in the same Zitadel organization
|
|
179
|
+
- If "Require authorization" is enabled on the project, ensure users have project grants
|
|
180
|
+
- Check that the email domain matches the allowed domains in Open Mercato SSO config
|
|
181
|
+
|
|
182
|
+
### SCIM connection fails
|
|
183
|
+
|
|
184
|
+
- For local dev, Zitadel needs to reach your server over the internet
|
|
185
|
+
- Use ngrok: `ngrok http 3000`
|
|
186
|
+
- Update the SCIM Base URL to the ngrok URL
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Reference
|
|
191
|
+
|
|
192
|
+
- [Zitadel OIDC Documentation](https://zitadel.com/docs/guides/integrate/login/oidc)
|
|
193
|
+
- [Zitadel SCIM Documentation](https://zitadel.com/docs/guides/integrate/scim)
|
|
194
|
+
- [Zitadel Actions](https://zitadel.com/docs/guides/manage/customize/actions)
|
|
195
|
+
- [Zitadel Cloud](https://zitadel.com/pricing)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createModuleEvents } from '@open-mercato/shared/modules/events'
|
|
2
|
+
|
|
3
|
+
const events = [
|
|
4
|
+
{ id: 'sso.login.initiated', label: 'SSO Login Initiated', category: 'lifecycle' },
|
|
5
|
+
{ id: 'sso.login.completed', label: 'SSO Login Completed', category: 'lifecycle' },
|
|
6
|
+
{ id: 'sso.login.failed', label: 'SSO Login Failed', category: 'lifecycle' },
|
|
7
|
+
{ id: 'sso.identity.linked', label: 'SSO Identity Linked', category: 'lifecycle' },
|
|
8
|
+
{ id: 'sso.identity.created', label: 'SSO Identity Created (JIT)', category: 'lifecycle' },
|
|
9
|
+
{ id: 'sso.config.created', label: 'SSO Config Created', entity: 'sso_config', category: 'crud' },
|
|
10
|
+
{ id: 'sso.config.updated', label: 'SSO Config Updated', entity: 'sso_config', category: 'crud' },
|
|
11
|
+
{ id: 'sso.config.deleted', label: 'SSO Config Deleted', entity: 'sso_config', category: 'crud' },
|
|
12
|
+
{ id: 'sso.config.activated', label: 'SSO Config Activated', entity: 'sso_config', category: 'lifecycle' },
|
|
13
|
+
{ id: 'sso.config.deactivated', label: 'SSO Config Deactivated', entity: 'sso_config', category: 'lifecycle' },
|
|
14
|
+
{ id: 'sso.domain.added', label: 'SSO Domain Added', entity: 'sso_config', category: 'lifecycle' },
|
|
15
|
+
{ id: 'sso.domain.removed', label: 'SSO Domain Removed', entity: 'sso_config', category: 'lifecycle' },
|
|
16
|
+
] as const
|
|
17
|
+
|
|
18
|
+
export const eventsConfig = createModuleEvents({ moduleId: 'sso', events })
|
|
19
|
+
export const emitSsoEvent = eventsConfig.emit
|
|
20
|
+
export type SsoEventId = typeof events[number]['id']
|
|
21
|
+
export default eventsConfig
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common.activating": "Wird aktiviert...",
|
|
3
|
+
"common.add": "Hinzufügen",
|
|
4
|
+
"common.back": "Zurück",
|
|
5
|
+
"common.cancel": "Abbrechen",
|
|
6
|
+
"common.copied": "In die Zwischenablage kopiert",
|
|
7
|
+
"common.copy": "Kopieren",
|
|
8
|
+
"common.create": "Erstellen",
|
|
9
|
+
"common.creating": "Wird erstellt...",
|
|
10
|
+
"common.delete": "Löschen",
|
|
11
|
+
"common.disabled": "Deaktiviert",
|
|
12
|
+
"common.dismiss": "Verwerfen",
|
|
13
|
+
"common.edit": "Bearbeiten",
|
|
14
|
+
"common.enabled": "Aktiviert",
|
|
15
|
+
"common.loading": "Wird geladen...",
|
|
16
|
+
"common.next": "Weiter",
|
|
17
|
+
"common.notFound": "Nicht gefunden",
|
|
18
|
+
"common.remove": "Entfernen",
|
|
19
|
+
"common.save": "Speichern",
|
|
20
|
+
"common.saving": "Wird gespeichert...",
|
|
21
|
+
"settings.sections.auth": "Authentifizierung",
|
|
22
|
+
"sso.admin.action.activate": "Aktivieren",
|
|
23
|
+
"sso.admin.action.deactivate": "Deaktivieren",
|
|
24
|
+
"sso.admin.action.test": "Erkennung überprüfen",
|
|
25
|
+
"sso.admin.activated": "SSO-Konfiguration aktiviert",
|
|
26
|
+
"sso.admin.activity.empty": "Noch keine SSO-Anmeldeaktivität. Aktivitäten werden hier angezeigt, sobald Benutzer sich über SSO anmelden.",
|
|
27
|
+
"sso.admin.banner.activateNow": "Jetzt aktivieren",
|
|
28
|
+
"sso.admin.banner.created": "Ihre SSO-Konfiguration wurde erstellt. Möchten Sie sie jetzt aktivieren?",
|
|
29
|
+
"sso.admin.banner.notYet": "Noch nicht",
|
|
30
|
+
"sso.admin.column.created": "Erstellt",
|
|
31
|
+
"sso.admin.column.domains": "Domains",
|
|
32
|
+
"sso.admin.column.name": "Name",
|
|
33
|
+
"sso.admin.column.protocol": "Protokoll",
|
|
34
|
+
"sso.admin.column.status": "Status",
|
|
35
|
+
"sso.admin.create.title": "SSO konfigurieren",
|
|
36
|
+
"sso.admin.created": "SSO-Konfiguration erstellt",
|
|
37
|
+
"sso.admin.deactivated": "SSO-Konfiguration deaktiviert",
|
|
38
|
+
"sso.admin.delete.confirm": "Sind Sie sicher? Die SSO-Konfiguration wird entfernt. Benutzer mit verknüpften SSO-Identitäten müssen die Passwort-Anmeldung verwenden.",
|
|
39
|
+
"sso.admin.delete.success": "SSO-Konfiguration gelöscht",
|
|
40
|
+
"sso.admin.delete.title": "SSO-Konfiguration löschen",
|
|
41
|
+
"sso.admin.detail.backToList": "Zurück zu SSO",
|
|
42
|
+
"sso.admin.detail.title": "SSO-Konfiguration",
|
|
43
|
+
"sso.admin.domains.empty": "Keine Domains konfiguriert. Fügen Sie mindestens eine Domain hinzu, bevor Sie SSO aktivieren.",
|
|
44
|
+
"sso.admin.empty.cta": "SSO konfigurieren",
|
|
45
|
+
"sso.admin.empty.description": "Konfigurieren Sie Single Sign-On, damit sich Ihre Benutzer mit Ihrem Identitätsanbieter authentifizieren können.",
|
|
46
|
+
"sso.admin.empty.title": "Kein SSO konfiguriert",
|
|
47
|
+
"sso.admin.error.activationFailed": "Aktivierungsstatus konnte nicht aktualisiert werden",
|
|
48
|
+
"sso.admin.error.alreadyExists": "Für diese Organisation existiert bereits eine SSO-Konfiguration",
|
|
49
|
+
"sso.admin.error.createFailed": "SSO-Konfiguration konnte nicht erstellt werden",
|
|
50
|
+
"sso.admin.error.deleteActive": "Eine aktive SSO-Konfiguration kann nicht gelöscht werden — deaktivieren Sie sie zuerst",
|
|
51
|
+
"sso.admin.error.deleteFailed": "SSO-Konfiguration konnte nicht gelöscht werden",
|
|
52
|
+
"sso.admin.error.domainAddFailed": "Domain konnte nicht hinzugefügt werden",
|
|
53
|
+
"sso.admin.error.domainRemoveFailed": "Domain konnte nicht entfernt werden",
|
|
54
|
+
"sso.admin.error.loadFailed": "SSO-Konfiguration konnte nicht geladen werden",
|
|
55
|
+
"sso.admin.error.noDomainsForActivation": "Fügen Sie mindestens eine erlaubte E-Mail-Domain hinzu, bevor Sie aktivieren",
|
|
56
|
+
"sso.admin.error.saveFailed": "SSO-Konfiguration konnte nicht gespeichert werden",
|
|
57
|
+
"sso.admin.error.testFailed": "Verbindungstest fehlgeschlagen",
|
|
58
|
+
"sso.admin.field.autoLinkByEmail": "Automatische Verknüpfung per E-Mail",
|
|
59
|
+
"sso.admin.field.autoLinkByEmailDesc": "Bestehende Benutzer automatisch über übereinstimmende E-Mail-Adresse verknüpfen",
|
|
60
|
+
"sso.admin.field.changeSecret": "Ändern",
|
|
61
|
+
"sso.admin.field.clientId": "Client-ID",
|
|
62
|
+
"sso.admin.field.clientSecret": "Client-Geheimnis",
|
|
63
|
+
"sso.admin.field.issuer": "Aussteller-URL",
|
|
64
|
+
"sso.admin.field.jitDisabledByScim": "Nicht verfügbar — SCIM-Verzeichnissynchronisierung ist aktiv. Widerrufen Sie SCIM-Token, um JIT zu aktivieren.",
|
|
65
|
+
"sso.admin.field.jitEnabled": "Just-in-Time-Bereitstellung",
|
|
66
|
+
"sso.admin.field.jitEnabledDesc": "Benutzerkonten automatisch bei der ersten SSO-Anmeldung erstellen",
|
|
67
|
+
"sso.admin.field.name": "Konfigurationsname",
|
|
68
|
+
"sso.admin.field.protocol": "Protokoll",
|
|
69
|
+
"sso.admin.field.secretPlaceholder": "Neues Geheimnis eingeben, um das bestehende zu ersetzen",
|
|
70
|
+
"sso.admin.field.secretRequired": "Client-Geheimnis eingeben",
|
|
71
|
+
"sso.admin.field.secretSet": "Client-Geheimnis ist konfiguriert",
|
|
72
|
+
"sso.admin.new": "Neue SSO-Konfiguration",
|
|
73
|
+
"sso.admin.roles.description": "Ordnen Sie IdP-App-Rollennamen lokalen Rollen zu. Bei jeder SSO-Anmeldung werden SSO-basierte Rollen synchronisiert — Rollen, die der IdP nicht mehr sendet, werden entfernt, während manuell zugewiesene Rollen erhalten bleiben.",
|
|
74
|
+
"sso.admin.roles.empty": "Keine Rollenzuordnungen konfiguriert. IdP-Rollennamen werden direkt mit lokalen Rollennamen abgeglichen.",
|
|
75
|
+
"sso.admin.roles.error.duplicate": "Diese IdP-Rolle ist bereits zugeordnet",
|
|
76
|
+
"sso.admin.roles.error.emptyIdpRole": "IdP-Rollenname ist erforderlich",
|
|
77
|
+
"sso.admin.roles.error.emptyLocalRole": "Wählen Sie eine lokale Rolle",
|
|
78
|
+
"sso.admin.roles.error.saveFailed": "Rollenzuordnungen konnten nicht gespeichert werden",
|
|
79
|
+
"sso.admin.roles.idpRole": "IdP-Rollenname",
|
|
80
|
+
"sso.admin.roles.idpRolePlaceholder": "z.B. OpenMercato.Admin",
|
|
81
|
+
"sso.admin.roles.localRole": "Lokale Rolle",
|
|
82
|
+
"sso.admin.roles.saved": "Rollenzuordnungen gespeichert",
|
|
83
|
+
"sso.admin.saved": "SSO-Konfiguration gespeichert",
|
|
84
|
+
"sso.admin.scim.endpointCopied": "SCIM-Endpunkt-URL kopiert",
|
|
85
|
+
"sso.admin.scim.endpointUrl": "SCIM-Endpunkt-URL",
|
|
86
|
+
"sso.admin.scim.error.createFailed": "SCIM-Token konnte nicht erstellt werden",
|
|
87
|
+
"sso.admin.scim.error.revokeFailed": "Token konnte nicht widerrufen werden",
|
|
88
|
+
"sso.admin.scim.generateToken": "Token generieren",
|
|
89
|
+
"sso.admin.scim.googleNotSupported": "Google Workspace unterstützt keine SCIM-Bereitstellung. Benutzer werden beim ersten Anmelden per Just-In-Time (JIT) bereitgestellt.",
|
|
90
|
+
"sso.admin.scim.jitActiveWarning": "SCIM-Bereitstellung ist nicht verfügbar, solange JIT aktiviert ist. Deaktivieren Sie JIT im Tab Allgemein, um SCIM zu konfigurieren.",
|
|
91
|
+
"sso.admin.scim.log.error": "Fehler",
|
|
92
|
+
"sso.admin.scim.log.operation": "Vorgang",
|
|
93
|
+
"sso.admin.scim.log.resource": "Ressource",
|
|
94
|
+
"sso.admin.scim.log.status": "Status",
|
|
95
|
+
"sso.admin.scim.log.time": "Zeit",
|
|
96
|
+
"sso.admin.scim.noTokens": "SCIM-Bereitstellung ist nicht konfiguriert. Generieren Sie ein Bearer-Token, damit Ihr Identitätsanbieter Benutzer automatisch synchronisieren kann.",
|
|
97
|
+
"sso.admin.scim.recentActivity": "Letzte Bereitstellungsaktivität",
|
|
98
|
+
"sso.admin.scim.revoke.action": "Widerrufen",
|
|
99
|
+
"sso.admin.scim.revoke.confirm": "Sind Sie sicher? Dieses Token wird SCIM-Anfragen nicht mehr authentifizieren.",
|
|
100
|
+
"sso.admin.scim.revoke.title": "Token widerrufen",
|
|
101
|
+
"sso.admin.scim.revoked": "Token widerrufen",
|
|
102
|
+
"sso.admin.scim.tokenActive": "Aktiv",
|
|
103
|
+
"sso.admin.scim.tokenCopied": "Token in die Zwischenablage kopiert",
|
|
104
|
+
"sso.admin.scim.tokenCreated": "Ihr SCIM-Token wurde erstellt. Kopieren Sie es jetzt — es wird nicht erneut angezeigt.",
|
|
105
|
+
"sso.admin.scim.tokenNamePlaceholder": "Token-Name (z.B. Entra ID Produktion)",
|
|
106
|
+
"sso.admin.scim.tokenRevoked": "Widerrufen",
|
|
107
|
+
"sso.admin.scim.tokens": "Bearer-Token",
|
|
108
|
+
"sso.admin.search": "Nach Name oder Aussteller suchen...",
|
|
109
|
+
"sso.admin.section.allowedDomains": "Erlaubte Domains",
|
|
110
|
+
"sso.admin.section.oidcSettings": "OIDC-Einstellungen",
|
|
111
|
+
"sso.admin.status.active": "Aktiv",
|
|
112
|
+
"sso.admin.status.inactive": "Inaktiv",
|
|
113
|
+
"sso.admin.tab.activity": "Aktivität",
|
|
114
|
+
"sso.admin.tab.domains": "Domains",
|
|
115
|
+
"sso.admin.tab.general": "Allgemein",
|
|
116
|
+
"sso.admin.tab.roles": "Rollenzuordnung",
|
|
117
|
+
"sso.admin.tab.scim": "Bereitstellung",
|
|
118
|
+
"sso.admin.test.failed": "Erkennung fehlgeschlagen",
|
|
119
|
+
"sso.admin.test.success": "Erkennung erfolgreich — Aussteller ist erreichbar",
|
|
120
|
+
"sso.admin.title": "Single Sign-On",
|
|
121
|
+
"sso.admin.wizard.credentials.callbackUrl": "Weiterleitungs-URI (in Ihren IdP kopieren)",
|
|
122
|
+
"sso.admin.wizard.credentials.namePlaceholder": "z.B. Zitadel Produktion",
|
|
123
|
+
"sso.admin.wizard.credentials.title": "OIDC-Anmeldedaten",
|
|
124
|
+
"sso.admin.wizard.domain.duplicate": "Domain bereits hinzugefügt",
|
|
125
|
+
"sso.admin.wizard.domain.invalid": "Ungültiges Domain-Format",
|
|
126
|
+
"sso.admin.wizard.domain.limit": "Maximal 20 Domains pro Konfiguration",
|
|
127
|
+
"sso.admin.wizard.domains.description": "Benutzer mit E-Mail-Adressen, die diesen Domains entsprechen, werden zu Ihrem SSO-Anbieter weitergeleitet.",
|
|
128
|
+
"sso.admin.wizard.domains.placeholder": "beispiel.de",
|
|
129
|
+
"sso.admin.wizard.domains.title": "Erlaubte E-Mail-Domains",
|
|
130
|
+
"sso.admin.wizard.options.title": "Optionen",
|
|
131
|
+
"sso.admin.wizard.protocol.oidcDesc": "Funktioniert mit Zitadel, Microsoft Entra ID, Google Workspace, Okta und mehr",
|
|
132
|
+
"sso.admin.wizard.protocol.samlDesc": "Demnächst verfügbar",
|
|
133
|
+
"sso.admin.wizard.protocol.title": "Protokoll auswählen",
|
|
134
|
+
"sso.admin.wizard.review.note": "Die Konfiguration wird als inaktiv erstellt. Sie können sie von der Detailseite aus aktivieren, nachdem Sie alles überprüft haben.",
|
|
135
|
+
"sso.admin.wizard.review.save": "Konfiguration erstellen",
|
|
136
|
+
"sso.admin.wizard.review.testing": "Wird getestet...",
|
|
137
|
+
"sso.admin.wizard.review.title": "Überprüfen und speichern",
|
|
138
|
+
"sso.login.continueWithSso": "Mit SSO fortfahren",
|
|
139
|
+
"sso.login.errors.emailNotVerified": "Ihre E-Mail-Adresse ist vom Identitätsanbieter nicht verifiziert. Bitte verifizieren Sie Ihre E-Mail und versuchen Sie es erneut.",
|
|
140
|
+
"sso.login.errors.failed": "SSO-Anmeldung fehlgeschlagen. Bitte versuchen Sie es erneut.",
|
|
141
|
+
"sso.login.errors.idpError": "Der Identitätsanbieter hat einen Fehler zurückgegeben. Bitte versuchen Sie es erneut oder kontaktieren Sie Ihren Administrator.",
|
|
142
|
+
"sso.login.errors.missingConfig": "SSO ist für dieses Konto nicht konfiguriert.",
|
|
143
|
+
"sso.login.errors.missingParams": "Der SSO-Rückruf war unvollständig. Bitte versuchen Sie es erneut.",
|
|
144
|
+
"sso.login.errors.stateMissing": "Die SSO-Sitzung ist abgelaufen. Bitte versuchen Sie es erneut.",
|
|
145
|
+
"sso.login.ssoEnabled": "SSO ist für dieses Konto aktiviert"
|
|
146
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common.activating": "Activating...",
|
|
3
|
+
"common.add": "Add",
|
|
4
|
+
"common.back": "Back",
|
|
5
|
+
"common.cancel": "Cancel",
|
|
6
|
+
"common.copied": "Copied to clipboard",
|
|
7
|
+
"common.copy": "Copy",
|
|
8
|
+
"common.create": "Create",
|
|
9
|
+
"common.creating": "Creating...",
|
|
10
|
+
"common.delete": "Delete",
|
|
11
|
+
"common.disabled": "Disabled",
|
|
12
|
+
"common.dismiss": "Dismiss",
|
|
13
|
+
"common.edit": "Edit",
|
|
14
|
+
"common.enabled": "Enabled",
|
|
15
|
+
"common.loading": "Loading...",
|
|
16
|
+
"common.next": "Next",
|
|
17
|
+
"common.notFound": "Not found",
|
|
18
|
+
"common.remove": "Remove",
|
|
19
|
+
"common.save": "Save",
|
|
20
|
+
"common.saving": "Saving...",
|
|
21
|
+
"settings.sections.auth": "Auth",
|
|
22
|
+
"sso.admin.action.activate": "Activate",
|
|
23
|
+
"sso.admin.action.deactivate": "Deactivate",
|
|
24
|
+
"sso.admin.action.test": "Verify Discovery",
|
|
25
|
+
"sso.admin.activated": "SSO configuration activated",
|
|
26
|
+
"sso.admin.activity.empty": "No SSO login activity yet. Activity will appear here once users start logging in via SSO.",
|
|
27
|
+
"sso.admin.banner.activateNow": "Activate Now",
|
|
28
|
+
"sso.admin.banner.created": "Your SSO configuration has been created. Would you like to activate it now?",
|
|
29
|
+
"sso.admin.banner.notYet": "Not Yet",
|
|
30
|
+
"sso.admin.column.created": "Created",
|
|
31
|
+
"sso.admin.column.domains": "Domains",
|
|
32
|
+
"sso.admin.column.name": "Name",
|
|
33
|
+
"sso.admin.column.protocol": "Protocol",
|
|
34
|
+
"sso.admin.column.status": "Status",
|
|
35
|
+
"sso.admin.create.title": "Configure SSO",
|
|
36
|
+
"sso.admin.created": "SSO configuration created",
|
|
37
|
+
"sso.admin.deactivated": "SSO configuration deactivated",
|
|
38
|
+
"sso.admin.delete.confirm": "Are you sure? This will remove the SSO configuration. Users with linked SSO identities will need to use password login.",
|
|
39
|
+
"sso.admin.delete.success": "SSO configuration deleted",
|
|
40
|
+
"sso.admin.delete.title": "Delete SSO Configuration",
|
|
41
|
+
"sso.admin.detail.backToList": "Back to SSO",
|
|
42
|
+
"sso.admin.detail.title": "SSO Configuration",
|
|
43
|
+
"sso.admin.domains.empty": "No domains configured. Add at least one domain before activating SSO.",
|
|
44
|
+
"sso.admin.empty.cta": "Configure SSO",
|
|
45
|
+
"sso.admin.empty.description": "Configure Single Sign-On to let your users authenticate with your identity provider.",
|
|
46
|
+
"sso.admin.empty.title": "No SSO configured",
|
|
47
|
+
"sso.admin.error.activationFailed": "Failed to update activation status",
|
|
48
|
+
"sso.admin.error.alreadyExists": "An SSO configuration already exists for this organization",
|
|
49
|
+
"sso.admin.error.createFailed": "Failed to create SSO configuration",
|
|
50
|
+
"sso.admin.error.deleteActive": "Cannot delete an active SSO configuration — deactivate it first",
|
|
51
|
+
"sso.admin.error.deleteFailed": "Failed to delete SSO configuration",
|
|
52
|
+
"sso.admin.error.domainAddFailed": "Failed to add domain",
|
|
53
|
+
"sso.admin.error.domainRemoveFailed": "Failed to remove domain",
|
|
54
|
+
"sso.admin.error.loadFailed": "Failed to load SSO configuration",
|
|
55
|
+
"sso.admin.error.noDomainsForActivation": "Add at least one allowed email domain before activating",
|
|
56
|
+
"sso.admin.error.saveFailed": "Failed to save SSO configuration",
|
|
57
|
+
"sso.admin.error.testFailed": "Connection test failed",
|
|
58
|
+
"sso.admin.field.autoLinkByEmail": "Auto-link by Email",
|
|
59
|
+
"sso.admin.field.autoLinkByEmailDesc": "Automatically link existing users by matching email address",
|
|
60
|
+
"sso.admin.field.changeSecret": "Change",
|
|
61
|
+
"sso.admin.field.clientId": "Client ID",
|
|
62
|
+
"sso.admin.field.clientSecret": "Client Secret",
|
|
63
|
+
"sso.admin.field.issuer": "Issuer URL",
|
|
64
|
+
"sso.admin.field.jitDisabledByScim": "Unavailable — SCIM directory sync is active. Revoke SCIM tokens to enable JIT.",
|
|
65
|
+
"sso.admin.field.jitEnabled": "Just-in-Time Provisioning",
|
|
66
|
+
"sso.admin.field.jitEnabledDesc": "Automatically create user accounts on first SSO login",
|
|
67
|
+
"sso.admin.field.name": "Configuration Name",
|
|
68
|
+
"sso.admin.field.protocol": "Protocol",
|
|
69
|
+
"sso.admin.field.secretPlaceholder": "Enter new secret to replace existing",
|
|
70
|
+
"sso.admin.field.secretRequired": "Enter client secret",
|
|
71
|
+
"sso.admin.field.secretSet": "Client secret is configured",
|
|
72
|
+
"sso.admin.new": "New SSO Config",
|
|
73
|
+
"sso.admin.roles.description": "Map IdP app role names to local roles. On each SSO login, SSO-sourced roles are synced — roles no longer sent by the IdP are removed, while manually-assigned roles are preserved.",
|
|
74
|
+
"sso.admin.roles.empty": "No role mappings configured. IdP role names will be matched directly against local role names.",
|
|
75
|
+
"sso.admin.roles.error.duplicate": "This IdP role is already mapped",
|
|
76
|
+
"sso.admin.roles.error.emptyIdpRole": "IdP role name is required",
|
|
77
|
+
"sso.admin.roles.error.emptyLocalRole": "Select a local role",
|
|
78
|
+
"sso.admin.roles.error.saveFailed": "Failed to save role mappings",
|
|
79
|
+
"sso.admin.roles.idpRole": "IdP Role Name",
|
|
80
|
+
"sso.admin.roles.idpRolePlaceholder": "e.g. OpenMercato.Admin",
|
|
81
|
+
"sso.admin.roles.localRole": "Local Role",
|
|
82
|
+
"sso.admin.roles.saved": "Role mappings saved",
|
|
83
|
+
"sso.admin.saved": "SSO configuration saved",
|
|
84
|
+
"sso.admin.scim.endpointCopied": "SCIM endpoint URL copied",
|
|
85
|
+
"sso.admin.scim.endpointUrl": "SCIM Endpoint URL",
|
|
86
|
+
"sso.admin.scim.error.createFailed": "Failed to create SCIM token",
|
|
87
|
+
"sso.admin.scim.error.revokeFailed": "Failed to revoke token",
|
|
88
|
+
"sso.admin.scim.generateToken": "Generate Token",
|
|
89
|
+
"sso.admin.scim.googleNotSupported": "Google Workspace does not support SCIM provisioning. Users are provisioned via Just-In-Time (JIT) on first login.",
|
|
90
|
+
"sso.admin.scim.jitActiveWarning": "SCIM provisioning is unavailable while JIT provisioning is enabled. Disable JIT in the General tab to configure SCIM.",
|
|
91
|
+
"sso.admin.scim.log.error": "Error",
|
|
92
|
+
"sso.admin.scim.log.operation": "Operation",
|
|
93
|
+
"sso.admin.scim.log.resource": "Resource",
|
|
94
|
+
"sso.admin.scim.log.status": "Status",
|
|
95
|
+
"sso.admin.scim.log.time": "Time",
|
|
96
|
+
"sso.admin.scim.noTokens": "SCIM provisioning is not configured. Generate a bearer token to enable your identity provider to sync users automatically.",
|
|
97
|
+
"sso.admin.scim.recentActivity": "Recent Provisioning Activity",
|
|
98
|
+
"sso.admin.scim.revoke.action": "Revoke",
|
|
99
|
+
"sso.admin.scim.revoke.confirm": "Are you sure? This token will no longer authenticate SCIM requests.",
|
|
100
|
+
"sso.admin.scim.revoke.title": "Revoke Token",
|
|
101
|
+
"sso.admin.scim.revoked": "Token revoked",
|
|
102
|
+
"sso.admin.scim.tokenActive": "Active",
|
|
103
|
+
"sso.admin.scim.tokenCopied": "Token copied to clipboard",
|
|
104
|
+
"sso.admin.scim.tokenCreated": "Your SCIM token has been created. Copy it now — it will not be shown again.",
|
|
105
|
+
"sso.admin.scim.tokenNamePlaceholder": "Token name (e.g., Entra ID Production)",
|
|
106
|
+
"sso.admin.scim.tokenRevoked": "Revoked",
|
|
107
|
+
"sso.admin.scim.tokens": "Bearer Tokens",
|
|
108
|
+
"sso.admin.search": "Search by name or issuer...",
|
|
109
|
+
"sso.admin.section.allowedDomains": "Allowed Domains",
|
|
110
|
+
"sso.admin.section.oidcSettings": "OIDC Settings",
|
|
111
|
+
"sso.admin.status.active": "Active",
|
|
112
|
+
"sso.admin.status.inactive": "Inactive",
|
|
113
|
+
"sso.admin.tab.activity": "Activity",
|
|
114
|
+
"sso.admin.tab.domains": "Domains",
|
|
115
|
+
"sso.admin.tab.general": "General",
|
|
116
|
+
"sso.admin.tab.roles": "Role Mappings",
|
|
117
|
+
"sso.admin.tab.scim": "Provisioning",
|
|
118
|
+
"sso.admin.test.failed": "Discovery failed",
|
|
119
|
+
"sso.admin.test.success": "Discovery successful — issuer is reachable",
|
|
120
|
+
"sso.admin.title": "Single Sign-On",
|
|
121
|
+
"sso.admin.wizard.credentials.callbackUrl": "Redirect URI (copy to your IdP)",
|
|
122
|
+
"sso.admin.wizard.credentials.namePlaceholder": "e.g., Zitadel Production",
|
|
123
|
+
"sso.admin.wizard.credentials.title": "OIDC Credentials",
|
|
124
|
+
"sso.admin.wizard.domain.duplicate": "Domain already added",
|
|
125
|
+
"sso.admin.wizard.domain.invalid": "Invalid domain format",
|
|
126
|
+
"sso.admin.wizard.domain.limit": "Maximum 20 domains per configuration",
|
|
127
|
+
"sso.admin.wizard.domains.description": "Users with email addresses matching these domains will be redirected to your SSO provider.",
|
|
128
|
+
"sso.admin.wizard.domains.placeholder": "example.com",
|
|
129
|
+
"sso.admin.wizard.domains.title": "Allowed Email Domains",
|
|
130
|
+
"sso.admin.wizard.options.title": "Options",
|
|
131
|
+
"sso.admin.wizard.protocol.oidcDesc": "Works with Zitadel, Microsoft Entra ID, Google Workspace, Okta, and more",
|
|
132
|
+
"sso.admin.wizard.protocol.samlDesc": "Coming soon",
|
|
133
|
+
"sso.admin.wizard.protocol.title": "Select Protocol",
|
|
134
|
+
"sso.admin.wizard.review.note": "The configuration will be created as inactive. You can activate it from the detail page after verifying everything is correct.",
|
|
135
|
+
"sso.admin.wizard.review.save": "Create Configuration",
|
|
136
|
+
"sso.admin.wizard.review.testing": "Testing...",
|
|
137
|
+
"sso.admin.wizard.review.title": "Review & Save",
|
|
138
|
+
"sso.login.continueWithSso": "Continue with SSO",
|
|
139
|
+
"sso.login.errors.emailNotVerified": "Your email address is not verified by the identity provider. Please verify your email and try again.",
|
|
140
|
+
"sso.login.errors.failed": "SSO login failed. Please try again.",
|
|
141
|
+
"sso.login.errors.idpError": "The identity provider returned an error. Please try again or contact your administrator.",
|
|
142
|
+
"sso.login.errors.missingConfig": "SSO is not configured for this account.",
|
|
143
|
+
"sso.login.errors.missingParams": "SSO callback was incomplete. Please try again.",
|
|
144
|
+
"sso.login.errors.stateMissing": "SSO session expired. Please try again.",
|
|
145
|
+
"sso.login.ssoEnabled": "SSO is enabled for this account"
|
|
146
|
+
}
|