Ne pas exposer publiquement votre Web API
Dans le cadre d’un de mes projets, l’application Web (déployée dans une Web App sur Azure) devait consommer un Web API (déployé dans une autre Web App sur Azure). Toutefois, le Web API ne devait pas être exposé sur Internet.
C’est mon ami Mike Lapierre qui m’a expliqué comment faire. J’ai donc consigné la recette et je la partage avec toi aujourd’hui.
Pour cela, nous allons commencer par développer une application d’exemple.
L’application d’exemple
Pour illustrer le cas de figure, j’ai développé une application toute simple:
- Un projet ASP.NET Web API: qui retourne une valeur aléatoire lorsqu’on fait un HTTP Get sur l’URL “api/randomvalue”;
- Un projet ASP.NET MVC: qui appelle le Web API via un HTTP Get et affiche la valeur aléatoire retournée. L’appel se fait de façon habituelle, en utilisant un HttpClient.
Le code est disponible sur mon GitHub.
Déploiement de l’application d’exemple sur Azure
J’ai déployé le Web API sur une Web App Azure nommée “RandomNumberApi” et j’ai déployé le site MVC sur une Web App Azure nommée “FrontSiteWeb”.
Je ne détaillerai pas ici les différentes options de déploiement des Web Apps sur Azure, car c’est hors de la portée de cet article.
Si j’accède à mon site web, je vois que j’obtiens bien le résultat attendu:
Par contre, si j’invoque le Web API, je vois que je peux l’atteindre aussi:
Restriction de qui peut appeler le Web API
En résumé, il s’agit d’indiquer à la Web App hébergeant le Web API quelles sont les adresses IP autorisées à l’appeler. Dans ce cas, ce sont celles de la Web App hébergeant le site web.
Pour ce faire, on commence par déterminer les adresses IP de la Web App hébergeant le site web. Pour cela, on va dans la section “Properties” de cette Web App et on copie les valeurs du champs “Outbound IP Addresses”:
On indique ensuite à la Web App hébergeant le Web API que seules ces adresses IP sont autorisées à l’appeler. Pour cela, on va dans la section “Networking” de cette Web App et on clique sur “Configure Access Restrictions”:
On clique ensuite sur “Add Rule” et on renseigne les informations demandées:
Étant donné que la liste des outbound IP contient 4 adresses IP, on crée 4 règles:
À présent, si j’accède à mon site web, je vois que j’obtiens bien le résultat attendu:
Par contre, si j’invoque le Web API, je vois que je ne peux plus l’atteindre :
La page d’erreur n’est, certes, pas adéquate (ça doit être la page d’erreur standard pour les erreurs HTTP 403). Toutefois, si tu regardes dans la console JavaScript, tu verras que le status de l’erreur est bien “Ip Forbidden”.
En conclusion…
Même si tu déploies ton Web API sur Azure, il n’est pas nécessaire de l’exposer publiquement. Parfois, tu veux qu’il ne soit accessible que par tes autres services. C’est ce que nous avons vu ensemble aujourd’hui.
À la prochaine !