J'ai du mal à configurer l'authentification dans mon service Web. Le service est généré avec l'API Web ASP.NET Core.
Tous mes clients (applications WPF) doivent utiliser les mêmes informations d'identification pour appeler les opérations de service Web.
Après quelques recherches, j'ai trouvé une authentification de base - l'envoi d'un nom d'utilisateur et d'un mot de passe dans l'en-tête de la requête HTTP. Mais après des heures de recherche, il me semble que l'authentification de base n'est pas la voie à suivre dans ASP.NET Core.
La plupart des ressources que j'ai trouvées implémentent l'authentification à l'aide d'OAuth ou d'un autre middleware. Mais cela semble être surdimensionné pour mon scénario, ainsi que pour l'utilisation de la partie Identité d'ASP.NET Core.
Alors, quelle est la bonne façon d'atteindre mon objectif - une authentification simple avec nom d'utilisateur et mot de passe dans un service Web ASP.NET Core?
Merci d'avance!
Maintenant, après avoir été pointé dans la bonne direction, voici ma solution complète:
Il s'agit de la classe middleware qui est exécutée à chaque demande entrante et vérifie si la demande a les informations d'identification correctes. Si aucune information d'identification n'est présente ou si elles sont erronées, le service répond immédiatement avec une erreur 401 non autorisée .
L'extension middleware doit être appelée dans la méthode Configure de la classe de démarrage du service
Et c'est tout! :)
Une très bonne ressource pour le middleware dans .Net Core et l'authentification peut être trouvée ici: https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/
la source
Pour utiliser ceci uniquement pour des contrôleurs spécifiques, par exemple, utilisez ceci:
la source
Je pense que vous pouvez utiliser JWT (Json Web Tokens).
Vous devez d'abord installer le package System.IdentityModel.Tokens.Jwt:
Vous devrez ajouter un contrôleur pour la génération de jetons et l'authentification comme celui-ci:
Après cette mise à jour de la classe Startup.cs pour ressembler à ci-dessous:
Et c'est tout, il ne reste plus qu'à mettre un
[Authorize]
attribut sur les contrôleurs ou les actions que vous souhaitez.Voici un lien vers un didacticiel complet et simple.
http://www.blinkingcaret.com/2017/09/06/secure-web-api-in-asp-net-core/
la source
J'ai implémenté
BasicAuthenticationHandler
pour l'authentification de base afin que vous puissiez l'utiliser avec des attributs standartAuthorize
etAllowAnonymous
.Inscription sur Startup.cs -
app.UseMiddleware<BasicAuthenticationMiddleware>();
. Avec ce code, vous pouvez restreindre n'importe quel contrôleur avec l'attribut standard Autorize:et utilisez l'attribut
AllowAnonymous
si vous appliquez le filtre d'autorisation au niveau de l'application.la source
Dans ce référentiel Github public https://github.com/boskjoett/BasicAuthWebApi, vous pouvez voir un exemple simple d'API Web ASP.NET Core 2.2 avec des points de terminaison protégés par l'authentification de base.
la source
Comme indiqué à juste titre dans les articles précédents, l'un des moyens consiste à implémenter un middleware d'authentification de base personnalisé. J'ai trouvé le meilleur code de travail avec une explication dans ce blog: Auth de base avec un middleware personnalisé
J'ai fait référence au même blog mais j'ai dû faire 2 adaptations:
Lors de la lecture du nom d'utilisateur et du mot de passe du fichier appsettings.json, ajoutez une propriété statique en lecture seule dans le fichier de démarrage. Ensuite, lisez à partir de appsettings.json. Enfin, lisez les valeurs de n'importe où dans le projet. Exemple:
la source
Vous pouvez utiliser un
ActionFilterAttribute
et ajoutez l'attribut à votre contrôleur
[BasicAuth("USR", "MyPassword")]
la source
ASP.NET Core 2.0 avec Angular
https://fullstackmark.com/post/13/jwt-authentication-with-aspnet-core-2-web-api-angular-5-net-core-identity-and-facebook-login
Assurez-vous d'utiliser le type de filtre d'authentification
[Authorize (AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
la source