8

Chúng tôi có một ứng dụng gọi điện yêu cầu hệ thống của chúng tôi không đặt mã thông báo Bearer ở vị trí tiêu chuẩn (tiêu đề 'Ủy quyền') Tôi muốn tạo trình xử lý tùy chỉnh tìm kiếm JWT đúng địa điểm. Bên cạnh đó forking việc thực hiện JwtBearerMiddleware là có cách nào sạch hơn tôi chỉ có thể nói với middleware những gì xử lý để sử dụng?Vị trí mã thông báo tùy chỉnh cho JwtBearerMiddleware

Tùy chọn dễ dàng hơn là chỉ cần viết lại yêu cầu bằng cách tiêm JWT vào đúng vị trí (tiêu đề yêu cầu) trong đường dẫn yêu cầu ngay trước khi phần mềm trung gian JWT chạy. Nhưng điều này có vẻ hơi khó hiểu.

Trả lời

5

Thực sự là một cách tích hợp để thực hiện việc này, mà không phải bẻ mã hoặc cố gắng cung cấp trình xử lý của riêng bạn. Tất cả bạn phải làm là treo một số mã vào sự kiện 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); 
     } 
    } 
}); 

Nếu bạn có một cái nhìn tại source, tài sản Token được kiểm tra sau khi xử lý sự kiện được thực thi. Nếu nó là null, thì trình xử lý sẽ tiếp tục với kiểm tra mặc định cho tiêu đề Authorization.

+1

Cảm ơn rất nhiều vì điều này. Tôi đã quét nguồn nhưng không đặt hai và hai lại với nhau wrt dòng mã mà bạn liên kết. Làm việc như một say mê. Đối với bất kỳ ai quan tâm, tôi phải thêm mã thông báo Bearer trong chuỗi truy vấn vì chúng tôi đang sử dụng SignalR (chúng tôi không muốn sử dụng cookie) và muốn kéo mã thông báo từ chuỗi truy vấn thay thế. – Lutando

+0

@Lutando Rất vui được giúp đỡ! –

Các vấn đề liên quan