8

我們有一個調用客戶端向我們的系統請求不會將標識標記放置在標準位置('Authorization'標頭)我想創建一個自定義處理程序,以查找正確的JWT地點。除了分叉JwtBearerMiddleware實現有沒有更清晰的方法,我可以告訴中間件使用什麼處理程序?JwtBearerMiddleware的自定義標記位置

更容易的選擇是通過在JWT中間件運行之前將請求管道中的JWT注入到正確位置(請求標頭)來重寫請求。但是這看起來有點冒失。

回答

5

實際上有一種內置的方式來做到這一點,而不必分叉代碼或嘗試提供自己的處理程序。所有你需要做的是掛鉤某些代碼到OnMessageReceived事件:

app.UseJwtBearerAuthentication(new JwtBearerOptions() 
{ 
    Events = new JwtBearerEvents() 
    { 
     OnMessageReceived = context => 
     { 
      // Get the token from some other location 
      // This can also await, if necessary 
      var token = context.Request.Headers["MyAuthHeader"]; 

      // Set the Token property on the context to pass the token back up to the middleware 
      context.Token = token; 

      return Task.FromResult(true); 
     } 
    } 
}); 

如果你看一看的source,執行事件處理程序後Token屬性被選中。如果它爲空,那麼處理程序繼續執行授權標頭的默認檢查。

+1

非常感謝。我沒有掃描源代碼,但沒有把兩個和兩個連在一起,代碼鏈接在一起。奇蹟般有效。 對於任何感興趣的人,我不得不在查詢字符串中添加持票人令牌,因爲我們使用的是SignalR(我們不想使用cookie),而是想從查詢字符串中取出令牌。 – Lutando

+0

@Lutando很高興幫助! –