Okta jwt-verifier-php

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ủa
    const OktaJwtVerifier = require['@okta/jwt-verifier'];
    
    const oktaJwtVerifier = new OktaJwtVerifier[{
      issuer: '//{yourOktaDomain}/oauth2/default' // required
    }];
    5 dự kiến ​​được chuyển cho
    const 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 đế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
  • 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

Làm cách nào để xác thực JWT trong PHP?

Sử dụng JWT cho Mã thông báo truy cập trong PHP .
Truy xuất và phân tích cú pháp Khóa web JSON Okta [JWK] của bạn, khóa này sẽ được ứng dụng của bạn kiểm tra định kỳ và lưu vào bộ đệm ẩn
Giải mã mã thông báo truy cập ở định dạng Mã thông báo Web JSON
Xác minh chữ ký được sử dụng để ký mã thông báo truy cập
Xác minh các khiếu nại được tìm thấy bên trong mã thông báo truy cập

Chúng ta có thể sử dụng JWT trong PHP không?

Trên thực tế, có một thư viện mà bạn có thể sử dụng cho nó. PHP-JWT . Chỉ cần chạy lệnh composer require firebase/php-jwt và bạn sẽ có thư viện sẵn sàng để sử dụng bên trong mã của mình.

Làm cách nào để triển khai xác thực JWT trong PHP?

Xác thực JWT đã ký - Hướng dẫn PHP .
Tổng quan
Thiết lập môi trường của bạn
Kiểm tra kho lưu trữ GitHub
Tạo một ứng dụng và tạo một cặp khóa
Điền vào các biến môi trường của dự án
Chạy mã
Tạo tài khoản nhà phát triển

Okta có hỗ trợ JWT không?

Ghi chú. SDK Okta hỗ trợ tạo và ký JWT cũng như yêu cầu mã thông báo truy cập . Nếu bạn đang sử dụng SDK Okta, bạn có thể bỏ qua phần này và phần Nhận mã thông báo truy cập. Tạo và ký JWT bằng khóa riêng của bạn để sử dụng làm xác nhận JWT trong yêu cầu mã thông báo truy cập có phạm vi.

Chủ Đề