Mã thông báo truy cập được ký bằng RS256, điều đó có nghĩa là JWT được ký bằng khóa riêng Azure AD và sẽ được xác thực bằng khóa chung Azure AD
Sau khi bạn nhận được mã thông báo truy cập bằng cách sử dụng điểm cuối mã thông báo, mã thông báo cần xác minh để xác thực tính xác thực của dữ liệu của mã thông báo JWT bằng cách sử dụng khóa chung của Azure AD để xác minh chữ ký. Bạn có thể lấy khóa chung bằng cách gọi điểm cuối cấu hình Azure AD OpenID công khai https. //đăng nhập. microsoftonline. com/{tenant-id}/v2. 0/. cấu hình nổi tiếng/openid và xác minh đối với khóa riêng (đứa trẻ) được tạo bởi mã thông báo Azure AD
Tôi không chắc chắn về cách triển khai trong PHP nhưng đã tìm thấy luồng tràn ngăn xếp để xác minh JWT bằng PHP
PHP-JWT là một gói được viết bằng ngôn ngữ lập trình PHP để mã hóa (tạo), giải mã (phân tích cú pháp), xác minh và xác thực JWT (Mã thông báo web JSON). Nó cung cấp một giao diện thông thạo, dễ sử dụng và hướng đối tượng
Xác nhận bởi JWT. io
Tài liệu
phiên bản
- 2. x. x (LTS)
- 1. x. x (Không được hỗ trợ)
JWT là gì?
Trong trường hợp bạn không quen với JWT, bạn có thể đọc Wikipedia hoặc JWT. io
Cài đặt
Thêm gói vào phần phụ thuộc Trình soạn thảo của bạn bằng lệnh sau
composer require miladrahimi/php-jwt "2.*"
ví dụ đơn giản
Ví dụ sau đây cho thấy cách tạo JWT và phân tích cú pháp bằng thuật toán HS256
use MiladRahimi\Jwt\Generator; use MiladRahimi\Jwt\Parser; use MiladRahimi\Jwt\Cryptography\Algorithms\Hmac\HS256; // Use HS256 to generate and parse tokens $signer = new HS256('12345678901234567890123456789012'); // Generate a token $generator = new Generator($signer); $jwt = $generator->generate(['id' => 666, 'is-admin' => true]); // Parse the token $parser = new Parser($signer); $claims = $parser->parse($jwt); print_r($claims); // ['id' => 666, 'is-admin' => true]
thuật toán HMAC
Thuật toán HMAC sử dụng khóa đối xứng. Một khóa duy nhất có thể ký và xác minh JWT. Gói này hỗ trợ HS256, HS384 và HS512 của thuật toán HMAC. Ví dụ được đề cập ở trên minh họa cách sử dụng thuật toán HMAC (HS256) để ký và xác minh JWT
Thuật toán RSA
Các thuật toán RSA không đối xứng. Cần có một khóa được ghép nối để ký và xác minh mã thông báo. Để ký JWT, chúng tôi sử dụng khóa riêng và để xác minh, chúng tôi sử dụng khóa chung có liên quan. Các thuật toán này có thể hữu ích khi máy chủ xác thực không thể tin tưởng chủ sở hữu tài nguyên. Hãy xem ví dụ sau
use MiladRahimi\Jwt\Cryptography\Algorithms\Rsa\RS256Signer; use MiladRahimi\Jwt\Cryptography\Algorithms\Rsa\RS256Verifier; use MiladRahimi\Jwt\Cryptography\Keys\RsaPrivateKey; use MiladRahimi\Jwt\Cryptography\Keys\RsaPublicKey; use MiladRahimi\Jwt\Generator; use MiladRahimi\Jwt\Parser; // Generate a token $privateKey = new RsaPrivateKey('/path/to/private.pem'); $signer = new RS256Signer($privateKey); $generator = new Generator($signer); $jwt = $generator->generate(['id' => 666, 'is-admin' => true]); // Parse the token $publicKey = new RsaPublicKey('/path/to/public.pem'); $verifier = new RS256Verifier($publicKey); $parser = new Parser($verifier); $claims = $parser->parse($jwt); print_r($claims); // ['id' => 666, 'is-admin' => true]
Bạn có thể đọc hướng dẫn này để tìm hiểu cách tạo một cặp khóa RSA (công khai/riêng tư)
Thẩm định
Theo mặc định, gói xác minh chữ ký JWT, xác thực một số xác nhận quyền sở hữu công khai nếu chúng tồn tại (sử dụng DefaultValidator) và phân tích cú pháp các xác nhận quyền sở hữu. Nếu bạn có xác nhận quyền sở hữu tùy chỉnh của mình, bạn cũng có thể thêm các quy tắc xác thực của chúng. Xem ví dụ này
use MiladRahimi\Jwt\Parser; use MiladRahimi\Jwt\Cryptography\Algorithms\Hmac\HS256; use MiladRahimi\Jwt\Exceptions\ValidationException; use MiladRahimi\Jwt\Validator\Rules\EqualsTo; $jwt = '...'; // Get the JWT from the user $signer = new HS256('12345678901234567890123456789012'); // Add Validation (Extend the DefaultValidator) $validator = new DefaultValidator(); $validator->addRule('is-admin', new EqualsTo(true)); // Parse the token $parser = new Parser($signer, $validator); try { $claims = $parser->parse($jwt); echo $claims; // ['id' => 666, 'is-admin' => true] } catch (ValidationException $e) { // Handle error. }
Trong ví dụ trên, chúng tôi đã mở rộng DefaultValidator. Trình xác thực này có một số Quy tắc tích hợp cho các khiếu nại công khai. Chúng tôi cũng khuyên bạn nên mở rộng nó để xác thực. DefaultValidator là một phân lớp của BaseValidator. Bạn cũng có thể sử dụng BaseValidator để xác thực, nhưng bạn sẽ mất Quy tắc tích hợp và bạn phải tự thêm tất cả Quy tắc
Quy tắc
Trình xác thực sử dụng Quy tắc để xác thực các xác nhận quyền sở hữu. Mỗi Quy tắc xác định các giá trị đủ điều kiện cho một xác nhận quyền sở hữu. Đây là các Quy tắc tích hợp sẵn mà bạn có thể tìm thấy trong không gian tên use MiladRahimi\Jwt\Generator; use MiladRahimi\Jwt\Parser; use MiladRahimi\Jwt\Cryptography\Algorithms\Hmac\HS256; // Use HS256 to generate and parse tokens $signer = new HS256('12345678901234567890123456789012'); // Generate a token $generator = new Generator($signer); $jwt = $generator->generate(['id' => 666, 'is-admin' => true]); // Parse the token $parser = new Parser($signer); $claims = $parser->parse($jwt); print_r($claims); // ['id' => 666, 'is-admin' => true]1
- Bao gồm
- Tương đương với
- Lớn hơn
- Lớn hơn hoặc bằng
- giống hệt nhau
- Ít hơn
- Ít hơn hoặc bằng
- Mới hơn
- Mới hơnHoặcSame
- Không có sản phẩm nào
- Có giá trị
- Lớn tuổi hơn
- Cũ Hơn Hoặc Giống Nhau
Bạn có thể xem mô tả của họ trong khối tài liệu lớp học của họ
Quy tắc bắt buộc và tùy chọn
Bạn có thể thêm quy tắc vào trình xác thực theo yêu cầu hoặc tùy chọn. Nếu Quy tắc là bắt buộc, việc xác thực sẽ không thành công khi xác nhận quyền sở hữu liên quan không có trong xác nhận quyền sở hữu JWT
Ví dụ này minh họa cách thêm quy tắc theo yêu cầu và tùy chọn
$validator = new DefaultValidator(); // Add a rule as required $validator->addRule('exp', new NewerThan(time())); // Add a rule as required again! $validator->addRule('exp', new NewerThan(time()), true); // Add a rule as optional $validator->addRule('exp', new NewerThan(time()), false);
Những nguyên tắc tập quán
Bạn tạo Quy tắc của riêng mình nếu quy tắc tích hợp không thể đáp ứng nhu cầu của bạn. Để tạo Quy tắc, bạn phải triển khai giao diện use MiladRahimi\Jwt\Generator; use MiladRahimi\Jwt\Parser; use MiladRahimi\Jwt\Cryptography\Algorithms\Hmac\HS256; // Use HS256 to generate and parse tokens $signer = new HS256('12345678901234567890123456789012'); // Generate a token $generator = new Generator($signer); $jwt = $generator->generate(['id' => 666, 'is-admin' => true]); // Parse the token $parser = new Parser($signer); $claims = $parser->parse($jwt); print_r($claims); // ['id' => 666, 'is-admin' => true]2 như ví dụ sau hiển thị Quy tắc use MiladRahimi\Jwt\Generator; use MiladRahimi\Jwt\Parser; use MiladRahimi\Jwt\Cryptography\Algorithms\Hmac\HS256; // Use HS256 to generate and parse tokens $signer = new HS256('12345678901234567890123456789012'); // Generate a token $generator = new Generator($signer); $jwt = $generator->generate(['id' => 666, 'is-admin' => true]); // Parse the token $parser = new Parser($signer); $claims = $parser->parse($jwt); print_r($claims); // ['id' => 666, 'is-admin' => true]3 sẽ kiểm tra xem yêu cầu đã cho có phải là số chẵn hay không