Gửi mã thông báo JWT trong các tiêu đề với Postman


169

Tôi đang thử nghiệm triển khai bảo mật dựa trên mã thông báo JWT dựa trên bài viết sau . Tôi đã nhận được thành công mã thông báo từ máy chủ thử nghiệm. Tôi không thể tìm ra cách để chương trình Chrome POSTMAN REST Client gửi mã thông báo trong tiêu đề.

ảnh chụp màn hình người đưa thư

Câu hỏi của tôi như sau:

1) Tôi có đang sử dụng tên tiêu đề và / hoặc giao diện POSTMAN đúng không?

2) Tôi có cần căn cứ 64 mã hóa mã thông báo không? Tôi nghĩ rằng tôi chỉ có thể gửi mã thông báo trở lại.


Xin chào, tôi có thể thấy mã thông báo jwt tôi đã nhận được ở đâu?
Usr

1
@MLondei, nó phụ thuộc vào cách cấu hình máy chủ nhận. Nó có thể quay lại dưới dạng một URL (tìm thấy nó trong chuỗi URL) hoặc nó có thể quay lại trong phần phản hồi (tìm nó trong trường cơ thể của phản hồi). Đó là hai cái chính tôi biết.
Diode Dan

Câu trả lời:


277

Đối với tên Tiêu đề yêu cầu chỉ cần sử dụng Ủy quyền. Đặt Bearer trước mã thông báo. Tôi chỉ thử nó và nó làm việc cho tôi.

Ủy quyền: Người mang TOKEN_STRING

Mỗi phần của JWT là một giá trị được mã hóa base64url.


61
Chỉ cần làm rõ, trường "Tiêu đề" trở thành Ủy quyền và trường "Giá trị" trở thành Người mang [WHITESPACE] <your-code-here>
Diode Dan

Bạn có biết phần nào của trường được mã hóa không? Dường như dữ liệu ngay sau '.' Cuối cùng dải phân cách đang cho tôi những gì trông giống như các ký tự rác. Tôi cho rằng đây thực sự là thông tin được mã hóa bởi trình tạo Token?
Diode Dan

5
Hãy xem jwt.io. Có một phần nơi bạn có thể dán JWT và xem nội dung được giải mã của nó, cách tốt nhất để xem những gì đang xảy ra. Chuỗi bí mật máy chủ được sử dụng để tạo phần cuối cùng của mã thông báo. JWT chỉ ký tải trọng không mã hóa, tức là bạn có thể giải mã phần 1 & 2 của chuỗi nhưng không thể xác thực nó mà không có bí mật. tự-issued.info/docs/draft
Mick Cullen

4
Ai đó có thể vui lòng giải thích lý do tại sao chúng ta cần đặt Bearer trước JWT không? Đây có phải là một loại tín hiệu cho máy chủ rằng đây là JWT?
user137717

3
Đó chỉ là quy ước - bạn có thể tìm thấy tất cả các chi tiết ở đây: jwt.io/int sinhtion
Michael Noyb

134

Đây là một hình ảnh nếu nó giúp :)

Người phát thơ

Cập nhật:

Nhóm người đưa thư đã thêm "Mã thông báo mang" vào "tab ủy quyền": Người đưa thư cập nhật


40

Tôi đang thêm vào câu hỏi này một mẹo nhỏ thú vị có thể giúp các bạn thử nghiệm JWT Apis.

Nó thực sự rất đơn giản.

Khi bạn đăng nhập, trong Api (điểm cuối đăng nhập), bạn sẽ ngay lập tức nhận được mã thông báo của mình và như @ mick-cullen nói rằng bạn sẽ phải sử dụng JWT trên tiêu đề của mình như sau:

Authorization: Bearer TOKEN_STRING

Bây giờ nếu bạn muốn tự động hóa hoặc chỉ làm cho cuộc sống của bạn dễ dàng hơn, các thử nghiệm của bạn, bạn có thể lưu mã thông báo dưới dạng toàn cầu mà bạn có thể gọi trên tất cả các điểm cuối khác như:

Authorization: Bearer {{jwt_token}}

Trên Postman: Sau đó tạo một biến toàn cầu trong postman là jwt_token = TOKEN_STRING.

Trên điểm cuối đăng nhập của bạn: Để làm cho nó hữu ích, hãy thêm vào đầu Tab Kiểm tra thêm:

var data = JSON.parse(responseBody);
postman.clearGlobalVariable("jwt_token");
postman.setGlobalVariable("jwt_token", data.jwt_token);

Tôi đoán rằng api của bạn đang trả lại mã thông báo dưới dạng json trên phản hồi là: {"jwt_token": "TOKEN_STRING"}, có thể có một số biến thể.

Trên dòng đầu tiên, bạn thêm phản hồi cho varibale dữ liệu. Làm sạch toàn cầu của bạn và gán giá trị.

Vì vậy, bây giờ bạn đã có mã thông báo của mình trên biến toàn cục, điều gì làm cho việc sử dụng dễ dàng Ủy quyền: Bearer {{jwt_token}} trên tất cả các điểm cuối của bạn.

Hy vọng mẹo này sẽ giúp.


EDIT
Một cái gì đó để đọc

Về các thử nghiệm trên Postman: các ví dụ thử nghiệm

Dòng lệnh: Newman

CI: tích hợp với Jenkins

Bài đăng trên blog đẹp: tự động kiểm tra api chính


Thật thú vị, tôi không quen với khái niệm về Testtab và mã hóa Postman. Có một nguồn tài nguyên mà bạn đề nghị để bắt đầu với điều này?
Diode Dan


Thật ra Postman thực sự thú vị và khá mạnh khi thử nghiệm tự động. Bạn có thể định cấu hình người đưa thư theo cách nó có thể xây dựng dữ liệu ngẫu nhiên Biến toàn cục hoặc biến Môi trường mà bạn có thể chạy trong các bài kiểm tra. Và thực hiện chạy lặp và kiểm tra bất kỳ phản hồi nào như kiểm tra đơn vị điểm cuối. Lưu chúng và tìm lỗi khi bạn thay đổi mã. Tôi chưa sử dụng tiện ích dòng lệnh nhưng tôi hiểu rằng bạn có thể định cấu hình nó để chạy trong đường ống dẫn của bạn.
Pablo Palacios

Bạn có thể đọc về dòng lệnh tại đây: getpostman.com/docs/newman_intro
Pablo Palacios

9

Tôi đã có cùng một vấn đề trong Flaskvà sau khi thử 2 giải pháp đầu tiên giống nhau ( Authorization: Bearer <token>) và nhận được điều này:

{
    "description": "Unsupported authorization type",
    "error": "Invalid JWT header",
    "status_code": 401
}

Tôi đã xoay sở để giải quyết nó bằng cách sử dụng:

Authorization: jwt <token>

Nghĩ rằng nó có thể tiết kiệm thời gian cho những người gặp phải điều tương tự.


1
Tôi đã nhận được Authentication credentials were not providedtrong djangosử dụng Bearer <token>. giải quyết với jwt <token>. Cảm ơn giải pháp
S_M

7

Dưới đây là cách đặt mã thông báo này tự động

Theo yêu cầu đăng nhập / xác thực của bạn

nhập mô tả hình ảnh ở đây

Sau đó cho trang xác thực

nhập mô tả hình ảnh ở đây


4

Nếu bạn muốn sử dụng người đưa thư đúng cách là sử dụng các tiêu đề như vậy

chìa khóa: Ủy quyền

giá trị: jwt {mã thông báo}

đơn giản vậy thôi.


2

Đối với những người đang sử dụng plugin wordpress Advanced Access Manager để mở Xác thực JWT.

Trường Tiêu đề phải đặt Xác thực thay vì Ủy quyền

nhập mô tả hình ảnh ở đây

AAM đã đề cập đến nó trong tài liệu của họ ,

Ghi chú! AAM không sử dụng tiêu đề Ủy quyền tiêu chuẩn vì hầu hết các máy chủ Apache đều bỏ qua. ...


Hy vọng nó sẽ giúp được ai đó! Cảm ơn câu trả lời khác đã giúp tôi rất nhiều !!


2
  1. Người đưa thư mở.
  2. đi đến trường "tiêu đề".
  3. ở đó người ta có thể thấy khoảng trống "giá trị chính".
  4. trong loại khóa "Ủy quyền".
  5. trong loại giá trị "Bearer (dấu cách) your_access_token_value".

Làm xong!


2

nhập mô tả hình ảnh ở đây

Mọi thứ khác tức là. Params, Authorization, Body, Pre-request Script, Tests trống, chỉ cần mở tab Headers và thêm như trong hình. Nó cũng giống như vậy đối với yêu cầu GET.


0

Bằng cách nào đó người đưa thư đã không làm việc cho tôi. Tôi đã phải sử dụng một tiện ích mở rộng chrome có tên RESTED đã hoạt động.


0

Tôi đã làm như cách mà moplin đã đề cập. Nhưng trong trường hợp dịch vụ của tôi, hãy gửi JWT trong các tiêu đề phản hồi, như một giá trị dưới khóa "Ủy quyền".

Authorization →Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpbWFsIiwiZXhwIjoxNDk4OTIwOTEyfQ.dYEbf4x5TGr_kTtwywKPI2S-xYhsp5RIIBdOa_wl9soqaFkUUKfy73kaMAv_c-6cxTAqBwtskOfr-Gm3QI0gpQ

Những gì tôi đã làm là, tạo một biến toàn cầu trong người đưa thư như

khóa->
giá trị jwt- > blahblah

trong yêu cầu đăng nhập-> Tab kiểm tra, thêm

postman.clearGlobalVariable("jwt");
postman.setGlobalVariable("jwt", postman.getResponseHeader("Authorization"));

trong các yêu cầu khác, chọn tab Tiêu đề và cung cấp

khóa-> Ủy quyền

giá trị -> {{jwt}}


0

Trong Postman phiên bản mới nhất (7 ++) có thể không có trường Bearer trong Ủy quyền, vì vậy hãy chuyển đến tab Tiêu đề

chọn khóa làm Ủy quyền và viết giá trị ghi JWT


Đối với v7.19.0 + và nó cũng đã ở đó một thời gian, có một Bearer Token người trợ giúp trong Authorizationtab, thêm giá trị mã thông báo ở đây (Mã hóa cứng hoặc dưới dạng biến động) sẽ tạo cùng một Authorizationtiêu đề cho yêu cầu.
Daniel Dainton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.