2015-12-26 25 views
7

Tôi đang cố gắng hiểu cách tôi có thể phù hợp với định tuyến JWT tùy chỉnh thành mô hình bảo mật loopbacks. Ứng dụng của tôi có "khiêu vũ" xác thực liên quan đến SMS dẫn đến mã thông báo JWT hợp lệ bằng cách sử dụng excellent description. Tôi đang sử dụng jsonwebtoken và mọi thứ hoạt động như mong đợi. Sau khi nhận được mã thông báo, máy khách angular.js của tôi gửi mã thông báo với mỗi yêu cầu trong tiêu đề Authorisation: JWT ..token.. (tài liệu xung đột được tìm thấy, một tài liệu JWT, một Bearer, nhưng tôi có thể hiểu điều đó).Sử dụng JWT để xác thực vòng lặp

Bây giờ tôi muốn sử dụng mã thông báo bên trong ứng dụng lặp lại. Tôi muốn sử dụng vòng lặp hệ thống ACL cung cấp. Tôi đã đọc các nguồn sau:

Và tôi không rõ các bước tiếp theo của mình là gì. Tôi đã làm việc:

  • tài 'đăng nhập' - tạo ra một JWT
  • tài khoản đăng nhập bằng tên người dùng/mật khẩu (để được nghỉ hưu)
  • Working ACL thực hiện trong loopback (khi tôi truy cập vào một ACL bảo vệ tài nguyên tôi nhận được ?, như mong đợi một lỗi 4xx)
  • My JWT thẻ đúng cách() trong tiêu đề của yêu cầu

tôi cần:

  • dựa trên JWT mã thông báo người dùng hợp lệ với vai trò tương thích với loopback ACL

Trợ giúp được rất nhiều đánh giá cao

+0

Bạn đã bao giờ con số này ra? – denislexic

+1

Thx để nhắc tôi. Vâng tôi đã làm. Trả lời dưới đây – stwissel

Trả lời

3

Giải pháp hóa ra là đơn giản hơn nhiều mà tôi mặc dù nó sẽ là. Đối với người mới bắt đầu, loopback sử dụng các webtokens jwt của riêng nó để giữ một phiên người dùng (không trạng thái). Sau khi thiết lập danh tính (trong trường hợp của tôi trích xuất số điện thoại di động từ mã thông báo JWT của tôi), tôi chỉ cần tra cứu thành viên và tạo ra mã thông báo JWT gốc loopback. Định nghĩa endpoint của tôi là thế này:

Member.remoteMethod(
    'provideSMSToken', { 
     accepts: [{ 
     arg: 'mobilenumber', 
     type: 'string', 
     description: 'Phone number including +65 and no spaces' 
     }, { 
     arg: 'token', 
     type: 'string', 
     description: 'the token received through SMS' 
     }], 
     returns: { 
     arg: 'token', 
     type: 'string' 
     }, 
     description: 'provide SMS token to confirm login', 
     http: { 
     path: '/smsauthenticate', 
     verb: 'post' 
     }, 
     isStatic: true 
    } 

); 

provideSMSToken chức năng như thế:

// Exchange the SMS Token with a login token 
    Member.provideSMSToken = function(mobilenumber, token, cb) { 
    var app = Member.app; 
    // CHeck if the token does exist for the given phone number 
    // if yes, check for the respective memeber 

    if (!app.smsVerificationToken || !app.smsVerificationToken[mobilenumber] || app.smsVerificationToken[mobilenumber] !== token) { 
     var wrongToken = new Error("Wrong or missing token"); 
     cb(wrongToken, "Wrong or missing token"); 
    } else { 
     var timetolive = 86400; 
     Member.lookupByPhone(mobilenumber, function(err, theOne) { 
     if (err) { 
      cb(err, "Sorry, no such member here!"); 
     } else { 
      // We can provide a token now for authentication 
      // using the default createAccessToken method 
      theOne.createAccessToken(timetolive, function(err, accesstoken) { 
      cb(err, accesstoken); 
      }) 
     } 
     }); 
    } 
    } 

trình như một say mê

+0

Tôi đang sử dụng loopback nhưng nó không sử dụng JWT và tôi đã tìm cách để thực hiện chúng. Bạn có phải cấu hình một cái gì đó hoặc nó sử dụng JWT ra khỏi hộp? – fmtoffolo

+0

Mã thông báo xác thực vòng lặp là JWT. – stwissel

+0

Vòng lặp hoặc cổng? Bởi vì db của tôi là lưu trữ thẻ và họ không có cấu trúc jwt bình thường. – fmtoffolo

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