2017-08-15 6 views
1

Je souhaite pouvoir télécharger un fichier à partir d'un appel d'API. Pour l'amour de l'argument, disons que c'est un fichier PDF généré automatiquement.Comment télécharger un fichier sécurisé avec IdentityServer

J'ai deux problèmes:

  1. balises d'ancrage ne peuvent pas ajouter Authorization têtes à la demande, que XHR can.
  2. XHR Les demandes ne peuvent pas télécharger de fichiers.

Ma solution est d'écrire mon API avec un point final [AllowAnonymous] en elle, qui prend la access_token comme paramètre. Je valide ensuite le jeton d'accès à la main et renvoie un 401 ou flux le PDF.

Y at-il une meilleure solution que celle-ci ou, si c'est la meilleure solution, comment puis-je valider le access_token au sein de l'API?

+0

Vous pouvez utiliser le flux OAuth des informations d'identification du client. Première étape, créez Web Api en tant que client dans identityserver3. Étape 2, utilisez l'ID client et le secret pour obtenir un jeton d'accès du serveur d'identification. Troisième étape, dans la requête à l'API Web, ajouter un en-tête d'autorisation avec un jeton "Porteur". Regardez ici: http://www.developerhandbook.com/c-sharp/create-restful-api-authentication-using-web-api-jwt/ – TejSoft

+0

Donc le problème est plus d'un problème de javascript/XHR que IdSvr? Nous avons une API qui renvoie les fichiers générés, et c'est un point de terminaison protégé (de la manière habituelle). Le retour de ce point de terminaison est un 'FileContentResult'. Essayer d'appeler ce point de terminaison avec un appel AJAX implique de passer par les cerceaux habituels [javascript-download-a-file] (https://stackoverflow.com/questions/16086162/handle-file-download-from-ajax-post) . – Mashton

Répondre

0

Cette approche est totalement satisfaisante.

Si vous souhaitez utiliser le middleware pour valider le jeton, cela dépend du middleware que vous utilisez. Le middleware support Microsoft JWT simple a certains événements que vous pouvez implémenter pour récupérer le jeton d'une chaîne de requête en alternance. Le middleware de validation de jeton du serveur d'identité possède une propriété TokenRetriever qui vous permet également de récupérer les jetons à partir de plusieurs emplacements/emplacements alternatifs.