實際上有一種內置的方式來做到這一點,而不必分叉代碼或嘗試提供自己的處理程序。所有你需要做的是掛鉤某些代碼到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
屬性被選中。如果它爲空,那麼處理程序繼續執行授權標頭的默認檢查。
非常感謝。我沒有掃描源代碼,但沒有把兩個和兩個連在一起,代碼鏈接在一起。奇蹟般有效。 對於任何感興趣的人,我不得不在查詢字符串中添加持票人令牌,因爲我們使用的是SignalR(我們不想使用cookie),而是想從查詢字符串中取出令牌。 – Lutando
@Lutando很高興幫助! –