2014-10-08 43 views
11

Tôi đang cố triển khai ủy quyền đơn giản với mỏng trên serverside và angularJS ở phía máy khách. Để kiểm tra REST APi, tôi đang sử dụng một chương trình có tên là Rested for Mac, cho phép gửi các cuộc gọi còn lại.yêu cầu slimframework-> tiêu đề không đọc Ủy quyền

Tôi muốn phân phối, sau khi ủy quyền đã hoàn tất, tại mỗi thời điểm còn lại, hãy gọi mã thông báo jwt có thể được sử dụng trong vòng mỏng để ủy quyền yêu cầu cho một số đường dẫn nhất định.

Bây giờ tôi cung cấp thông qua nghỉ ngơi sau header và cơ thể:

Accept: */* 
Accept-Encoding: gzip, deflate 
Content-Type: application/json 
Authorization: jwt-test 
Accept-Language: de-de 

{ 
    "login": "TestLogin", 
    "password": "TestPassword", 
    "uuid": "dsfglj45690dfgkl456" 
} 

Và hơn là chỉ in ra toàn bộ tiêu đề:

Slim\Http\Headers Object ([data:protected] => Array ([Host] => localhost:8888 
[Content-Type] => application/json [Content-Length] => 89 [Connection] 
=> keep-alive [Accept] => */* [User-Agent] => Rested/2009 CFNetwork/673.4 
Darwin/13.4.0 (x86_64) (iMac13%2C2) [Accept-Language] => de-de [Accept-Encoding] 
=> gzip, deflate)) 

Như bạn thấy, không có ủy quyền trong mảng này .

Tôi cũng đã kiểm tra điều này bằng firefox trực tiếp, cùng một kết quả. O có thể nhìn thấy chuỗi ủy quyền trong các tiêu đề yêu cầu bằng firebug, nhưng nó không nằm trong mảng được bán phá giá tại slimframework.

Có ai có gợi ý về vấn đề của tôi không?

Cảm ơn trước và tốt bụng coi

solick

+0

Bạn đang thêm tiêu đề đăng nhập như thế nào? Nội dung bạn chia sẻ trông giống như nội dung yêu cầu, không phải là tiêu đề. Ngoài ra, như là một sang một bên, đó là một ** thực sự ** xấu ý tưởng bao giờ gửi một mật khẩu trong văn bản thuần túy, cho dù trong tiêu đề yêu cầu hoặc cách khác. –

+0

Không, tôi sẽ sử dụng jwt sau này, isßs chỉ để thử nghiệm. Tôi chỉ thêm quyền vào tiêu đề chứ không phải thêm. Như bạn có thể thấy, nếu là đối tượng tiêu đề Slim \ Http \ Headers – solick

+0

Vui lòng chia sẻ một mẫu mã cho biết cách bạn thiết lập các tiêu đề đó. Chúng tôi sẽ có thể cung cấp cho bạn một bàn tay theo cách đó. –

Trả lời

22

Vấn đề

authentication header cơ bản sẽ giống như thế này.

Authorization: Basic cm9vdDp0MDBy 

Chuỗi sau khi cơ bản được tạo bằng cách kết hợp tên người dùng và mật khẩu thành chuỗi như username:password. Chuỗi kết quả sau đó được mã hóa bằng base64.

Bạn đang gửi tiêu đề tới máy chủ web mà PHP sẽ không phân tích cú pháp. Không chắc chắn nếu điều này được coi là lỗi hoặc một tính năng.

Authorization: jwt-test 

Giải pháp

Với phiên bản hiện tại của Slim nếu bạn thêm dòng sau vào .htaccess file.

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 

Sau đó, bạn có thể truy cập vào tiêu đề không chuẩn với bất kỳ tiêu đề nào trong số này.

var_dump($_SERVER["HTTP_AUTHORIZATION"]); 
var_dump(apache_request_headers()["Authorization"]); 
var_dump($app->request->headers("Authorization")); 

Nó cho kết quả sau:

string 'jwt-test' (length=8) 
string 'jwt-test' (length=8) 
string 'jwt-test' (length=8) 

Bạn cũng có thể sử dụng một số tên tiêu đề khác như X-Authorization.

+0

Xin chào Mika, cảm ơn những lời giải thích. Theo tôi hiểu bạn, Apache mong đợi một định dạng đặc biệt cho giá trị ủy quyền được chấp nhận? Bạn có thể chia sẻ một số liên kết nơi điều này được xác định? Tôi đã thử trong ứng dụng angularJS của mình với config.headers.Authorization = 'Bearer' + $ window.sessionStorage.tokenUUID; Nhưng tôi vẫn không thể nhìn thấy trường ủy quyền khi tôi đổ đối tượng tiêu đề. – solick

+0

Cập nhật câu trả lời với cách giải quyết tốt hơn. –

+0

Cảm ơn Mika. Thật không may tôi đã phải dừng lại vì một dự án khác. Tôi hy vọng tôi sẽ có thể quay trở lại dự án này vào tuần tới và thử ti thực hiện giải pháp của bạn. – solick

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