asp.net核心认证
问题描述:
我试图在特定的API控制器与/api/ext
开始使用HMAC验证,所以我说这些配置上启动类asp.net核心认证
app.Map("/api/ext", builder =>
{
builder.UseHmacAuthentication(new HmacAuthenticationOptions
{
SecretKey = "abc670d15a584f4baf0ba48455d3b155",
AppId = "jDEf7bMcJVFnqrPd599aSIbhC0IasxLBpGAJeW3Fzh4=",
AutomaticAuthenticate = true
});
builder.UseMvc();
});
但是当我发送请求我得到404没有发现错误,但是当我删除上面的代码它击中控制器的行动。我错过了什么?
UPDATE
最后我想出了这个
bool IsApiRequest(HttpContext context) => context.Request.Path.ToString().StartsWith("/api/ext/");
app.UseWhen(IsApiRequest, builder =>
{
builder.UseHmacAuthentication(new HmacAuthenticationOptions
{
SecretKey = "abc670d15a584f4baf0ba48455d3b155",
AppId = "jDEf7bMcJVFnqrPd599aSIbhC0IasxLBpGAJeW3Fzh4=",
AutomaticAuthenticate = true
});
builder.UseMvc();
});
似乎现在的工作(验证正确和命中控制器动作)
然后控制器动作public async Task<IActionResult> Test([FromBody] ApiIdentityUser model)
模型变得无效,但是当我删除中间件身份验证获取值.. 任何想法?
更新2
,所以我在这里是我的另一个交替,发现一些有趣的事情,我增加身份验证模块,中间件这样
app.UseMiddleware<HmacAuthenticationMiddleware>(Options.Create(new
HmacAuthenticationOptions
{
SecretKey = "abc670d15a584f4baf0ba48455d3b155",
AppId = "jDEf7bMcJVFnqrPd599aSIbhC0IasxLBpGAJeW3Fzh4=",
AutomaticAuthenticate = false,
AutomaticChallenge = false
}));
我仍然得到了错误的话,我取出
Options.Create(new HmacAuthenticationOptions
{
SecretKey = "abc670d15a584f4baf0ba48455d3b155",
AppId = "jDEf7bMcJVFnqrPd599aSIbhC0IasxLBpGAJeW3Fzh4=",
AutomaticAuthenticate = false,
AutomaticChallenge = false
})
从上面的代码,并在实施级别设置键然后它的工作,但为什么?
答
使用app.UseIdentity()
将增加CookieAuthentication
到应用程序中,所有未认证的请求重定向到 /Account/Login
默认。
因此,如果您不使用CookieAuthentication
,请尝试删除app.UseIdentity()
。
+0
我的问题是为什么模型没有绑定..授权好好工作。只有'[frombody]'变为null – Gayan
你在调用'app.UseIdentity()'吗? – Ozgur
@OzgurGUL在使用'app.Map(“/ api/ext”)之前,我正在调用'app.UseIdentity()' – Gayan