Thư viện này xác minh quyền truy cập Okta và mã thông báo ID bằng cách tìm nạp các khóa chung từ điểm cuối JWKS của máy chủ ủy quyền
Thư viện này dành cho Node. js và sẽ không biên dịch thành ứng dụng giao diện người dùng. Nếu bạn cần làm việc với mã thông báo trong các ứng dụng giao diện người dùng, vui lòng xem okta-auth-js
Sử dụng Express?
Mã thông báo truy cập
Thư viện này xác minh mã thông báo truy cập Okta [do máy chủ Ủy quyền tùy chỉnh Okta cấp] bằng cách tìm nạp khóa công khai từ điểm cuối JWKS của máy chủ ủy quyền. Nếu mã thông báo truy cập hợp lệ, nó sẽ được chuyển đổi thành đối tượng JSON và trả về mã của bạn
Bạn có thể tìm hiểu về mã thông báo truy cập, phạm vi và xác nhận quyền sở hữu trong OIDC và OAuth 2 của chúng tôi. 0 Tham chiếu API
Máy chủ ủy quyền tùy chỉnh Okta yêu cầu giấy phép Quản lý truy cập API. Nếu bạn đang sử dụng Máy chủ ủy quyền của tổ chức Okta [không yêu cầu Quản lý quyền truy cập API], bạn có thể xác thực thủ công đối với điểm cuối /introspect [ https. // nhà phát triển. được rồi. com/docs/reference/api/oidc/#introspect ]
Để bất kỳ mã thông báo truy cập nào hợp lệ, những điều sau đây được khẳng định
- Chữ ký hợp lệ [mã thông báo được ký bởi khóa riêng có khóa chung tương ứng trong phản hồi JWKS từ máy chủ ủy quyền]
- Mã thông báo truy cập chưa hết hạn [yêu cầu thời gian hệ thống cục bộ được đồng bộ hóa với Okta, hãy kiểm tra xác nhận quyền sở hữu
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];
4 của mã thông báo truy cập] - Yêu cầu của
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];
5 khớp với mọi yêu cầu củaconst OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];
5 dự kiến được chuyển choconst OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];
7 - Yêu cầu
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];
8 phù hợp với tổ chức phát hành mà người xác minh được xây dựng với - Mọi xác nhận xác nhận quyền sở hữu tùy chỉnh đã được định cấu hình
Để tìm hiểu thêm về các trường hợp xác minh và mã thông báo của Okta, vui lòng đọc Xác thực mã thông báo truy cập
Mã thông báo ID
Thư viện này xác minh mã thông báo ID Okta [do máy chủ Ủy quyền tùy chỉnh Okta hoặc Máy chủ ủy quyền tổ chức Okta cấp] bằng cách tìm nạp khóa công khai từ điểm cuối JWKS của máy chủ ủy quyền. Nếu mã thông báo hợp lệ, nó sẽ được chuyển đổi thành đối tượng JSON và được trả về mã của bạn
Bạn có thể tìm hiểu về mã thông báo ID, phạm vi và xác nhận quyền sở hữu trong OIDC và OAuth 2 của chúng tôi. 0 Tham chiếu API
Đối với bất kỳ mã thông báo ID nào hợp lệ, những điều sau đây được khẳng định
- Chữ ký hợp lệ [mã thông báo được ký bởi khóa riêng có khóa chung tương ứng trong phản hồi JWKS từ máy chủ ủy quyền]
- Mã thông báo ID chưa hết hạn [yêu cầu thời gian hệ thống cục bộ được đồng bộ hóa với Okta, kiểm tra yêu cầu
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];
4 của mã thông báo ID] - Yêu cầu
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];
5 khớp với ID khách hàng dự kiến được chuyển đếnoktaJwtVerifier.verifyAccessToken[accessTokenString, expectedAud] .then[jwt => { // the token is valid [per definition of 'valid' above] console.log[jwt.claims]; }] .catch[err => { // a validation failed, inspect the error }];
1 - Yêu cầu
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];
8 phù hợp với tổ chức phát hành mà người xác minh được xây dựng với - Yêu cầu
oktaJwtVerifier.verifyAccessToken[accessTokenString, expectedAud] .then[jwt => { // the token is valid [per definition of 'valid' above] console.log[jwt.claims]; }] .catch[err => { // a validation failed, inspect the error }];
3 phù hợp với nonce dự kiến - Mọi xác nhận xác nhận quyền sở hữu tùy chỉnh đã được định cấu hình
Để tìm hiểu thêm về các trường hợp xác minh và mã thông báo của Okta, vui lòng đọc Xác thực mã thông báo ID
nâng cấp
Để biết thông tin về cách nâng cấp giữa các phiên bản của thư viện, hãy xem NÂNG CẤP. md
Cách sử dụng
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];0
Tạo phiên bản trình xác minh, được liên kết với nhà phát hành [URL máy chủ ủy quyền]
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];
Xác minh mã thông báo truy cập
oktaJwtVerifier.verifyAccessToken[accessTokenString, expectedAud] .then[jwt => { // the token is valid [per definition of 'valid' above] console.log[jwt.claims]; }] .catch[err => { // a validation failed, inspect the error }];
Đối tượng dự kiến được chuyển đến
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];7 là bắt buộc và có thể là một chuỗi [khớp trực tiếp] hoặc một mảng các chuỗi [xác nhận quyền sở hữu thực tế của
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];5 trong mã thông báo phải khớp với một trong các chuỗi]
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];5
Xác minh mã thông báo ID
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];6
ID khách hàng dự kiến được chuyển đến
oktaJwtVerifier.verifyAccessToken[accessTokenString, expectedAud] .then[jwt => { // the token is valid [per definition of 'valid' above] console.log[jwt.claims]; }] .catch[err => { // a validation failed, inspect the error }];1 là bắt buộc. Giá trị nonce dự kiến là tùy chọn và bắt buộc nếu xác nhận quyền sở hữu có trong phần thân mã thông báo
Giá trị trả về ví dụ của oktaJwtVerifier.verifyAccessToken[accessTokenString, expectedAud]
.then[jwt => {
// the token is valid [per definition of 'valid' above]
console.log[jwt.claims];
}]
.catch[err => {
// a validation failed, inspect the error
}];
7 và oktaJwtVerifier.verifyAccessToken[accessTokenString, expectedAud]
.then[jwt => {
// the token is valid [per definition of 'valid' above]
console.log[jwt.claims];
}]
.catch[err => {
// a validation failed, inspect the error
}];
8
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];0
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];1
Xác nhận Khiếu nại Tùy chỉnh
Đối với các trường hợp sử dụng cơ bản, bạn có thể yêu cầu người xác minh xác nhận một nhóm xác nhận quyền sở hữu tùy chỉnh. Ví dụ: nếu bạn cần xác nhận rằng JWT này đã được cấp cho một id khách hàng nhất định
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];2
Xác thực không thành công và lỗi được trả về nếu mã thông báo không có yêu cầu được định cấu hình
Đối với các trường hợp sử dụng phức tạp hơn, bạn có thể yêu cầu người xác minh xác nhận rằng một xác nhận quyền sở hữu bao gồm một hoặc nhiều giá trị. Điều này hữu ích cho các yêu cầu loại mảng cũng như các yêu cầu có các giá trị được phân tách bằng dấu cách trong một chuỗi
Bạn sử dụng mẫu.
oktaJwtVerifier.verifyAccessToken[accessTokenString, expectedAud] .then[jwt => { // the token is valid [per definition of 'valid' above] console.log[jwt.claims]; }] .catch[err => { // a validation failed, inspect the error }];9 trong đối tượng
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];50 với một mảng giá trị cần xác thực
Ví dụ: nếu bạn muốn khẳng định rằng một yêu cầu mảng có tên
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];51 bao gồm [ít nhất]
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];52 và
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];53, bạn sẽ viết mã như sau
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];8
Nếu bạn muốn khẳng định rằng tên yêu cầu chuỗi được phân tách bằng dấu cách
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];54 bao gồm [ít nhất]
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];55 và
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];56, bạn sẽ viết mã như thế này
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];2
Các giá trị bạn muốn xác nhận luôn được biểu diễn dưới dạng một mảng [phía bên phải của biểu thức]. Tuyên bố mà bạn đang kiểm tra [phía bên trái của biểu thức] có thể có một mảng [như
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];51] hoặc một danh sách được phân tách bằng dấu cách trong một chuỗi [như
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];54] làm loại giá trị của nó
GHI CHÚ. Hiện tại,
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];59 là nhà điều hành xác nhận quyền sở hữu duy nhất được hỗ trợ
URI JWKS tùy chỉnh
URI JWKS tùy chỉnh có thể được cung cấp. Nó hữu ích khi URI JWKS không thể dựa trên URI của nhà phát hành
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];0
Bộ nhớ đệm & Giới hạn tốc độ
- Theo mặc định, các khóa đã tìm thấy được lưu vào bộ đệm theo ID khóa trong một giờ. Điều này có thể được cấu hình với tùy chọn
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];
60 cho các mục nhập bộ đệm - Nếu không tìm thấy ID khóa trong bộ đệm, điểm cuối JWK sẽ được yêu cầu. Để ngăn DoS nếu nhiều khóa không tìm thấy được yêu cầu, giới hạn tốc độ 10 yêu cầu JWK mỗi phút được thực thi. Đây là cấu hình với tùy chọn
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];
61
Dưới đây là một ví dụ cấu hình hiển thị các giá trị mặc định
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];1
thử nghiệm
Thiết lập SPA và Ứng dụng web trong tổ chức Okta của bạn và thử nghiệm các biến môi trường bằng cách làm theo phần Thử nghiệm trong README của okta-oidc-js Monorepo
GHI CHÚ
Khi tạo một SPA trong tổ chức Okta của bạn, vui lòng đảm bảo rằng tất cả các kiểm tra
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];62 đã được kiểm tra trong phần
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];63
Lệnh chạy unit test
const OktaJwtVerifier = require['@okta/jwt-verifier']; const oktaJwtVerifier = new OktaJwtVerifier[{ issuer: '//{yourOktaDomain}/oauth2/default' // required }];2
Đóng góp
Chúng tôi hoan nghênh đóng góp cho tất cả các gói mã nguồn mở của chúng tôi. Vui lòng xem hướng dẫn đóng góp để hiểu cách cấu trúc đóng góp