2015-08-11 16 views
9

Nhóm Auth0 đã tạo một thứ gọi là "angular-jwt" có lớp jwtHelper. Điều này thành công giải mã một JWT địa phương mà không có bí mật tôi sử dụng trên máy chủ. Làm sao chuyện này lại xảy ra? Nếu chúng không an toàn, thì đâu là điểm sử dụng bí mật để ký/mã hóa chúng?Làm cách nào để giải mã JWT mà không có bí mật?

Function trên máy chủ mã hóa token (sử dụng "jsonwebtoken"):

function createToken (user) { 
    return jwt.sign(_.omit(user, 'password'), config.secret, { expiresInMinutes: 60*5 }); 
} 

Mã từ khách hàng:

angular 
    .module('sample.home', [ 
     'ui.router', 
     'angular-storage', 
     'angular-jwt' 
    ]) 
    .config(function ($stateProvider) { 
     $stateProvider 
      .state('home', { 
       url: '/', 
       controller: 'HomeCtrl', 
       templateUrl: 'modules/home/home.html', 
       data: { requiresLogin: true } 
      }) 
    }) 
    .controller('HomeCtrl', function homeController ($scope, $http, store, jwtHelper) { 

     $scope.jwt = store.get('jwt'); 
     $scope.decodedJwt = $scope.jwt && jwtHelper.decodeToken($scope.jwt); 

    }); 

Dưới đây là một liên kết đến các ví dụ đầy đủ: http://github.com/auth0/ang...

Trả lời

11

JWT sử dụng mã hóa, không mã hóa. Dữ liệu mà mã thông báo chứa không phải là bí mật, bất kỳ ai cũng có thể giải mã nó và xem. Những gì máy chủ làm, là nó dấu hiệu các mã thông báo bằng cách sử dụng một bí mật (trong trường hợp của bạn, config.secret), mà hiệu quả làm cho nó không thể sửa đổi các mã thông báo mà không biết bí mật. Do đó, chỉ có máy chủ mới có thể thay đổi nội dung của mã thông báo, nhưng bất kỳ ai cũng có thể đọc nó.

+1

Aaaah ... chúng đã được ký! Tôi đang nghĩ gì vậy?!? Cảm ơn, Yuri. –

+1

Để tham khảo, câu trả lời này chỉ áp dụng khi sử dụng các khóa đối xứng (ví dụ: HMAC-SHA256). Bạn cũng có thể sử dụng các phím bất đối xứng (ví dụ: RSA-SHA256), cho phép bạn đăng ký mã bằng khóa cá nhân và xác thực chúng bằng khóa công cộng. Cũng có thể yêu cầu mã hóa trong mã thông báo nếu chúng cần được ẩn khỏi máy khách hoặc mã hóa được mã hóa hoàn toàn bằng JWE: https://tools.ietf.org/html/draft-ietf-jose-json- web-encryption-40 –

+0

Điều này làm cho ngày của tôi ... Cảm ơn bạn – SoliQuiD

Các vấn đề liên quan