Nhận thông tin người dùng từ mã thông báo JWT

chúng tôi sẽ giới thiệu cách lấy thông tin người dùng từ người dùng đăng nhập trong hệ thống xác thực jwt. blog này là một loạt. nếu bạn muốn biết cách cài đặt phần mềm trung gian jwt và triển khai tính năng đăng ký, đăng nhập, hãy xem các blog trước của chúng tôi

  • cài đặt và cài đặt jwt
  • jwt. đăng ký
  • jwt. đăng nhập

Kho

chúng tôi đã tạo kho lưu trữ hệ thống xác thực jwt. nhấp vào liên kết bên dưới để xem kho lưu trữ của chúng tôi

  • laravel-jwt-bài tập. https. //github. com/dev-yakuza/laravel-jwt-bài tập

Môi trương phat triển

ở đây, chúng tôi sẽ sử dụng môi trường phát triển Laravel được tạo bởi Laradock và Ansible. nếu bạn muốn biết môi trường của chúng tôi, hãy xem blog trước của chúng tôi

  • Ansible & Laravel

Sửa đổi bộ điều khiển

mở tệp /app/Http/Controllers/JWTAuthController.php trong thư mục dự án Laravel và thêm mã bên dưới

public function user[] {
    return response[]->json[Auth::guard['api']->user[]];
}

chức năng này là nhận và phản hồi thông tin người dùng đăng nhập theo yêu cầu của khách hàng [trình duyệt]

Sửa đổi tuyến đường

sửa đổi tuyến đường để kết nối chức năng và url của bộ điều khiển. mở tệp /routes/api.php và thêm mã bên dưới

Route::get['unauthorized', function[] {
    return response[]->json[[
        'status' => 'error',
        'message' => 'Unauthorized'
    ], 401];
}]->name['api.jwt.unauthorized'];

Route::group[['middleware' => 'auth:api'], function[]{
    Route::get['user', '[email protected]']->name['api.jwt.user'];
}];

Tuyến đường user nhận thông tin người dùng sử dụng phần mềm trung gian auth:api. phần mềm trung gian này đánh giá người dùng đăng nhập hay không đăng nhập và nếu người dùng đã đăng nhập, người dùng có thể lấy thông tin người dùng. chúng tôi sẽ khiến người dùng chuyển hướng unauthorized và phản hồi 401 nếu người dùng chưa đăng nhập

chuyển hướng

Laravel

Route::get['unauthorized', function[] {
    return response[]->json[[
        'status' => 'error',
        'message' => 'Unauthorized'
    ], 401];
}]->name['api.jwt.unauthorized'];

Route::group[['middleware' => 'auth:api'], function[]{
    Route::get['user', '[email protected]']->name['api.jwt.user'];
}];
0 middleware về cơ bản có tính năng chuyển hướng. chúng tôi sẽ định cấu hình chuyển hướng cho
Route::get['unauthorized', function[] {
    return response[]->json[[
        'status' => 'error',
        'message' => 'Unauthorized'
    ], 401];
}]->name['api.jwt.unauthorized'];

Route::group[['middleware' => 'auth:api'], function[]{
    Route::get['user', '[email protected]']->name['api.jwt.user'];
}];
1 và đặt phản hồi 401. mở tệp
Route::get['unauthorized', function[] {
    return response[]->json[[
        'status' => 'error',
        'message' => 'Unauthorized'
    ], 401];
}]->name['api.jwt.unauthorized'];

Route::group[['middleware' => 'auth:api'], function[]{
    Route::get['user', '[email protected]']->name['api.jwt.user'];
}];
3 và sửa đổi nó như bên dưới

protected function redirectTo[$request]
{
    if [! $request->expectsJson[]] {
        if [$request->is['api/*']] {
            return route['api.jwt.unauthorized'];
        }
        return route['login'];
    }
}

Bài kiểm tra

hãy kiểm tra tính năng thông tin người dùng thông qua

Route::get['unauthorized', function[] {
    return response[]->json[[
        'status' => 'error',
        'message' => 'Unauthorized'
    ], 401];
}]->name['api.jwt.unauthorized'];

Route::group[['middleware' => 'auth:api'], function[]{
    Route::get['user', '[email protected]']->name['api.jwt.user'];
}];
4

# URL
localhost/api/user
# header
Authorization
Bearer jwt_token

nếu mã thông báo jwt hợp lệ, bạn có thể lấy thông tin người dùng như màn hình bên dưới

nếu mã thông báo jwt hết hạn hoặc người dùng không đăng nhập yêu cầu thông tin người dùng, bạn có thể nhận được phản hồi lỗi 401

Hoàn thành

chúng tôi đã hoàn thành việc phát triển api có tính năng thông tin người dùng trong hệ thống xác thực jwt. ở bài đăng blog tiếp theo, chúng tôi sẽ giới thiệu cách tạo tính năng làm mới mã thông báo jwt sau khi đăng nhập

Làm cách nào để lấy ID người dùng từ mã thông báo JWT trong Java?

Giá trị userId sẽ được lưu trữ dưới khóa “phụ” trong mã thông báo truy cập JWT do Keycloak tạo. Dưới đây là ví dụ về mã thông báo truy cập JWT đã giải mã có chứa khóa “phụ”. Khóa “phụ” là viết tắt của “chủ đề” và sẽ chứa giá trị của userId chính hiện được xác thực

Mã thông báo JWT có chứa tên người dùng không?

Không, JWT không chứa thông tin xác thực .

Mã thông báo JWT chứa thông tin gì?

Cấu tạo của JWT . tiêu đề, tải trọng và chữ ký . Tiêu đề thường bao gồm hai phần. loại mã thông báo JWT và thuật toán được sử dụng, chẳng hạn như HMAC SHA256 hoặc RSA SHA256. Nó được mã hóa Base64Url để tạo thành phần đầu tiên của JWT.

Tôi có thể giải mã mã thông báo JWT không?

Theo thiết kế, bất kỳ ai cũng có thể giải mã JWT và đọc nội dung của phần tiêu đề và phần tải trọng. Nhưng chúng tôi cần quyền truy cập vào khóa bí mật được sử dụng để tạo chữ ký nhằm xác minh tính toàn vẹn của mã thông báo.

Chủ Đề