2017-09-04 150 views
0

我試圖在特定的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

回答

0

它看起來你已經忘記使用 builder.UseMvc(); 因爲基於它的不具約束力的模型API是MVC。

+0

即時對不起,我已經添加,但仍然不工作 – Gayan

1

使用app.UseIdentity()將增加CookieAuthentication到應用程序中,所有未認證的請求重定向到 /Account/Login默認。

因此,如果您不使用CookieAuthentication,請嘗試刪除app.UseIdentity()

+0

我的問題是爲什麼模型沒有綁定..授權好好工作。只有'[frombody]'變爲null – Gayan