Comment sécuriser les services Web RESTful?

Je dois implémenter des services Web RESTful sécurisés. J’ai déjà fait des recherches en utilisant Google mais je suis coincé.

Options:

TLS (HTTPS) +

  • HTTP Basic (pc1oad1etter)
  • HTTP Digest
  • OAuth à deux jambes
  • une approche basée sur les cookies
  • certificates 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 à considérer? Si OAuth alors quelle version? Est-ce même important? D’après ce que j’ai lu jusqu’ici, OAuth 2.0 avec des jetons au porteur (c’est-à-dire sans signatures) semble être peu sûr .

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

Sécurisez votre API REST … la bonne manière

Il y a une autre méthode très sécurisée. C’est des certificates clients. Savoir comment les serveurs présentent un certificate SSL lorsque vous les contactez sur https? Eh bien, les serveurs peuvent demander un certificate à un client afin qu’ils sachent que le client est ce qu’il dit être. Les clients génèrent des certificates et vous les transmettent via un canal sécurisé (par exemple, entrer dans votre bureau avec une clé USB – de préférence une clé USB sans cheval de Troie).

Vous chargez la clé publique des certificates du client de certificateion (et le (s) certificate (s) de leur signataire, si nécessaire) sur votre serveur Web et le serveur Web n’acceptera aucune connexion, sauf les personnes qui possèdent les clés privées correspondantes. il sait à propos de Il s’exécute sur la couche HTTPS, de sorte que vous pouvez même ignorer complètement l’authentification au niveau de l’application comme OAuth (en fonction de vos besoins). Vous pouvez séparer une couche et créer une autorité de certificateion locale et signer les demandes de certificates des clients, ce qui vous permet d’ignorer les étapes «les faire entrer dans le bureau» et «charger les certificates sur le serveur».

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

Il repose sur des clients conservant leurs certificates en toute sécurité (ils ne peuvent pas publier leurs clés privées en ligne), et il est généralement utilisé lorsque vous vendez un service aux 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 honnête), mais c’est une autre option.

HTTP Basic + HTTPS est une méthode commune.

Si vous choisissez entre les versions d’OAuth, optez pour OAuth 2.0.

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

Les jetons OAuth sont uniquement sécurisés ou peu sûrs 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 du porteur se prémunisse contre la relecture.

S’il est vrai que si quelqu’un intercepte votre jeton porteur, il peut vous emprunter l’identité de l’API, mais il existe plusieurs moyens d’atténuer ce risque. Si vous donnez à vos jetons une longue période d’expiration et attendez de vos clients qu’ils stockent les jetons localement, vous risquez davantage que les jetons soient interceptés et mal utilisés. et conseiller aux clients de ne pas persister.

Si vous avez besoin de sécuriser des charges qui traversent plusieurs participants, vous avez besoin de quelque chose de plus que HTTPS / SSL, puisque HTTPS / SSL ne chiffre qu’un seul lien du graphique. Ce n’est pas une faute de OAuth.

Les jetons porteurs 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 publiques de Google, Facebook et de nombreux autres services.