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 
      }) 

从上面的代码,并在实施级别设置键然后它的工作,但为什么?

+0

你在调用'app.UseIdentity()'吗? – Ozgur

+0

@OzgurGUL在使用'app.Map(“/ api/ext”)之前,我正在调用'app.UseIdentity()' – Gayan

它看起来你已经忘记使用 builder.UseMvc(); 因为基于它的不具约束力的模型API是MVC。

+0

即时对不起,我已经添加,但仍然不工作 – Gayan

使用app.UseIdentity()将增加CookieAuthentication到应用程序中,所有未认证的请求重定向到 /Account/Login默认。

因此,如果您不使用CookieAuthentication,请尝试删除app.UseIdentity()

+0

我的问题是为什么模型没有绑定..授权好好工作。只有'[frombody]'变为null – Gayan