Quel est le meilleur moyen de sécuriser une API Web lorsque vous devez utiliser plusieurs clients différents? Chaque client doit avoir sa propre clé API avec laquelle se connecter. Maintenant, j'ai lu des choses différentes, mais j'ai encore quelques questions.
J'ai trouvé celui-ci: http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/#comments mais est-ce suffisant?
Donc, fondamentalement: 1. le client se connecte avec un nom d’utilisateur/mot de passe donné 2. le client récupère un jeton porteur 3. le client utilise ce jeton dans chaque message de l'API jusqu'à ce que l'horodatage soit terminé
J'ai également lu des informations sur l'attribution d'une clé secrète à chaque client, qu'il peut utiliser: http://bitoftech.net/2014/12/15/secure-asp-net-web-api-using-api-key- authentication-hmac-authentication/
Quelle est la meilleure approche?
Vous êtes sur la bonne voie en utilisant l'authentification par jeton. Voici un lien qui montre les détails de la mise en œuvre-
Authentification basée sur les jetons dans l'API Web sans interface utilisateur
De plus, je pense que vous pouvez sécuriser le canal en utilisant SSL-
L'approche basée sur les jetons utilisée dans OAuth2 et OpenIdentity est très répandue et permet un large éventail de scénarios (applications Web, applications mobiles, applications de bureau, microservices).
Il existe de bonnes bibliothèques pour fournir et consommer des jetons. Ils devraient être préférés à la mise en œuvre de vos propres protocoles. Une approche ultérieure est plus sujette aux erreurs et est plus difficile à consommer par d'autres clients (si le besoin s'en fait sentir à l'avenir). Je recommande de jeter un coup d'oeil dans IdentityServer (OpenSource). Une introduction peut être trouvée ici .
En général, je recommande de creuser plus profondément dans les blogs sur l’authentification par jeton - c’est un sujet très vaste, mais il en vaut la peine.
Oui, OAuth2 est un joli protocole standard pour la sécurisation des ressources et je le recommanderais plutôt que de déployer des implémentations personnalisées. L'idée est que chaque client recevra une paire client_id/client_secret (pas un nom d'utilisateur, ni un mot de passe) et les utilisera pour obtenir des jetons de porteur auprès d'un émetteur OAuth. Ces jetons peuvent ensuite être utilisés pour accéder aux ressources protégées de l'API Web.