J’ai une application Web API et j’ai compris qu’OAuth serait le modèle de sécurité standard pour les API où un serveur d’authentification deviendrait responsable de la génération des jetons d’autorisation afin que l’utilisateur puisse envoyer à notre serveur et utiliser les services.
Je suis très novice dans ce domaine mais je comprends les rôles:
Mais qu’est-ce qu’OAuth en pratique, pas en théorie Est-ce une bibliothèque .NET? Est-ce un service fourni par une société distincte? Est-ce quelque chose que je peux configurer sur ma machine de développement locale et voir comment cela fonctionne?
Comment démarrer avec OAuth pour sécuriser une application Web API?
OAuth est un protocole. la version actuelle est OAuth 2.0 . Plus à votre question, ce lien répertorie plusieurs implémentations du protocole dans diverses technologies. Pour une utilisation avec l’API Web .NET, vous êtes probablement intéressé par DotNetOpenAuth, qui fournit des implémentations d’OAuth 1 et d’OAuth 2.
J’utilise DotNetOpenAuth dans une application sur laquelle je travaille actuellement pour sécuriser une API Web .NET. J’ai un OAuth2Handler
qui étend DelegatingHandler
qui est inséré dans le pipeline de l’API Web avant que les demandes entrantes atteignent les contrôleurs. OAuth2Handler
effectue les opérations suivantes:
ResourceServer
DotNetOpenAuth ResourceServer.GetPrincipal()
qui lit et déchiffre un jeton d’access (émis ailleurs par AuthorizationServer
et renvoie un OAuthPrincipal
(dans mon cas, je lis des données supplémentaires que l’implémentation DotNetOpenAuth vous permet de transmettre et de créer un ClaimsPrincipal
.) IPrincipal
contenant les informations utilisateur lues à partir du jeton d’access à la propriété User du thread et au contexte HTTP actuel de sorte qu’elle soit disponible à partir de la propriété ApiController.User
dans les contrôleurs de service: httpContext.User = Thread.CurrentPrincipal = principal;
Honnêtement, faire en sorte que tout fonctionne correctement (par exemple, la configuration du serveur d’autorisation, du serveur de ressources, des certificates, etc.) n’est pas sortingvial. Malheureusement, il ne semblait pas y avoir de bon guide sur le site DotNetOpenAuth. Voici quelques autres tâches que vous aurez devant vous si vous suivez cette voie:
IAuthorizationServer
– C’est l’interface fournie par DotNetOpenAuth qui vous permet de vous connecter à la bibliothèque et d’utiliser son implémentation pour émettre des jetons d’access OAuth2. Vous devrez également implémenter INonceStore
et ICryptoKeyStore
ce que j’ai fait en utilisant un contexte EntityFramework pour le stockage. AuthorizationServer
et ResourceServer
utilisent chacun des certificates pour chiffrer / déchiffrer le jeton d’access, en s’assurant qu’ils sont uniquement accessibles l’un à l’autre. J’ai construit une configuration personnalisée pour pouvoir gérer cette configuration dans les fichiers web.config
de mon application de serveur d’permissions et mes services d’API Web (serveur de ressources). J’espère que cela vous aidera à mieux comprendre comment démarrer avec OAuth et l’API Web .NET. Voici un article de blog illustrant certaines de ces étapes. Cette réponse SO donne quelques détails supplémentaires sur le côté client de l’image.
(La documentation en ligne DotNetOpenAuth semble être en panne en ce moment … désolé de ne pas avoir de liens; apparemment, cela est déjà arrivé ).