Comment sécuriser les services web RESTful?
j'ai à mettre en œuvre sécurisée services web RESTful . J'ai déjà fait des recherches sur Google, mais je suis coincé.
Options:
TLS (HTTPS) +
- HTTP Basic (pc1oad1etter)
- HTTP Digest
- à deux pattes outh
- un "Cookie" approche fondée sur les
- certificats clients (Tom Ritter et ici )
- demandes signées utilisant HMAC et une durée de vie limitée
y a-t-il d'autres options possibles à envisager? Si OAuth alors quelle version? Est-il encore de l'importance? D'après ce que j'ai lu jusqu'à présent OAuth 2.0 avec des jetons au porteur (c'est-à-dire sans signatures) semble être unsafe .
j'ai trouvé un autre article très intéressant sur REST based authentication .
3 réponses
il y a une autre méthode, très sûre. Ce sont des certificats de clients. Vous savez comment les serveurs présentent un certificat SSL lorsque vous les Contactez sur https? Les serveurs de puits peuvent demander un cert d'un client afin qu'ils sachent que le client est qui ils disent qu'ils sont. Les Clients génèrent des certs et vous les donnent via un canal sécurisé (comme entrer dans votre bureau avec une clé USB - de préférence une clé USB non-trojanée).
vous chargez la clé publique du client cert certificats (et leur(s) certificat (s) de signataire (s), si nécessaire) dans votre serveur web, et le serveur web n'acceptera les connexions de personne sauf les personnes qui ont les clés privées correspondantes pour les certs qu'il connaît. Il s'exécute sur la couche HTTPS, de sorte que vous pouvez même sauter complètement l'authentification au niveau de l'application comme OAuth (en fonction de vos exigences). Vous pouvez abstraire un calque et créer une autorité de certification locale et signer Cert Les requêtes des clients, vous permettant de sauter les étapes "faites-les venir au bureau" et "chargez des certs sur le serveur".
mal au cou? Absolument. Bon pour tout? Nope. Très sécurisé? Yup.
cela dépend des clients qui gardent leurs certificats en sécurité (ils ne peuvent pas poster leurs clés privées en ligne), et il est généralement utilisé lorsque vous vendez un service à des clients plutôt que de laisser quiconque s'inscrire et se connecter.
Quoi qu'il en soit, ce n'est peut-être pas la solution que vous recherchez (ce n'est probablement pas pour être honnête), mais c'est une autre option.
si vous choisissez entre les versions de OAuth, allez avec OAuth 2.0.
Les jetons au porteurne doivent être utilisés qu'avec un moyen de transport sûr.
les jetons porte-à-porte sont seulement aussi sûrs ou peu sûrs que le transport qui crypte la conversation. HTTPS s'occupe de la protection contre les attaques de replay, donc il n'est pas nécessaire que le jeton porteur se protège aussi contre les attaques de replay.
s'il est vrai que si quelqu'un intercepte votre jeton porteur ils peuvent se faire passer pour vous quand vous appelez L'API, il y a beaucoup de façons d'atténuer ce risque. Si vous donnez à vos tokens une longue période d'expiration et vous attendez de vos clients qu'ils stockent les tokens localement, vous avez un plus grand risque d'être intercepté et mal utilisé que si vous donnez à vos tokens une courte période d'expiration, exigez des clients d'acquérir de nouveaux tokens pour chaque session, et conseillez aux clients de ne pas persister les tokens.
si vous avez besoin de sécuriser les charges utiles qui passent plusieurs participants, alors vous avez besoin de quelque chose de plus que HTTPS/SSL, puisque HTTPS/SSL ne crypte qu'un lien du graphique. Ce n'est pas la faute d'OAuth.
Les jetons au porteursont faciles à obtenir pour les clients, faciles à utiliser pour les appels API et sont largement utilisés (avec HTTPS) pour sécuriser les API publiques face à partir de Google, Facebook, et de nombreux autres services.