我想弄清楚.net核心依赖注入。我的项目目前是一个web api,有一些自定义认证。C#依赖注入 - 身份验证
services.AddAuthentication(Authentication.Hmac.HmacDefaults.AuthenticationScheme).AddHmac(options =>
{
options.AuthName = "myname";
options.CipherStrength = HmacCipherStrength.Hmac256;
options.EnableNonce = true;
options.RequestTimeLimit = 5;
options.PrivateKey = "myprivatekey";
});
我的问题是这样的:我已经在“ConfigureServices补充说:”我的认证,像这样(在Startups.cs?你如何认证服务中访问IMemoryCache我已经试过刚刚创建了一个新的MemoryCache和在路过它,但这是行不通的。其主要目的是用于检查随机数的值(,看看他们是否在缓存中,如果是身份验证失败,如果没有,添加到高速缓存AUTH单程)。
同样,这是.NET Core 2(Web API)。
更新:
这里是HmacHandler类的基础(实际执行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()
{...}
}
然后是“选项”类。
public class HmacOptions : AuthenticationSchemeOptions
{...}
它不能有一个带参数的构造函数。我需要在HmacHandler类中使用IMemoryCache。我尝试添加IMemoryCache(在构造函数等)。这没有用。
我用更多的信息更新了这个问题。需要在“HandleAuthenticateAsync()”方法中访问IMemoryCache。再次,只是为了检查在给定的时间内是否使用了特定的随机数。 – user3394319
没有错误。缓存总是空的。因此,在缓存中永远不会发现随机数(在回复攻击期间),因此它算作有效。这导致我相信,无论是缓存对于每个请求都是“新的”,这是没有意义的。或者应用程序缓存没有正确传入(或沿着这些线)。 – user3394319
在ConfigureServices下的Startup.cs中调用'services.AddMemoryCache();'(在我调用app.UseAuthentication ....之前) – user3394319