Copilot 확장에 대한 OIDC(OpenID Connect) 정보
OIDC(OpenID Connect)를 사용하면 Copilot 확장에서 장기 GitHub 자격 증명을 저장하는 대신 클라우드 공급자로부터 직접 단기 토큰을 교환할 수 있습니다. 이 기능을 사용하면 Copilot 에이전트와 기술 세트를 모두 사용하여 사용자를 보다 안전하게 인증하고 클라우드 리소스에 액세스할 수 있습니다.
OIDC 개요
Copilot 확장는 사용자를 대신하여 타사 리소스 또는 API에 액세스해야 하는 경우가 많습니다. 기존에는 GitHub 토큰을 비밀로 저장하고 이러한 토큰을 시스템의 사용자 ID에 매핑하기 위해 추가 API 호출을 수행해야 했습니다. OIDC를 사용하면 확장에서 GitHub ID 정보를 교환하여 인증 서비스에서 직접 단기 액세스 토큰을 요청할 수 있습니다.
이 기능을 사용하도록 설정하면 GitHub의 OIDC 공급자가 사용자와 요청 컨텍스트에 대한 클레임을 포함하는 토큰을 자동으로 생성합니다. 인증 서비스는 이러한 클레임의 유효성을 검사하고 서비스에 대해 특별히 범위가 지정된 액세스 토큰으로 교환할 수 있습니다.
OIDC를 사용하면 별도의 GitHub특정 엔드포인트를 유지하지 않고도 기존 API 엔드포인트를 활용할 수 있으므로 Copilot 기술 세트 개발에 특히 유용합니다. 엔드포인트를 복제하여 GitHub 토큰을 수락하는 대신 OIDC를 사용하여 GitHub ID를 서비스의 네이티브 인증 토큰으로 변환할 수 있습니다.
OIDC 사용의 장점
Copilot 확장에서 OIDC 토큰 교환을 구현하면 다음을 수행할 수 있습니다.
- 장기 GitHub 토큰을 저장하지 말고 GitHub와 서비스 ID 간의 매핑을 유지하세요.
- 자동으로 만료되고 서비스의 요구 사항에 맞게 범위를 구체적으로 지정할 수 있는 단기 토큰을 사용하세요.
- 토큰을 검증하고 사용자 정보를 가져오기 위해 GitHub의 API에 추가 호출을 하지 않도록 합니다.
- GitHub에 대한 별도의 엔드포인트를 유지하지 않고도 Copilot 기술을 기존 API와 직접 통합할 수 있습니다.
- GitHub 인증을 서비스의 네이티브 토큰으로 변환하여 기존 API 엔드포인트를 다시 사용합니다.
토큰 교환 흐름 정보
다음은 Copilot 확장성 플랫폼가 액세스 토큰에 대한 OIDC 토큰을 교환하여 확장에 대한 요청을 인증하는 방법을 간략하게 설명합니다.
초기 요청
- 사용자가 Copilot 확장에 메시지를 보냅니다.
- GitHub는 사용자 ID 정보를 포함하는 OIDC 토큰을 생성합니다.
- GitHub는 OIDC 토큰을 사용하여 토큰 교환 엔드포인트를 호출합니다.
- 서비스에서 토큰의 유효성을 검사하고 액세스 토큰을 반환합니다.
- GitHub는 확장 요청에 액세스 토큰을 포함합니다.
# HTTP header
Authorization: Bearer <your-service-token>
X-GitHub-Token: <github-token>
후속 요청
- GitHub는 액세스 토큰을 최대 10분 동안 캐시합니다.
- 캐시된 토큰은 후속 요청에 다시 사용됩니다.
- 토큰이 만료되거나 유효하지 않으면 GitHub에서 새 토큰을 요청합니다.
OIDC 토큰 이해
GitHub의 OIDC 토큰은 사용자 및 요청 컨텍스트에 대한 클레임을 포함하는 JWT입니다.
{
"jti": "<unique-token-id>",
"sub": "<github-user-id>",
"aud": "<your-client-id>",
"iss": "https://github.com/login/oauth",
"nbf": 1632492967,
"exp": 1632493867,
"iat": 1632493567,
"act": {
"sub": "api.copilotchat.com"
}
}
모범 사례
- 토큰을 필요한 최소 사용 권한으로 범위 지정합니다.
- 적절한 오류 처리 및 로깅을 구현합니다.
- 보안 이상에 대한 토큰 교환 패턴을 모니터링합니다.
- 보안 위험을 최소화하기 위해 토큰을 수명이 짧은 상태로 유지합니다.
- 액세스 토큰을 발급하기 전에 모든 클레임의 유효성을 검사합니다.
- 토큰 교환 엔드포인트에서 속도 제한을 구현하는 것이 좋습니다.
- 모든 토큰 교환 커뮤니케이션에 HTTPS를 사용합니다.