Hướng dẫn php generate token for authentication - php tạo mã thông báo để xác thực

Làm việc với OAuth & NBSP; và các giao thức xác thực tương tự & NBSP; yêu cầu sử dụng các mã thông báo tạm thời đại diện cho những cái bắt tay duy nhất giữa nhiều dịch vụ web. & nbsp; những mã thông báo này phải là duy nhất, được lưu trữ an toàn và càng lâu thì càng tốt.

Vì tôi đã rời khỏi trò chơi PHP trong một thời gian, tôi đã nghiên cứu cách tạo các mã thông báo như vậy mà không cần thêm thư viện. & nbsp; đoạn trích sau đây thực hiện thủ thuật:

// bin2hex[random_bytes[$length]]
$token = bin2hex[random_bytes[64]];

/*
  Examples:

  39e9289a5b8328ecc4286da11076748716c41ec7fb94839a689f7dac5cdf5ba8bdc9a9acdc95b95245f80a00d58c9575c203ceb541507cce40dd5a96e9399f4a
  1c46538c712e9b5bf0fe43d692147004f617b494d004e29daaf33e4528f253db5d911a690856f0b77cfa98103c8231bffff869f179125d17d28e52bfadb9f205
  ...
*/

Nếu bạn không sử dụng PHP7 trở lên, bạn có thể dự phòng sau:

$token = bin2hex[openssl_random_pseudo_bytes[64]];

Có sự ủng hộ của OpenSSL cho Token Generation & NBSP; mang lại sự tự tin rằng mã thông báo sẽ là duy nhất. & nbsp; Tất nhiên bạn cũng có thể thực hiện lưu trữ & nbsp; kiểm tra để đảm bảo mã thông báo không được sử dụng, nhưng nếu bạn sử dụng A & nbsp; chiều dài từ 64 hoặc lớn hơn, thì khả năng bạn lặp lại mã thông báo rất mỏng!

Các tính năng gần đây

  • Thiết kế cho & NBSP; Đơn giản

    Trước khi chúng tôi bắt đầu, tôi đáng để tôi dành một khoảnh khắc ngắn để giới thiệu bản thân với bạn. Tên tôi là Mark [hoặc @Integralist nếu Twitter tình cờ là công cụ giao tiếp của bạn] và tôi hiện đang làm việc cho BBC News ở London Anh với tư cách là kỹ sư/công nghệ chính ...

Mã thông báo JSON Web [JWTS] đã biến thành tiêu chuẩn de-facto để xác thực không trạng thái ứng dụng di động, ứng dụng web một trang và giao tiếp với máy. Họ hầu hết đã thay thế phương thức xác thực truyền thống [phiên phía máy chủ] vì một số lợi ích chính:

  • Chúng được phân cấp và di động [bạn có thể yêu cầu mã thông báo từ một dịch vụ chuyên dụng, sau đó sử dụng nó với nhiều phụ trợ]
  • Không cần các phiên phía máy chủ - JWT có thể chứa tất cả các thông tin cần thiết về người dùng và thông tin được bảo vệ chống lại sửa đổi
  • Họ hoạt động tốt và có thể mở rộng quy mô dễ dàng

Trước khi bạn bắt đầu làm việc với JWTS, điều quan trọng là phải hiểu rằng JWT được mã hóa và không được mã hóa - chúng không ẩn dữ liệu có bên trong và người dùng có thể đọc nó. Bạn không nên lưu trữ bất kỳ thông tin nhạy cảm bên trong JWT.

Có một số lượng lớn các thư viện được thiết kế để giúp bạn làm việc với JWT trong ứng dụng của bạn. Trong bài viết này, trước tiên tôi sẽ hướng dẫn bạn xây dựng và xác minh JWT của riêng bạn bằng gói Firebase/PHP-JWT. Sau đó, tôi sẽ chỉ cho bạn cách tạo ứng dụng máy từ máy ở OKTA và sử dụng luồng thông tin đăng nhập của máy khách để có mã thông báo truy cập JWT từ máy chủ Okta của bạn.

Các yêu cầu để hoàn thành các ví dụ là: Tài khoản OKTA [miễn phí], PHP, nhà soạn nhạc và các công cụ dòng lệnh

composer require firebase/php-jwt
0.

Tại sao okta?

Okta là một dịch vụ API cho phép bạn tạo, chỉnh sửa và lưu trữ an toàn tài khoản người dùng và dữ liệu tài khoản người dùng và kết nối chúng với một hoặc nhiều ứng dụng. Đăng ký tài khoản nhà phát triển miễn phí mãi mãi và khi bạn hoàn thành, hãy quay lại để tìm hiểu thêm về xác thực mã thông báo trong PHP.

Có các luồng xác thực khác nhau trong OKTA, tùy thuộc vào việc ứng dụng máy khách là công khai hay riêng tư và nếu có người dùng liên quan hay giao tiếp chỉ là máy từ máy. Lưu lượng thông tin đăng nhập của khách hàng mà bạn sẽ thực hiện phù hợp nhất cho giao tiếp với máy đến máy nơi ứng dụng khách là riêng tư [và có thể tin tưởng để giữ bí mật].

JWT là gì?

JWT là chuỗi được mã hóa cơ sở64. Chúng khép kín và có chữ ký mật mã, điều đó có nghĩa là nội dung của chúng có thể được kiểm tra và xác minh. JWTS có thể được ký kết bằng cách sử dụng bí mật chung [với thuật toán HMAC] hoặc cặp khóa công khai/riêng tư bằng RSA hoặc ECDSA. Nếu người dùng độc hại thay đổi nội dung mã thông báo, JWT sẽ không xác minh.

Định dạng của JWT là:

composer require firebase/php-jwt
1

Thành phần tiêu đề chứa thông tin về phương thức ký. Thành phần tải trọng là thông tin về người dùng [còn được gọi là ‘khiếu nại của JWT]. Chữ ký được tính toán bởi máy chủ xác thực bằng cách sử dụng bí mật được chia sẻ hoặc khóa riêng.

Nếu bạn muốn tìm hiểu thêm về cách sử dụng JWTs một cách an toàn và cách xây dựng và xác minh chúng từ đầu trong PHP [mà không cần sử dụng bất kỳ thư viện bên ngoài nào], bạn có thể kiểm tra bài viết trước của tôi tạo và xác minh JWT trong PHP với OAuth 2.0

Sử dụng JWTS với OAuth 2.0 và OpenID Connect trong PHP

Trước khi giải thích vai trò của JWT trong OAuth 2.0 và OpenID Connect, điều quan trọng là phải làm rõ các khái niệm xác thực và ủy quyền trong bảo mật thông tin.

Xác thực có nghĩa là xác nhận rằng người dùng là người mà họ tuyên bố là. Ủy quyền có nghĩa là chứng minh rằng người dùng được xác thực có quyền làm điều gì đó trong một hệ thống.

OpenID Connect là một giao thức xác thực và OAuth 2.0 là một tiêu chuẩn mở cho ủy quyền. OpenID Connect sử dụng mã thông báo ID và OAuth 2.0 sử dụng mã thông báo truy cập. Cùng nhau, họ cung cấp một khung hoàn chỉnh để xác thực và ủy quyền cho người dùng [hoặc máy móc] trong các ứng dụng và máy chủ web/di động.

Mã thông báo OAuth 2.0 không phải là JWT, nhưng nhiều triển khai [bao gồm cả OKTA] sử dụng JWTS vì các thuộc tính mong muốn của chúng.

Các mã thông báo OpenID Connect [OIDC], luôn luôn là JWT. Okta sử dụng phương thức ký cặp khóa công khai/riêng tư. Các mã thông báo ID được ký bằng các khóa web JSON riêng [JWK], đặc điểm kỹ thuật mà bạn có thể tìm thấy ở đây: JSON Web Key [JWK]. Bạn cần truy xuất các khóa này và lưu trữ chúng trên máy chủ của mình nếu bạn muốn xác minh mã thông báo Okta [cách khác, bạn có thể yêu cầu OKTA xác minh mã thông báo cho bạn, nhưng điều này đòi hỏi thêm một chuyến đi vòng đến máy chủ ủy quyền].

Mã thông báo ID OIDC bao gồm các khiếu nại chung sau đây:

  • Yêu cầu
    composer require firebase/php-jwt
    
    2 [nhà phát hành] phù hợp với định danh của máy chủ ủy quyền Okta của bạn
  • Yêu cầu
    composer require firebase/php-jwt
    
    3 [đối tượng] sẽ khớp với ID máy khách được sử dụng để yêu cầu mã thông báo ID
  • Yêu cầu
    composer require firebase/php-jwt
    
    4 [ban hành tại thời điểm] cho biết khi nào mã thông báo ID này được phát hành
  • Yêu cầu
    composer require firebase/php-jwt
    
    5 [thời gian hết hạn] là thời gian mà mã thông báo này sẽ hết hạn
  • Giá trị yêu cầu
    composer require firebase/php-jwt
    
    6 phải khớp với bất cứ điều gì đã được thông qua khi yêu cầu mã thông báo ID

Tạo và xác minh JWTS trong PHP

Bạn sẽ sử dụng gói

composer require firebase/php-jwt
7 để tạo và xác minh JWT của riêng bạn. Tôi cũng sẽ chỉ cho bạn cách sử dụng giải mã Base64 để đọc các khiếu nại của JWT và chứng minh rằng nó chỉ đơn giản là được mã hóa và không được mã hóa [nhắc nhở: Không lưu trữ bất kỳ thông tin nhạy cảm nào trong JWT].

Bắt đầu bằng cách tạo một thư mục mới và khởi tạo nó như một dự án PHP mới với sự phụ thuộc vào

composer require firebase/php-jwt
7:

composer require firebase/php-jwt

Tiếp theo, hãy tạo một cặp khóa riêng/công khai bằng cách sử dụng OpenSSL trên dòng lệnh:

openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub

Bạn sẽ sử dụng những thứ này để ký và xác minh JWTS của bạn.

Tạo tệp

composer require firebase/php-jwt
9 trong thư mục với các nội dung sau để các tệp khóa và tệp
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
0 của bạn sẽ không được thêm vào kho lưu trữ Git:

/vendor/
.env
mykey.pem
mykey.pub

Tạo tệp

openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
1 để tải thư viện nhà cung cấp:

Bài Viết Liên Quan

Chủ Đề