diff --git a/internal/api/authz/permissions_test.go b/internal/api/authz/permissions_test.go index a7f636080..be25ac77c 100644 --- a/internal/api/authz/permissions_test.go +++ b/internal/api/authz/permissions_test.go @@ -15,8 +15,8 @@ type testVerifier struct { memberships []*Membership } -func (v *testVerifier) VerifyAccessToken(ctx context.Context, token, clientID string) (string, string, string, string, error) { - return "userID", "agentID", "de", "orgID", nil +func (v *testVerifier) VerifyAccessToken(ctx context.Context, token, clientID string) (string, string, string, string, string, error) { + return "userID", "agentID", "clientID", "de", "orgID", nil } func (v *testVerifier) SearchMyMemberships(ctx context.Context) ([]*Membership, error) { return v.memberships, nil diff --git a/internal/api/authz/token.go b/internal/api/authz/token.go index bca8f5db4..58a7fd046 100644 --- a/internal/api/authz/token.go +++ b/internal/api/authz/token.go @@ -20,7 +20,7 @@ type TokenVerifier struct { } type authZRepo interface { - VerifyAccessToken(ctx context.Context, token, clientID string) (userID, agentID, prefLang, resourceOwner string, err error) + VerifyAccessToken(ctx context.Context, token, verifierClientID string) (userID, agentID, clientID, prefLang, resourceOwner string, err error) VerifierClientID(ctx context.Context, name string) (clientID string, err error) SearchMyMemberships(ctx context.Context) ([]*Membership, error) ProjectIDAndOriginsByClientID(ctx context.Context, clientID string) (projectID string, origins []string, err error) @@ -33,11 +33,11 @@ func Start(authZRepo authZRepo) (v *TokenVerifier) { } func (v *TokenVerifier) VerifyAccessToken(ctx context.Context, token string, method string) (userID, clientID, agentID, prefLang, resourceOwner string, err error) { - clientID, err = v.clientIDFromMethod(ctx, method) + verifierClientID, err := v.clientIDFromMethod(ctx, method) if err != nil { return "", "", "", "", "", err } - userID, agentID, prefLang, resourceOwner, err = v.authZRepo.VerifyAccessToken(ctx, token, clientID) + userID, agentID, clientID, prefLang, resourceOwner, err = v.authZRepo.VerifyAccessToken(ctx, token, verifierClientID) return userID, clientID, agentID, prefLang, resourceOwner, err } diff --git a/internal/api/grpc/server/middleware/auth_interceptor_test.go b/internal/api/grpc/server/middleware/auth_interceptor_test.go index 5012771aa..234b48048 100644 --- a/internal/api/grpc/server/middleware/auth_interceptor_test.go +++ b/internal/api/grpc/server/middleware/auth_interceptor_test.go @@ -21,8 +21,8 @@ var ( type verifierMock struct{} -func (v *verifierMock) VerifyAccessToken(ctx context.Context, token, clientID string) (string, string, string, string, error) { - return "", "", "", "", nil +func (v *verifierMock) VerifyAccessToken(ctx context.Context, token, clientID string) (string, string, string, string, string, error) { + return "", "", "", "", "", nil } func (v *verifierMock) SearchMyMemberships(ctx context.Context) ([]*authz.Membership, error) { return nil, nil diff --git a/internal/authz/repository/eventsourcing/eventstore/token_verifier.go b/internal/authz/repository/eventsourcing/eventstore/token_verifier.go index 29b8f5bed..569edce58 100644 --- a/internal/authz/repository/eventsourcing/eventstore/token_verifier.go +++ b/internal/authz/repository/eventsourcing/eventstore/token_verifier.go @@ -65,40 +65,40 @@ func (repo *TokenVerifierRepo) TokenByID(ctx context.Context, tokenID, userID st return model.TokenViewToModel(token), nil } -func (repo *TokenVerifierRepo) VerifyAccessToken(ctx context.Context, tokenString, clientID string) (userID string, agentID string, prefLang, resourceOwner string, err error) { +func (repo *TokenVerifierRepo) VerifyAccessToken(ctx context.Context, tokenString, verifierClientID string) (userID string, agentID string, clientID, prefLang, resourceOwner string, err error) { ctx, span := tracing.NewSpan(ctx) defer func() { span.EndWithError(err) }() tokenData, err := base64.RawURLEncoding.DecodeString(tokenString) if err != nil { - return "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-ASdgg", "invalid token") + return "", "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-ASdgg", "invalid token") } tokenIDSubject, err := repo.TokenVerificationKey.DecryptString(tokenData, repo.TokenVerificationKey.EncryptionKeyID()) if err != nil { - return "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-8EF0zZ", "invalid token") + return "", "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-8EF0zZ", "invalid token") } splittedToken := strings.Split(tokenIDSubject, ":") if len(splittedToken) != 2 { - return "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-GDg3a", "invalid token") + return "", "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-GDg3a", "invalid token") } token, err := repo.TokenByID(ctx, splittedToken[0], splittedToken[1]) if err != nil { - return "", "", "", "", caos_errs.ThrowUnauthenticated(err, "APP-BxUSiL", "invalid token") + return "", "", "", "", "", caos_errs.ThrowUnauthenticated(err, "APP-BxUSiL", "invalid token") } if !token.Expiration.After(time.Now().UTC()) { - return "", "", "", "", caos_errs.ThrowUnauthenticated(err, "APP-k9KS0", "invalid token") + return "", "", "", "", "", caos_errs.ThrowUnauthenticated(err, "APP-k9KS0", "invalid token") } - projectID, _, err := repo.ProjectIDAndOriginsByClientID(ctx, clientID) + projectID, _, err := repo.ProjectIDAndOriginsByClientID(ctx, verifierClientID) if err != nil { - return "", "", "", "", caos_errs.ThrowUnauthenticated(err, "APP-5M9so", "invalid token") + return "", "", "", "", "", caos_errs.ThrowUnauthenticated(err, "APP-5M9so", "invalid token") } for _, aud := range token.Audience { - if clientID == aud || projectID == aud { - return token.UserID, token.UserAgentID, token.PreferredLanguage, token.ResourceOwner, nil + if verifierClientID == aud || projectID == aud { + return token.UserID, token.UserAgentID, token.ApplicationID, token.PreferredLanguage, token.ResourceOwner, nil } } - return "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-Zxfako", "invalid audience") + return "", "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-Zxfako", "invalid audience") } func (repo *TokenVerifierRepo) ProjectIDAndOriginsByClientID(ctx context.Context, clientID string) (projectID string, origins []string, err error) { diff --git a/internal/command/main_test.go b/internal/command/main_test.go index 72905b2b4..cfc37ef8c 100644 --- a/internal/command/main_test.go +++ b/internal/command/main_test.go @@ -189,8 +189,8 @@ type testVerifier struct { features []string } -func (v *testVerifier) VerifyAccessToken(ctx context.Context, token, clientID string) (string, string, string, string, error) { - return "userID", "agentID", "de", "orgID", nil +func (v *testVerifier) VerifyAccessToken(ctx context.Context, token, clientID string) (string, string, string, string, string, error) { + return "userID", "agentID", "clientID", "de", "orgID", nil } func (v *testVerifier) SearchMyMemberships(ctx context.Context) ([]*authz.Membership, error) { return nil, nil