From 2baacfcd8f38848685050e1ea7e46a726368f107 Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Sat, 11 Jan 2025 02:07:04 +0800 Subject: [PATCH] misc: add support for array values --- .../services/identity-oidc-auth/identity-oidc-auth-fns.ts | 8 ++++++++ .../identity-oidc-auth/identity-oidc-auth-service.ts | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/backend/src/services/identity-oidc-auth/identity-oidc-auth-fns.ts b/backend/src/services/identity-oidc-auth/identity-oidc-auth-fns.ts index c6d65d836..7d386afcb 100644 --- a/backend/src/services/identity-oidc-auth/identity-oidc-auth-fns.ts +++ b/backend/src/services/identity-oidc-auth/identity-oidc-auth-fns.ts @@ -2,3 +2,11 @@ import picomatch from "picomatch"; export const doesFieldValueMatchOidcPolicy = (fieldValue: string, policyValue: string) => policyValue === fieldValue || picomatch.isMatch(fieldValue, policyValue); + +export const doesAudValueMatchOidcPolicy = (fieldValue: string | string[], policyValue: string) => { + if (Array.isArray(fieldValue)) { + return fieldValue.some((entry) => entry === policyValue || picomatch.isMatch(entry, policyValue)); + } + + return policyValue === fieldValue || picomatch.isMatch(fieldValue, policyValue); +}; diff --git a/backend/src/services/identity-oidc-auth/identity-oidc-auth-service.ts b/backend/src/services/identity-oidc-auth/identity-oidc-auth-service.ts index 7949e9466..dc3b1baa3 100644 --- a/backend/src/services/identity-oidc-auth/identity-oidc-auth-service.ts +++ b/backend/src/services/identity-oidc-auth/identity-oidc-auth-service.ts @@ -27,7 +27,7 @@ import { TIdentityAccessTokenDALFactory } from "../identity-access-token/identit import { TIdentityAccessTokenJwtPayload } from "../identity-access-token/identity-access-token-types"; import { TOrgBotDALFactory } from "../org/org-bot-dal"; import { TIdentityOidcAuthDALFactory } from "./identity-oidc-auth-dal"; -import { doesFieldValueMatchOidcPolicy } from "./identity-oidc-auth-fns"; +import { doesAudValueMatchOidcPolicy, doesFieldValueMatchOidcPolicy } from "./identity-oidc-auth-fns"; import { TAttachOidcAuthDTO, TGetOidcAuthDTO, @@ -148,7 +148,7 @@ export const identityOidcAuthServiceFactory = ({ if ( !identityOidcAuth.boundAudiences .split(", ") - .some((policyValue) => doesFieldValueMatchOidcPolicy(tokenData.aud, policyValue)) + .some((policyValue) => doesAudValueMatchOidcPolicy(tokenData.aud, policyValue)) ) { throw new UnauthorizedError({ message: "Access denied: OIDC audience not allowed."