2.3. API 인증
OpenShift Dedicated API에 대한 요청은 다음 방법을 사용하여 인증됩니다.
- OAuth 액세스 토큰
-
<namespace_route> /oauth/
authorize 및 <namespace_route> /
끝점을 사용하여 OpenShift Dedicated OAuth 서버에서 가져옵니다.oauth
/token -
Authorization: Bearer…
헤더로 전송됩니다. -
WebSocket 요청의 경우
base64url.bearer.authorization.k8s.io.<base64url-encoded-token>
형식의 WebSocket 하위 프로토콜 헤더로 전송됩니다.
-
<namespace_route> /oauth/
- X.509 클라이언트 인증서
- API 서버에 대한 HTTPS 연결이 필요합니다.
- 신뢰할 수 있는 인증 기관 번들과 대조하여 API 서버에서 확인합니다.
- API 서버는 인증서를 작성하고 컨트롤러에 분배하여 자체적으로 인증합니다.
유효하지 않은 액세스 토큰 또는 유효하지 않은 인증서가 있는 요청은 401
오류와 함께 인증 계층에서 거부됩니다.
액세스 토큰이나 인증서가 없는 경우 인증 계층은 system:anonymous
가상 사용자 및 system:unauthenticated
가상 그룹을 요청에 할당합니다. 그러면 권한 부여 계층에서 익명 사용자가 할 수 있는 요청(있는 경우)을 결정합니다.
2.3.1. OpenShift Dedicated OAuth 서버
OpenShift Dedicated 마스터에는 내장 OAuth 서버가 포함되어 있습니다. 사용자는 API 인증을 위해 OAuth 액세스 토큰을 가져옵니다.
사용자가 새 OAuth 토큰을 요청하면 OAuth 서버는 구성된 ID 공급자를 사용하여 요청한 사람의 ID를 확인합니다.
그런 다음 해당 ID와 매핑되는 사용자를 결정하고 그 사용자를 위한 액세스 토큰을 만들어 제공합니다.
2.3.1.1. OAuth 토큰 요청
OAuth 토큰을 요청할 때마다 토큰을 받고 사용할 OAuth 클라이언트를 지정해야 합니다. 다음 OAuth 클라이언트는 OpenShift Dedicated API를 시작할 때 자동으로 생성됩니다.
OAuth 클라이언트 | 사용법 |
---|---|
|
대화형 로그인을 처리할 수 있는 사용자 에이전트를 사용하여 |
|
|
<namespace_route>
는 네임스페이스 경로를 나타냅니다. 다음 명령을 실행하여 확인할 수 있습니다.$ oc get route oauth-openshift -n openshift-authentication -o json | jq .spec.host
OAuth 토큰에 대한 모든 요청에는 <namespace_route>/oauth/authorize
에 대한 요청이 포함됩니다. 대부분의 인증 통합에서는 이 끝점 앞에 인증 프록시를 배치하거나 백업 ID 공급자에 대한 인증 정보를 검증하도록 OpenShift Dedicated를 구성합니다. <namespace_route>/oauth/authorize
에 대한 요청은 CLI와 같은 대화형 로그인 페이지를 표시할 수 없는 사용자 에이전트에서 발생할 수 있습니다. 따라서 OpenShift Dedicated에서는 대화형 로그인 흐름 외에도 WWW-Authenticate
챌린지를 사용한 인증을 지원합니다.
인증 프록시를 <namespace_route>/oauth/authorize
끝점 앞에 배치하면 대화형 로그인 페이지를 표시하거나 대화형 로그인 flows로 리디렉션하는 대신 인증되지 않은 브라우저 이외의 사용자 에이전트 WWW-Authenticate
챌린지를 보냅니다.
브라우저 클라이언트에 대한 CSRF(Cross-Site Request Forgery) 공격을 방지하려면 X-CSRF-Token
헤더가 요청에 있는 경우에만 기본 인증 챌린지를 보냅니다. 기본 WWW-Authenticate
챌린지를 받을 것으로 예상되는 클라이언트는 이 헤더를 비어 있지 않은 값으로 설정해야 합니다.
인증 프록시가 WWW-Authenticate
챌린지를 지원할 수 없거나 OpenShift Dedicated가 WWW-Authenticate 챌린지를 지원하지 않는 ID 공급자를 사용하도록 구성된 경우 브라우저를 사용하여 < namespace_route>/oauth/token/request
에서 수동으로 토큰을 가져와야 합니다.