web-dev-qa-db-fra.com

Comment sécuriser les services Web RESTful?

Je dois mettre en œuvre des services Web RESTful sécurisés . J'ai déjà fait des recherches avec Google mais je suis bloqué.

Options:

TLS (HTTPS) +

Y a-t-il plus d'options possibles à considérer? Si OAuth alors quelle version? Cela a-t-il même une importance? D'après ce que j'ai lu jusqu'à présent OAuth 2.0 avec support les jetons (c'est-à-dire sans signatures) semblent être peu sûrs .

J'ai trouvé un autre article très intéressant sur l'authentification basée sur REST .

Sécurisez votre REST ... la bonne façon

88
Jan Deinhard

Il existe une autre méthode très sécurisée. Ce sont des certificats clients. Savoir comment les serveurs présentent un certificat SSL lorsque vous les contactez sur https? Les serveurs Well peuvent demander un certificat à un client afin de savoir que le client est bien ce qu’ils prétendent être. Les clients génèrent des certificats et vous les communiquent via un canal sécurisé (par exemple, en entrant dans votre bureau avec une clé USB - de préférence une clé USB non-trojaned).

Vous chargez le clé publique du cert les certificats clients (et le (s) certificat (s) du signataire (s), si nécessaire) sur votre serveur Web, et le serveur Web n'accepte aucune connexion de quiconque sauf les personnes possédant les clés privées correspondantes pour les certificats sait à propos. Il fonctionne sur la couche HTTPS, de sorte que vous pouvez même être capable de complètement ignorer l'authentification au niveau de l'application telle que OAuth (selon vos besoins). Vous pouvez supprimer une couche et créer une autorité de certification locale. et signez les demandes de certifications des clients, ce qui vous permet d'ignorer les étapes "Faites-les venir au bureau" et "Charger les certificats sur le serveur".

Douleur au cou? Absolument. Bon pour tout? Nan. Très sécurisé? Ouaip.

Toutefois, cela dépend des clients qui gardent leurs certificats en lieu sûr (ils ne peuvent pas publier 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’enregistrer et se connecter.

Quoi qu'il en soit, ce n'est peut-être pas la solution que vous cherchez (ce n'est probablement pas pour être honnête), mais c'est une autre option.

58
Tom Ritter

HTTP Basic + HTTPS est une méthode courante.

18
pc1oad1etter

Si vous choisissez entre OAuth versions, allez avec OAuth 2.0.

Les jetons porteurs OAuth ne doivent être utilisés qu'avec un transport sécurisé.

Les jetons porteurs OAuth sont aussi sécurisés ou non sécurisés que le transport qui chiffre la conversation. HTTPS prend en charge la protection contre les attaques par rejeu, il n'est donc pas nécessaire que le jeton porteur protège également contre le rejeu.

S'il est vrai que si quelqu'un intercepte votre jeton porteur, il peut se faire passer pour l'utilisateur lorsqu'il appelle l'API, il existe de nombreux moyens d'atténuer ce risque. Si vous accordez une longue période d'expiration à vos jetons et que vous attendez de vos clients qu'ils stockent les jetons localement, vous courez un plus grand risque d'interception et d'utilisation abusive de jetons que si vous accordez une courte expiration à vos jetons, demandez aux clients d'acquérir de nouveaux jetons à chaque session. et conseillez aux clients de ne pas persister.

Si vous avez besoin de sécuriser les données utiles qui passent par plusieurs participants, vous avez besoin de quelque chose de plus que HTTPS/SSL, car HTTPS/SSL ne chiffre qu'un seul lien du graphique. Ce n'est pas une faute d'OAuth.

Les jetons supports sont faciles à obtenir pour les clients, faciles à utiliser pour les appels d'API et sont largement utilisés (avec HTTPS) pour sécuriser les API destinées au public de Google, Facebook et de nombreux autres services.

9
dthorpe