fix(token exchange): properly return an error if membership is missing (#9468)

# Which Problems Are Solved

When requesting a JWT (`urn:ietf:params:oauth:token-type:jwt`) to be
returned in a Token Exchange request, ZITADEL would panic if the `actor`
was not granted the necessary permission.

# How the Problems Are Solved

Properly check the error and return it.

# Additional Changes

None

# Additional Context

- closes #9436
This commit is contained in:
Livio Spring 2025-03-11 12:14:18 +01:00 committed by GitHub
parent bae45ee159
commit e6ce1af003
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 0 deletions

View File

@ -428,6 +428,17 @@ func TestServer_TokenExchangeImpersonation(t *testing.T) {
}, },
wantErr: true, wantErr: true,
}, },
{
name: "IMPERSONATION: subject: userID, actor: access token, requested type: JWT, membership not found error",
args: args{
SubjectToken: userResp.GetUserId(),
SubjectTokenType: oidc_api.UserIDTokenType,
RequestedTokenType: oidc.JWTTokenType,
ActorToken: noPermPAT,
ActorTokenType: oidc.AccessTokenType,
},
wantErr: true,
},
{ {
name: "IAM IMPERSONATION: subject: userID, actor: access token, success", name: "IAM IMPERSONATION: subject: userID, actor: access token, success",
args: args{ args: args{

View File

@ -349,6 +349,9 @@ func (s *Server) createExchangeJWT(
"", "",
domain.OIDCResponseTypeUnspecified, domain.OIDCResponseTypeUnspecified,
) )
if err != nil {
return "", "", 0, err
}
accessToken, err = s.createJWT(ctx, client, session, getUserInfo, roleAssertion, getSigner) accessToken, err = s.createJWT(ctx, client, session, getUserInfo, roleAssertion, getSigner)
if err != nil { if err != nil {
return "", "", 0, err return "", "", 0, err