feat: handle Zitadel provider IdP login via login v1 (#12469)

# Which Problems Are Solved

This PR adds support for using a ZITADEL IdP provider in the login v1 UI
flow and conditionally grants a support-user instance membership based
on a ZITADEL-specific project-roles token claim.

# How the Problems Are Solved

- Introduced ZITADEL IdP handling in the login v1 handler, including
extracting the `urn:zitadel:iam:org:project:roles` claim and granting
`IAM_OWNER_VIEWER` instance membership when configured orgs match.
- Added a new `AddInstanceMemberFromLogin` to assign an instance
membership during the login v1 ZITADEL-IdP flow without permission
checks (as the authorization is established based on the project roles
in the token claim)
- Added unit tests

# Additional Changes

N/A

# Additional Context
- Closes https://github.com/zitadel/zitadel/issues/12446
This commit is contained in:
gayathri
2026-07-28 15:20:46 +02:00
committed by GitHub
parent 318acd4bc3
commit ffd9b39bdb
14 changed files with 908 additions and 492 deletions
+5
View File
@@ -104,6 +104,11 @@ type ExternalUser struct {
Phone PhoneNumber
IsPhoneVerified bool
Metadatas []*Metadata
// ProjectRoles holds the ZITADEL `urn:zitadel:iam:org:project:roles` claim
// ({role: {orgID: orgDomain}}) as returned by a ZITADEL provider. It is
// captured at authentication and carried through to user creation, where it
// is used to grant the support-user instance membership.
ProjectRoles map[string]map[string]string
}
type Prompt int32