Làm cách nào để xác thực mã thông báo truy cập trong PHP?

Mã thông báo truy cập JWT cung cấp một cách để tạo và xác thực mã thông báo truy cập mà không yêu cầu bộ lưu trữ trung tâm như cơ sở dữ liệu. Điều này làm giảm độ trễ của dịch vụ OAuth2 khi xác thực Mã thông báo truy cập

Mã thông báo truy cập JWT sử dụng Chữ ký web JSON (Chương 6. 2) và Mật mã khóa công khai để thiết lập tính hợp lệ của chúng. OAuth2. 0 Máy chủ ký mã thông báo bằng cách sử dụng

{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}
1 và các bên khác có thể xác minh mã thông báo bằng cách sử dụng
{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}
2 của Máy chủ

Sự sắp xếp

Mã thông báo truy cập JWT có định dạng sau

{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}
0 là URL Base64 Mã hóa an toàn của JSON sau

{"typ": "JWT", "alg":"RS256"}

{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}
1 là URL Base64 Mã hóa an toàn của đối tượng json với các trường sau

{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}

  • {
      "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "iss": "issuer_id",
      "aud": "client_id",
      "sub": "user_id",
      "exp": 1483711650,
      "iat": 1483708050,
      "token_type": "bearer",
      "scope": "onescope twoscope"
    }
    2 - id nội bộ của mã thông báo
  • {
      "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "iss": "issuer_id",
      "aud": "client_id",
      "sub": "user_id",
      "exp": 1483711650,
      "iat": 1483708050,
      "token_type": "bearer",
      "scope": "onescope twoscope"
    }
    3 - mã định danh mã thông báo duy nhất cho mã thông báo (JWT ID)
  • {
      "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "iss": "issuer_id",
      "aud": "client_id",
      "sub": "user_id",
      "exp": 1483711650,
      "iat": 1483708050,
      "token_type": "bearer",
      "scope": "onescope twoscope"
    }
    4 - id của máy chủ đã phát hành mã thông báo (Nhà phát hành)
  • {
      "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "iss": "issuer_id",
      "aud": "client_id",
      "sub": "user_id",
      "exp": 1483711650,
      "iat": 1483708050,
      "token_type": "bearer",
      "scope": "onescope twoscope"
    }
    5 - id của khách hàng đã yêu cầu mã thông báo (Đối tượng)
  • {
      "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "iss": "issuer_id",
      "aud": "client_id",
      "sub": "user_id",
      "exp": 1483711650,
      "iat": 1483708050,
      "token_type": "bearer",
      "scope": "onescope twoscope"
    }
    6 - id của người dùng mà mã thông báo đã được phát hành (Chủ đề)
  • {
      "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "iss": "issuer_id",
      "aud": "client_id",
      "sub": "user_id",
      "exp": 1483711650,
      "iat": 1483708050,
      "token_type": "bearer",
      "scope": "onescope twoscope"
    }
    7 - Dấu thời gian UNIX khi mã thông báo hết hạn (Hết hạn)
  • {
      "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "iss": "issuer_id",
      "aud": "client_id",
      "sub": "user_id",
      "exp": 1483711650,
      "iat": 1483708050,
      "token_type": "bearer",
      "scope": "onescope twoscope"
    }
    8 - Dấu thời gian UNIX khi mã thông báo được tạo (Phát hành lúc)
  • {
      "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
      "iss": "issuer_id",
      "aud": "client_id",
      "sub": "user_id",
      "exp": 1483711650,
      "iat": 1483708050,
      "token_type": "bearer",
      "scope": "onescope twoscope"
    }
    9 - loại token, sẽ là vật mang
  • {"typ": "JWT", "alg":"RS256"}
    20 - danh sách các phạm vi được phân tách bằng dấu cách để phát hành mã thông báo

Sử dụng mã thông báo truy cập JWT với thư viện này

Tạo cặp khóa công khai và riêng tư

Để bắt đầu, bạn sẽ cần một cặp khóa công khai/riêng tư. Chúng có thể được tạo trên bất kỳ hệ điều hành dựa trên Unix nào bằng các lệnh sau

{"typ": "JWT", "alg":"RS256"}
2

Sử dụng cơ bản

Cách dễ nhất để định cấu hình máy chủ của bạn là cung cấp tùy chọn

{"typ": "JWT", "alg":"RS256"}
21 cho cấu hình Máy chủ OAuth của bạn

{"typ": "JWT", "alg":"RS256"}
5

Điều này sẽ yêu cầu bạn tạo một đối tượng lưu trữ

{"typ": "JWT", "alg":"RS256"}
22. Bạn có thể sử dụng bộ lưu trữ
{"typ": "JWT", "alg":"RS256"}
23 tích hợp cho việc này

Đây là cấu hình tối thiểu khi sử dụng Mã thông báo truy cập JWT và sẽ chỉ hợp lệ cho

{"typ": "JWT", "alg":"RS256"}
24. Đối với cấu hình máy chủ đầy đủ, bạn phải cung cấp bộ lưu trữ
{"typ": "JWT", "alg":"RS256"}
25 và một số Loại tài trợ

Dưới đây là một ví dụ về cấu hình máy chủ đầy đủ

Bây giờ bạn có thể gọi máy chủ của mình và nhận Mã thông báo truy cập JWT

{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}
0

Và máy chủ sẽ trả về phản hồi có chứa Mã thông báo truy cập JWT

{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}
1

Cấu hình máy chủ tài nguyên

Nếu Máy chủ tài nguyên của bạn tách biệt với máy chủ Ủy quyền, bạn có thể định cấu hình máy chủ của mình mà không cần khóa riêng của Máy chủ ủy quyền

Điều này cho phép máy chủ của bạn xác minh mã thông báo truy cập mà không cần thực hiện bất kỳ yêu cầu nào đối với Máy chủ ủy quyền hoặc bất kỳ tài nguyên được chia sẻ nào khác

Bây giờ bạn có thể yêu cầu điều này và thử nghiệm gửi mã thông báo bạn đã tạo ở trên

{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}
2

Sử dụng bộ nhớ thứ cấp

Thư viện này cho phép bạn sao lưu mã thông báo truy cập vào bộ nhớ thứ cấp. Chỉ cần chuyển một đối tượng đang triển khai

{"typ": "JWT", "alg":"RS256"}
26 sang đối tượng
{"typ": "JWT", "alg":"RS256"}
27 để lưu trữ mã thông báo truy cập ở một vị trí bổ sung

Ví dụ này lấy khóa công khai/riêng tư từ bộ lưu trữ

{"typ": "JWT", "alg":"RS256"}
23 và lưu mã thông báo truy cập được cấp vào bộ nhớ
{"typ": "JWT", "alg":"RS256"}
29 sau khi chúng được ký

Khóa mã hóa dành riêng cho khách hàng

Bạn nên tạo các khóa Dành riêng cho khách hàng. Theo cách đó, nếu một cặp khóa bị xâm phạm, chỉ một máy khách bị ảnh hưởng. Cả

{"typ": "JWT", "alg":"RS256"}
23 và
{"typ": "JWT", "alg":"RS256"}
29 đều hỗ trợ loại lưu trữ này. Đây là một ví dụ sử dụng bộ lưu trữ
{"typ": "JWT", "alg":"RS256"}
23

Đối với

{"typ": "JWT", "alg":"RS256"}
29, hãy chạy truy vấn sau

Chèn dữ liệu mẫu bằng cách sử dụng một cái gì đó như thế này

Và khởi tạo đối tượng Lưu trữ PDO

{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}
1

Định cấu hình một thuật toán khác

Các thuật toán sau được hỗ trợ cho JwtAccessTokens

  • “HS256” - sử dụng
    {"typ": "JWT", "alg":"RS256"}
    54 / sha256
  • “HS384” - sử dụng
    {"typ": "JWT", "alg":"RS256"}
    54 / sha384
  • “HS512” - sử dụng
    {"typ": "JWT", "alg":"RS256"}
    54 / sha512
  • “RS256” - sử dụng
    {"typ": "JWT", "alg":"RS256"}
    57 / sha256
  • “RS384” - sử dụng
    {"typ": "JWT", "alg":"RS256"}
    57 / sha384
  • “RS512” - sử dụng
    {"typ": "JWT", "alg":"RS256"}
    57 / sha512

Định cấu hình cái này trong phiên bản

{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}
00 của bạn. Khi sử dụng bộ lưu trữ
{"typ": "JWT", "alg":"RS256"}
23, nó sẽ như thế này

Chữ ký có thể được xác minh bằng bất kỳ ngôn ngữ lập trình nào. Sử dụng các phương pháp mã hóa

{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}
02 tiêu chuẩn để xác thực chữ ký mã thông báo truy cập. Đây là một ví dụ về điều này trong PHP

Làm cách nào để xác thực mã thông báo mang trong PHP?

Xác thực mã thông báo mang được thực hiện bằng cách gửi mã thông báo bảo mật với mọi yêu cầu HTTP mà chúng tôi thực hiện tới máy chủ . Bạn có thể thực hiện xác thực vật mang với bất kỳ ngôn ngữ lập trình nào, kể cả PHP. Mã thông báo mang là một chuỗi mật mã không có ý nghĩa hoặc mục đích sử dụng nhưng trở nên quan trọng trong một hệ thống mã thông báo phù hợp.

Làm cách nào để sử dụng xác thực mã thông báo trong PHP?

1 câu trả lời .
Người dùng cung cấp tên người dùng và mật khẩu trong biểu mẫu đăng nhập và nhấp vào Đăng nhập
Sau khi yêu cầu được thực hiện, hãy xác thực người dùng trên phần phụ trợ bằng cách truy vấn trong cơ sở dữ liệu. .
Cung cấp thông tin mã thông báo trong mọi tiêu đề yêu cầu để truy cập các điểm cuối bị hạn chế trong ứng dụng

Tính hợp lệ của mã thông báo truy cập là gì?

Theo mặc định, mã thông báo truy cập có hiệu lực trong 60 ngày và mã thông báo làm mới có lập trình có hiệu lực trong một năm.

Tôi có nên xác thực mã thông báo truy cập không?

Mã thông báo truy cập dành cho API và chỉ được xác thực bởi API dành cho mã thông báo đó . Mã thông báo truy cập Nhà cung cấp danh tính (IdP) không yêu cầu xác thực. Chuyển mã thông báo truy cập IdP cho IdP phát hành để xử lý quá trình xác thực.