2012-02-13 15 views
6

Cách tốt nhất để thực hiện xác thực OAuth Twitter một cách an toàn trong JavaScript là gì?Xác thực OAuth an toàn trên Twitter trong JavaScript/jQuery (cộng với trợ giúp bên máy chủ)

Tôi đang cố gắng viết chương trình để cho phép người dùng phân tích mức sử dụng Twitter và người theo dõi/bạn bè của mình. Tôi đã viết một phiên bản phía máy chủ hoạt động bằng cách sử dụng mô-đun tweepy python.

Tôi muốn chia sẻ nó với mọi người, nhưng tôi muốn nó chạy trong trình duyệt để có thể mở rộng so với chạy trên máy chủ nhỏ của tôi.

tôi thấy một câu hỏi khác nơi Kết quả cuối cùng là nó không được khuyến khích và không an toàn: JavaScript OAuth sign in with Twitter

nào có ý nghĩa nếu một được gửi cho người tiêu dùng (ứng dụng) bí mật hoặc truy cập (user) bí mật trong JavaScript của ứng dụng.

Nhưng tại sao tôi không thể xây dựng các URL trên phía máy chủ như ở đây - http://djangosnippets.org/snippets/1353/

Sau đó gửi URL xác thực lại cho trình duyệt, một cái gì đó như thế này từ công cụ OAuth trên trang ứng dụng của tôi Twitter (không chứng chỉ hợp lệ)

GET & https% 3A% 2F% 2Fapi.twitter.com% 2F1% 2F & lấy% 252Faccount% 252Fverify_credentials_json% 3D% 26oauth_consumer_key% GD0bgcgMU4MDwNfKQpLFQS3% 26oauth_nonce% 3D24ad5049501dee1292afd8cf22307d68% 26oauth_signature_method% 3DHMAC-SHA1% 26oauth_timestamp% 3D1329173626 % 26oauth_token% uPUpxsBc3D283768289LtQ6R1E z1KeD8DOSsm5XpqJaKI28ysYh% 26oauth_version% 3D1.0

Sau đó, sử dụng jQuery để xác thực bằng thông tin đăng nhập của người dùng và chạy phân tích.

Đó là một phần quan trọng của công việc, tôi ghét phải làm điều đó và sau đó tìm ra nó không hoạt động hoặc là một cách tiếp cận không an toàn. (hoặc nó đã được thực hiện)

Điều đó có an toàn không? Nó dường như không để lộ bất kỳ bí mật nào.

Điều đó có hiệu quả không?

Bất kỳ con trỏ/ví dụ nào về đúng cách để thực hiện xác thực cho jQuery noob, với tiêu đề Cấp quyền: và ủy quyền cookie/chuyển hướng cần thiết?

Tôi cảm thấy như tôi đang thiếu một cái gì đó và có một lý do điều này sẽ không hoạt động, hoặc nó phải đã tồn tại ở đâu đó, nhưng đã không tìm thấy nó. Cảm ơn nhiều!

Trả lời

3

Vấn đề Mr. McNuts, là oAuth yêu cầu bạn chuyển vào bí mật người tiêu dùng, vì vậy ngay cả khi bạn tạo URL trên máy chủ, bạn vẫn sẽ chuyển nó trở lại trang web, vẫn sẽ hiển thị bí mật của người tiêu dùng thông qua Proxy HTTP.

Để tránh tiết lộ bí mật của bạn, bạn sẽ cần sử dụng proxy để thực hiện yêu cầu xác thực twitter và trả lại mã thông báo oauth về trình duyệt. Nếu bạn thực sự lo lắng về quy mô, tôi sẽ xem xét một giải pháp trả tiền cho quy mô như GAE hoặc Heroku.

+0

Tôi nghĩ điểm tách chìa khóa người tiêu dùng và bí mật của người tiêu dùng là bạn có thể phơi chìa khóa, và không ai có thể làm bất cứ điều gì mà không có bí mật. Người nào đó có thể làm gì chỉ với khóa người tiêu dùng, nếu họ không có bí mật của người tiêu dùng? –

+0

Vâng, bạn nói đúng. Những gì bạn đang đề xuất cơ bản là để có dấu hiệu máy chủ của bạn bằng cách sử dụng bí mật của người tiêu dùng của bạn, sau đó vượt qua đó trở lại cho khách hàng. Bạn có thể làm điều đó, nhưng nó không phải bất kỳ khả năng mở rộng hơn là chỉ có máy chủ của bạn thực hiện yêu cầu thay mặt cho người dùng. – Alan

+0

Có, về cơ bản tôi muốn proxy xác thực, và sau đó có trình duyệt thực hiện một loạt các cuộc gọi API. Nó sẽ có vài trăm cuộc gọi, ngay đến giới hạn điều chỉnh. Ngoài ra, họ sẽ mất nhiều thời gian và liên kết tài nguyên trong khi họ đang chạy. Vì vậy, tôi thực sự không muốn làm điều đó trên máy chủ, sẽ được đơn đặt hàng của cường độ tải nhiều hơn. Muốn trả lại một URL hoặc mã thông báo cho trình duyệt, và sau đó sử dụng nó để thực hiện các cuộc gọi API với jQuery hoặc JavaScript thuần túy. –

0

Tôi không hiểu rõ cách tiếp cận bạn đang đề xuất. Nhưng nói chung, OAuth không thể được thực hiện một cách an toàn trên một phía máy khách trình duyệt (ngoại trừ các môi trường đóng bảo mật như Java hoặc Flash). Việc thực hiện quy trình OAuth trên Javascript là hoàn toàn có thể nhưng bạn sẽ tiết lộ mã thông báo bí mật/người tiêu dùng của mình. Vì vậy, bất cứ ai sẽ có thể thay thế ứng dụng của bạn xác định với ý định tinh nghịch như ăn cắp dữ liệu nhạy cảm của người dùng của bạn. Nếu bạn vẫn muốn làm việc với JS, tôi khuyên bạn nên triển khai quy trình bảo mật (xác thực và lưu trữ mã thông báo cuối cùng) ở phía máy chủ bằng cách sử dụng Node.js

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