J'essaie de comprendre .net injection de dépendance de base. Mon projet est actuellement une API Web, avec une authentification personnalisée. J'ai ajouté mon authentification comme si (dans Startups.cs sous « ConfigureServices »:Injection de dépendances C# - Authentification
services.AddAuthentication(Authentication.Hmac.HmacDefaults.AuthenticationScheme).AddHmac(options =>
{
options.AuthName = "myname";
options.CipherStrength = HmacCipherStrength.Hmac256;
options.EnableNonce = true;
options.RequestTimeLimit = 5;
options.PrivateKey = "myprivatekey";
});
Ma question est la suivante: Comment avez-vous accès IMemoryCache au sein du service d'authentification que j'ai essayé viens de créer une nouvelle MemoryCache et Le but principal est de vérifier les valeurs Nonce (voir si elles sont dans le cache, si yes auth échoue, sinon, ajouter au cache auth passes)
. est .NET Core 2 (API Web)
MISES à JOUR:
Voici la base de la classe HmacHandler (la partie qui fait la EFFECTIVEMENT auth):
public class HmacHandler : AuthenticationHandler<HmacOptions>
{
private static string Signature;
private static string Nonce;
private static Encoding Encoder { get { return Encoding.UTF8; } set { } }
IMemoryCache MemoryCache { get; set; }
public HmacHandler(IOptionsMonitor<HmacOptions> options, ILoggerFactory logger, UrlEncoder encoder, IDataProtectionProvider dataProtection, ISystemClock clock)
: base(options, logger, encoder, clock)
{
}
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{...}
}
Ensuite, il y a la classe « Options ».
public class HmacOptions : AuthenticationSchemeOptions
{...}
Il ne peut pas avoir de constructeur qui prend des paramètres. Je dois utiliser le IMemoryCache dans la classe HmacHandler. J'ai essayé d'y ajouter IMemoryCache (dans le constructeur, etc.). Cela n'a pas fonctionné.
J'ai mis à jour la question avec quelques informations supplémentaires. Le IMemoryCache doit être accessible dans la méthode "HandleAuthenticateAsync()". Encore une fois, juste pour vérifier si un nonce particulier a été utilisé dans un laps de temps donné. – user3394319
Aucune erreur. Le cache est toujours vide. Donc le nonce (disons pendant une attaque de réponse) n'est jamais trouvé dans le cache, donc il compte comme valide. Ce qui m'amène à croire que le cache est "nouveau" à chaque requête ... ce qui n'a pas de sens. Ou le cache de l'application n'est pas transmis correctement (ou quelque chose dans ce sens). – user3394319
Dans Startup.cs sous ConfigureServices, j'appelle 'services.AddMemoryCache();' (avant que j'appelle app.UseAuthentication ....) – user3394319