À propos de OpenID Connect (OIDC) pour Extensions Copilot
OpenID Connect (OIDC) permet à Extensions Copilot d’échanger des jetons de courte durée directement depuis leur fournisseur de cloud au lieu de stocker des informations d’identification GitHub de longue durée. Cette fonctionnalité permet aux agents et aux ensembles de compétences Copilot d’authentifier les utilisateurs et d’accéder aux ressources du cloud de manière plus sécurisée.
Vue d’ensemble de OIDC
Extensions Copilot a souvent besoin d’accéder à des ressources tierces ou à des API pour le compte des utilisateurs. Jusqu’à présent, il fallait stocker les jetons GitHub en tant que secrets et effectuer des appels d’API supplémentaires pour mapper ces jetons aux identités des utilisateurs dans votre système. Avec OIDC, votre extension peut demander des jetons d’accès de courte durée directement à votre service d’authentification en échangeant des informations d’identité GitHub.
Une fois activé, le fournisseur OIDC de GitHub génère automatiquement un jeton contenant des revendications sur l’utilisateur et le contexte de la requête. Votre service d’authentification peut valider ces revendications et les échanger contre un jeton d’accès spécifiquement étendu à votre service.
L’utilisation de OIDC est particulièrement utile pour le développement d’ensembles de compétences Copilot car vous pouvez ainsi exploiter vos points de terminaison API existants sans avoir à gérer des points de terminaison distincts spécifiques à GitHub. Au lieu de dupliquer les points de terminaison pour accepter les jetons GitHub, vous pouvez utiliser OIDC pour traduire les identités GitHub en jetons d’authentification natifs de votre service.
Avantages de l’utilisation d’OIDC
En implémentant l’échange de jetons OIDC dans votre Extension Copilot, vous pouvez :
- Évitez de stocker des jetons GitHub de longue durée ou de maintenir un mappage entre GitHub et les identités de votre service.
- Utilisez des jetons de courte durée qui expirent automatiquement et dont l’étendue peut être adaptée spécifiquement aux besoins de votre service.
- Évitez d’effectuer des appels supplémentaires à l’API de GitHub pour valider les jetons et récupérer les informations utilisateur.
- Activez l’intégration directe pour les compétences Copilot avec vos API existantes sans maintenir de points de terminaison distincts pour GitHub.
- Réutilisez les points de terminaison API existants en traduisant l’authentification GitHub en jetons natifs de votre service.
À propos du flux d’échange de jetons
La section suivante décrit comment Plateforme d’extensibilité Copilot échange un jeton OIDC contre un jeton d’accès pour authentifier les requêtes adressées à votre extension.
Demande initiale
- L’utilisateur envoie un message à votre Extension Copilot.
- GitHub génère un jeton OIDC contenant des informations d’identité utilisateur.
- GitHub appelle votre point de terminaison d’échange de jetons avec le jeton OIDC.
- Votre service valide le jeton et retourne un jeton d’accès.
- GitHub inclut votre jeton d’accès dans la requête à votre extension.
# HTTP header
Authorization: Bearer <your-service-token>
X-GitHub-Token: <github-token>
Demandes suivantes
- GitHub met en cache votre jeton d’accès pendant 10 minutes maximum.
- Le jeton mis en cache est réutilisé pour les requêtes suivantes.
- Si le jeton expire ou devient non valide, GitHub en demande un nouveau.
Compréhension des jetons OIDC
Le jeton OIDC de GitHub est un JWT contenant des revendications sur l’utilisateur et le contexte de requête :
{
"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"
}
}
Bonnes pratiques
- Limite les jetons aux autorisations minimales requises.
- Implémentez la gestion et la journalisation des erreurs appropriées.
- Surveillez les modèles d’échange de jetons pour les anomalies de sécurité.
- Conservez les jetons de courte durée pour réduire les risques liés à la sécurité.
- Validez toutes les revendications avant d’émettre des jetons d’accès.
- Envisagez d’implémenter la limitation du débit sur votre point de terminaison d’échange de jetons.
- Utilisez HTTPS pour toutes les communications d’échange de jetons.