OpenShift 인증 제공자
Backstage core-plugin-api 패키지에는 OpenShift OAuth로 사용자를 인증할 수 있는 OpenShift 인증 제공자가 포함돼 있어요.
출처: 문서
본문
Backstage core-plugin-api 패키지에는 OpenShift OAuth로 사용자를 인증할 수 있는 OpenShift 인증 제공자가 포함돼 있어요.
사용 사례
이 설정은 Kubernetes 플러그인이 Kubernetes Client Side Provider를 통한 OAuth 2.0 On-Behalf-Of 흐름을 활용해 사용자의 권한으로 OpenShift 클러스터에 접근할 수 있게 해요.
이를 작동시키려면 해당 User 엔터티가 Backstage 카탈로그에 존재해야 하고, 그 이름이 OpenShift 사용자와 일치해야 해요.
OpenShift 인증 제공자는 OIDC를 네이티브로 지원하지 않지만, KubernetesAuthProviders 구성에서 OIDC 제공자로 취급하여 Kubernetes 통합과 함께 사용하도록 구성할 수 있어요.
packages/app/src/apis.ts
import { KubernetesAuthProviders, kubernetesAuthProvidersApiRef,} from '@backstage/plugin-kubernetes';import { googleAuthApiRef, microsoftAuthApiRef, openshiftAuthApiRef,} from '@backstage/core-plugin-api';export const apis: AnyApiFactory[] = [ // ... createApiFactory({ api: kubernetesAuthProvidersApiRef, deps: { microsoftAuthApi: microsoftAuthApiRef, googleAuthApi: googleAuthApiRef, openshiftAuthApi: openshiftAuthApiRef, }, factory({ microsoftAuthApi, googleAuthApi, openshiftAuthApi }) { return new KubernetesAuthProviders({ microsoftAuthApi, googleAuthApi, oidcProviders: { openshift: { async getIdToken(_) { return await openshiftAuthApi.getAccessToken('user:full'); }, }, }, }); }, }), //...];
참고
OpenShift auth API는 OpenIdConnectApi 인터페이스를 구현하지 않습니다. 즉, ID 토큰을 반환하지 않습니다. 대신 Kubernetes 통합이 ID 토큰 대신 사용하는 액세스 토큰을 반환합니다. 이것이 표준 OIDC 기반 인증 흐름과의 유일한 기능적 차이입니다.
OpenShift에서 OAuth 클라이언트 만들기
OpenShift 클러스터에 OAuth 클라이언트가 존재하는지 확인하세요.
OpenShift 통합을 구성하려면 OAuthClient를 만들어야 해요.
리다이렉트 URI는 https://<fqdn>/api/auth/openshift/handler/frame 형식이어야 해요.
구성
그런 다음 제공자 구성을 루트 auth 구성 아래의 app-config.yaml에 추가할 수 있어요:
auth: environment: development providers: openshift: development: clientId: ${AUTH_OPENSHIFT_CLIENT_ID} clientSecret: ${AUTH_OPENSHIFT_CLIENT_SECRET} authorizationUrl: ${AUTH_OPENSHIFT_AUTHORIZATION_URL} tokenUrl: ${AUTH_OPENSHIFT_TOKEN_URL} openshiftApiServerUrl: ${OPENSHIFT_API_SERVER_URL} ## uncomment to set lifespan of user session # sessionDuration: { hours: 24 } # supports `ms` library format (e.g. '24h', '2 days'), ISO duration, "human duration" as used in code # sessionDuration: 1d signIn: resolvers: - resolver: displayNameMatchingUserEntityName
OpenShift 제공자는 다음 구성 키를 가진 구조예요:
-
clientId: OpenShift OAuth 클라이언트의 클라이언트 ID, 예:my-backstage -
clientSecret: OpenShift OAuth 클라이언트에 묶인 클라이언트 시크릿. -
authorizationUrl: OpenShift OAuth 클라이언트 인증 엔드포인트, 형식:https://<oauth-client-route>/oauth/authorize. -
tokenUrl: OpenShift OAuth 클라이언트 토큰 엔드포인트, 형식:https://<oauth-client-route>/oauth/token. -
openshiftApiServerUrl: OpenShift API 서버 엔드포인트, 형식:https://<openshift-api>. -
sessionDuration: (선택): 사용자 세션의 수명. -
signIn: 인증 제공자의 사용자를 Backstage 카탈로그의 사용자 엔터티와 매칭하는 데 사용해야 하는 resolver를 포함한 sign-in 프로세스 구성 (일반적으로 단일 resolver면 충분해요).
제공자는 user:full 스코프를 사용해야 해요.
백엔드 설치
제공자를 백엔드에 추가하려면 먼저 다음 명령을 실행해 패키지를 설치해야 해요:
from your Backstage root directory
yarn --cwd packages/backend add @backstage/plugin-auth-backend-module-openshift-provider
그런 다음 이 줄을 추가해야 해요:
in packages/backend/src/index.ts
backend.add(import('@backstage/plugin-auth-backend'));backend.add(import('@backstage/plugin-auth-backend-module-openshift-provider'));