Cách tạo mã thông báo trong PHP

Hầu hết các ứng dụng chỉ cần một mã thông báo hoặc mã thông báo cho mỗi người dùng trong một danh sách người dùng tĩnh nhỏ. Đối với các ứng dụng này, vui lòng sử dụng Công cụ tạo mã thông báo để tạo tất cả các mã thông báo của bạn. Bạn không cần sử dụng quy trình AuthNAuth

Một vài ứng dụng có danh sách người dùng lớn hoặc danh sách người dùng động. Các ứng dụng này sẽ cần nhận mã thông báo thường xuyên. Đính kèm là một tệp PHP mẫu nhỏ cho biết cách nhận mã thông báo người dùng theo chương trình. Nếu bạn cần mã định danh người dùng cho cơ sở dữ liệu của mình, vui lòng sử dụng

Mã thông báo web JSON [JWT] đã trở thành tiêu chuẩn thực tế để xác thực trạng thái không trạng thái của ứng dụng dành cho thiết bị di động, ứng dụng web một trang và giao tiếp giữa máy với máy. Chúng hầu như đã 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 phiên phía máy chủ - JWT có thể chứa tất cả thông tin cần thiết về người dùng và thông tin được bảo vệ chống sửa đổi
  • Chúng 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 JWT, đ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 chứa bên trong và người dùng có thể đọc được. Bạn không nên lưu trữ bất kỳ thông tin nhạy cảm nào bên trong JWT

Có một số lượng lớn thư viện được thiết kế để giúp bạn làm việc với JWT trong ứng dụng của mình. 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 giữa các máy trong Okta và sử dụng Luồng thông tin xác thực ứng dụng khách để nhận 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, Composer và

openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
8 công cụ dòng lệnh

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, đồng thời 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 tất, 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 khách là công khai hay riêng tư và liệu có người dùng tham gia hay chỉ giao tiếp giữa máy với máy. Luồng thông tin xác thực ứng dụng khách mà bạn sẽ triển khai phù hợp nhất cho giao tiếp giữa các máy trong đó ứng dụng khách ở chế độ riêng tư [và có thể được tin cậy để giữ bí mật]

JWT là gì?

JWT là các chuỗi được mã hóa base64. Chúng độc lập và được ký bằng mật mã, có nghĩa là nội dung của chúng có thể được kiểm tra và xác minh. JWT có thể được ký 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 ý thay đổi nội dung mã thông báo, JWT sẽ không xác minh được

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

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

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à 'yêu cầu' của JWT]. Chữ ký được máy chủ xác thực tính toán bằng khóa bí mật chung hoặc khóa riêng

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

Sử dụng JWT với OAuth 2. 0 và OpenID Kết nối 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 về 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 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ở để ủ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 với nhau, chúng 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] trong các ứng dụng web/di động và máy chủ

OAuth 2. 0 không nhất thiết phải là JWT, nhưng nhiều triển khai [bao gồm cả Okta] sử dụng JWT vì các thuộc tính mong muốn của chúng

Mặt khác, mã thông báo OpenID Connect [OIDC] luôn là JWT. Okta sử dụng phương thức ký cặp khóa công khai/riêng tư. Mã thông báo ID được ký bằng Khóa web JSON riêng [JWK], thông số kỹ thuật mà bạn có thể tìm thấy tại đây. Khóa Web JSON [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 có thể xác minh mã thông báo Okta [ngoài ra, 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 yêu cầu một chuyến đi khứ hồi bổ sung đến máy chủ ủy quyền]

Mã thông báo ID OIDC bao gồm các yêu cầu phổ biến sau

  • Yêu cầu của
    /vendor/
    .env
    mykey.pem
    mykey.pub
    
    0 [nhà phát hành] khớp với mã định danh của Máy chủ ủy quyền Okta của bạn
  • Yêu cầu của
    /vendor/
    .env
    mykey.pem
    mykey.pub
    
    1 [đối tượng] phải khớp với ID khách hàng được sử dụng để yêu cầu Mã thông báo ID
  • Yêu cầu
    /vendor/
    .env
    mykey.pem
    mykey.pub
    
    2 [được phát hành tại thời điểm] cho biết thời điểm mã thông báo ID này được phát hành
  • Yêu cầu
    /vendor/
    .env
    mykey.pem
    mykey.pub
    
    3 [thời gian hết hạn] là thời điểm mà mã thông báo này sẽ hết hạn
  • Giá trị yêu cầu
    /vendor/
    .env
    mykey.pem
    mykey.pub
    
    4 phải khớp với bất kỳ giá trị nào được thông qua khi yêu cầu mã thông báo ID

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

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

/vendor/
.env
mykey.pem
mykey.pub
5 để tạo và xác minh JWT của riêng mình. Tôi cũng sẽ chỉ cho bạn cách sử dụng giải mã base64 để đọc các tuyên bố của JWT và chứng minh rằng nó được mã hóa đơn giản chứ không phải 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

/vendor/
.env
mykey.pem
mykey.pub
5

composer require firebase/php-jwt

Tiếp theo, 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 JWT của mình

Tạo một tệp

/vendor/
.env
mykey.pem
mykey.pub
7 trong thư mục với các nội dung sau để các tệp chính và tệp
/vendor/
.env
mykey.pem
mykey.pub
8 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 một tệp

/vendor/
.env
mykey.pem
mykey.pub
9 để tải các thư viện của nhà cung cấp

Chủ Đề