인증

인증 (Authentication)

OAuth 2.0의 Authorization Code grant 유형을 사용해 확장에서 사용자 인증을 설정하는 방법을 설명하는 문서예요.

출처: 문서

본문

참고: 이 페이지는 Google, Entra ID(이전 Azure AD), Okta 같은 Identity Provider(IdP)를 이미 보유하고 있으며, 이 IdP가 인증 과정을 처리하고 액세스 토큰을 반환한다고 가정해요.

OAuth 2.0을 통해 웹 브라우저로 사용자가 확장에서 인증하고 확장으로 돌아오도록 하는 방법을 알아봐요.

OAuth 2.0에서 "grant type"이라는 용어는 애플리케이션이 액세스 토큰을 얻는 방식을 말해요. OAuth 2.0은 여러 grant type을 정의하지만, 이 페이지는 Authorization Code grant type을 사용해 확장에서 사용자를 인증하는 방법만 설명해요.

Authorization Code grant 흐름 (Authorization code grant flow)

Authorization Code grant type은 기밀(client) 및 공개 클라이언트가 authorization code를 액세스 토큰으로 교환하는 데 사용돼요.

사용자가 redirect URL을 통해 클라이언트로 돌아온 후, 애플리케이션은 URL에서 authorization code를 얻고 이를 사용해 액세스 토큰을 요청해요.

위 그림은 다음을 보여줘요:

  1. Docker 확장이 사용자에게 자신의 데이터에 대한 접근을 인가하도록 요청해요.
  2. 사용자가 접근을 허용하면, 확장은 사용자의 접근 허가와 클라이언트를 식별하는 인증 세부 정보를 전달하며 서비스 제공자에게 액세스 토큰을 요청해요.
  3. 서비스 제공자는 이 세부 정보를 검증하고 액세스 토큰을 반환해요.
  4. 확장은 액세스 토큰을 사용해 서비스 제공자에게 사용자 데이터를 요청해요.

OAuth 2.0 용어 (OAuth 2.0 terminology)

  • Auth URL: auth code를 검색하기 위한 API 공급자 인증 서버의 엔드포인트.
  • Redirect URI: 인증 후 리디렉션할 클라이언트 애플리케이션 콜백 URL. API 공급자에 등록되어야 해요.

사용자가 사용자 이름과 비밀번호를 입력하면 성공적으로 인증돼요.

사용자 인증을 위한 브라우저 페이지 열기 (Open a browser page to authenticate the user)

확장 UI에서 버튼을 제공해, 선택하면 브라우저에서 새 창을 열어 사용자를 인증할 수 있어요.

ddClient.host.openExternal API를 사용해 브라우저를 auth URL로 열어요. 예를 들어:

window.ddClient.openExternal("https://authorization-server.com/authorize?
response_type=code
&client_id=T70hJ3ls5VTYG8ylX3CZsfIu
&redirect_uri=${REDIRECT_URI});

authorization code 및 액세스 토큰 얻기 (Get the authorization code and access token)

사용 중인 OAuth 앱에서 docker-desktop://dashboard/extension-tab?extensionId=awesome/my-extension을 redirect_uri로 나열하고 authorization code를 쿼리 파라미터로 연결하면 확장 UI에서 authorization code를 얻을 수 있어요. 그러면 확장 UI 코드가 해당 code 쿼리 파라미터를 읽을 수 있어요.

중요: 이 기능을 사용하려면 Docker Desktop에 확장 SDK 0.3.3이 필요해요. 이미지 라벨의 com.docker.desktop.extension.api.version으로 설정한 확장의 요구 SDK 버전이 0.3.3보다 높은지 확인해야 해요.

Authorization (인가)

이 단계는 사용자가 브라우저에 자신의 자격 증명을 입력하는 곳이에요. 인가가 완료된 후 사용자는 확장 사용자 인터페이스로 리디렉션되고, 확장 UI 코드는 URL의 쿼리 파라미터의 일부인 authorization code를 소비할 수 있어요.

Authorization Code 교환 (Exchange the Authorization Code)

다음으로 authorization code를 액세스 토큰으로 교환해요.

확장은 다음 파라미터로 OAuth 인증 서버에 POST 요청을 보내야 해요:

POST https://authorization-server.com/token
&client_id=T70hJ3ls5VTYG8ylX3CZsfIu
&client_secret=YABbyHQShPeO1T3NDQZP8q5m3Jpb_UPNmIzqhLDCScSnRyVG
&redirect_uri=${REDIRECT_URI}
&code=N949tDLuf9ai_DaOKyuFBXStCNMQzuQbtC1QbvLv-AXqPJ_f

참고: 이 예시에서는 클라이언트의 자격 증명이 POST 쿼리 파라미터에 포함되어 있어요. OAuth 인증 서버는 자격 증명이 HTTP Basic Authentication 헤더로 전송되도록 요구하거나 다른 형식을 지원할 수도 있어요. 자세한 내용은 OAuth 제공자 문서를 참조하세요.

액세스 토큰 저장하기 (Store the access token)

Docker Extensions SDK는 비밀을 저장하는 특정 메커니즘을 제공하지 않아요.

액세스 토큰을 저장하려면 외부 저장소를 사용하는 것이 강력히 권장돼요.

참고: 사용자 인터페이스 Local Storage는 확장 간에 격리되어 있어요(확장은 다른 확장의 로컬 저장소에 접근할 수 없음). 또한 사용자가 확장을 제거하면 각 확장의 로컬 저장소는 삭제돼요.

다음은 무엇인가요?

확장 게시 및 배포 방법을 알아보세요.

더 알아보기 (Learn more)