Acerca de OpenID Connect (OIDC) para Extensiones de Copilot
OpenID Connect (OIDC) permite que Extensiones de Copilot intercambie tokens de corta duración directamente desde su proveedor de nube en lugar de almacenar las credenciales de GitHub. Esta característica permite a los agentes y conjuntos de aptitudes de Copilot autenticar de forma más segura a los usuarios y acceder a los recursos en la nube.
Introducción a OIDC
Extensiones de Copilot suelen necesitar acceder a recursos o API de terceros en nombre de los usuarios. Tradicionalmente, esto requería almacenar tokens de GitHub como secretos y realizar llamadas API adicionales para asignar estos tokens a identidades de usuario en el sistema. Con OIDC, la extensión puede solicitar tokens de acceso de corta duración directamente desde el servicio de autenticación intercambiando la información de identidad de GitHub.
Cuando se habilita, el proveedor OIDC de GitHub genera automáticamente un token que contiene notificaciones sobre el usuario y el contexto de solicitud. El servicio de autenticación puede validar estas notificaciones e intercambiarlas por un token de acceso con ámbito específico para el servicio.
El uso de OIDC es especialmente útil para el desarrollo de conjuntos de aptitudes de Copilot porque permite aprovechar los puntos de conexión de API existentes sin mantener puntos de conexión independientes específicos de GitHub. En lugar de duplicar los puntos de conexión para aceptar tokens de GitHub, puedes usar OIDC para traducir las identidades de GitHub en los tokens de autenticación nativos del servicio.
Beneficios de utilizar OIDC
Al implementar el intercambio de tokens de OIDC en Extensión de Copilot, puedes hacer lo siguiente:
- Evita almacenar tokens de larga duración de GitHub o mantener una asignación entre GitHub y las identidades del servicio.
- Usa tokens de corta duración que expiren automáticamente y que se puedan limitar específicamente a las necesidades del servicio.
- Evita realizar llamadas adicionales a la API de GitHub para validar tokens y capturar información del usuario.
- Habilita la integración directa para capacidades de Copilot con las API existentes sin mantener puntos de conexión independientes para GitHub.
- Reutiliza los puntos de conexión de API existentes mediante la traducción de la autenticación de GitHub en los tokens nativos del servicio.
Acerca del flujo de intercambio de tokens
A continuación se describe cómo Plataforma de extensibilidad de Copilot intercambia un token de OIDC por un token de acceso para autenticar las solicitudes en la extensión.
Solicitud inicial
- El usuario envía un mensaje a Extensión de Copilot.
- GitHub genera un token OIDC que contiene información de identidad de usuario.
- GitHub llama al punto de conexión de intercambio de tokens con el token OIDC.
- El servicio valida el token y devuelve un token de acceso.
- GitHub incluye el token de acceso en la solicitud a la extensión.
# HTTP header
Authorization: Bearer <your-service-token>
X-GitHub-Token: <github-token>
Solicitudes siguientes
- GitHub almacena en caché el token de acceso durante un máximo de 10 minutos.
- El token almacenado en caché se reutiliza para las solicitudes posteriores.
- Si el token expira o deja de ser válido, GitHub solicita uno nuevo.
Descripción de los tokens de OIDC
El token OIDC de GitHub es un JWT que contiene notificaciones sobre el usuario y el contexto de solicitud:
{
"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"
}
}
procedimientos recomendados
- Limita los tokens al ámbito para tener los permisos mínimos necesarios.
- Implementa el control de errores y el registro adecuados.
- Supervisa los patrones de intercambio de tokens para detectar anomalías de seguridad.
- Mantén los tokens de corta duración para minimizar los riesgos de seguridad.
- Valida todas las notificaciones antes de emitir tokens de acceso.
- Considera la posibilidad de implementar la limitación de velocidad en el punto de conexión de intercambio de tokens.
- Usa HTTPS para todas las comunicaciones de intercambio de tokens.