2012-02-23 35 views
6

Tôi phải thừa nhận rằng tôi khá mới với chủ đề này, đặc biệt là mới để erlang. Hiện nay, tôi đang cố gắng để chơi xung quanh với các trình xử lý xác thực khác nhau - mục tiêu là để có một "xác thực ủy nhiệm" làm việc trên facebook, twitter và như vậy.couchdb handler xác thực tùy chỉnh

  1. Theo tôi hiểu việc triển khai oAuth của couchdb hoàn toàn trái ngược với những gì tôi cần. Bạn có thể sử dụng điều đó để tạo mã thông báo cho người dùng ghế dài nhưng không chấp nhận quyền truy cập twitter/bí mật và bản đồ cho người dùng ghế dài.
  2. Tôi tìm thấy chính xác những gì tôi cần trong datacouch - xác thực chống lại twitter với nodejs, và sau đó nhận được mật khẩu thô từ một chiếc ghế riêng và sử dụng nó với _session-API để tạo ra một chiếc bánh đi văng.

Bây giờ tôi đang cố gắng tránh lưu trữ mật khẩu thô. Tôi đã nghe nói về việc sử dụng proxy_authentification_handler, nhưng có vẻ như tôi quá thiếu kinh nghiệm hoặc thậm chí quá ngu ngốc để sử dụng nó. Tôi làm (như xa như tôi hiểu) trả lời đúng trong couch_httpd_auth

couch_httpd_auth auth_cache_size   50 
        authentication_db  _users 
        authentication_redirect /_utils/session.html 
        require_valid_user  false 
        proxy_use_secret  false 
        secret     xxxxxxxxxxxx 
        timeout     43200 
        x_auth_roles   roles 
        x_auth_token   token 
        x_auth_username   uname 

và cũng trong phần httpd

httpd    allow_jsonp    true 
        authentication_handlers {couch_httpd_auth, proxy_authentification_handler},{couch_httpd_auth, cookie_authentication_handler}, {couch_httpd_auth, default_authentication_handler} 
        bind_address   127.0.0.1 
        default_handler   {couch_httpd_db, handle_request} 
        port     5984 
        secure_rewrites   false 
        vhost_global_handlers _utils, _uuids, _session, _oauth, _users 

Như cũng đề cập đến trong các ý kiến ​​trong docs tôi đặt proxy_use_secret false (đối với các bước đầu tiên) để cho phép xác thực mà không cần mã thông báo truy cập.

Khi tôi bây giờ làm một GET trên http://localhost:5984/_utils/config.html?uname=user1&roles=user điều đó dường như không ảnh hưởng đến bất cứ điều gì ...

Bất kỳ ai từng nhận rằng điều chạy? Tui bỏ lỡ điều gì vậy? Hoặc là có bất kỳ cơ hội để thực hiện một trình xử lý xác thực tùy chỉnh mà không cần mã hóa erlang?

Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn

Trả lời

2

Tham số URL không hoạt động. Khi bạn nhìn vào original bug bạn sẽ thấy rằng tên người dùng và vai trò được thông qua không phải do URL nhưng HTTP headers:

  • X-Auth-CouchDB-UserName: username, (x_auth_username trong phần couch_httpd_auth)
  • X -Auth-CouchDB-Vai trò: vai trò người dùng, danh sách vai trò được phân tách bằng dấu phẩy (x_auth_roles trong phần couch_httpd_auth)
  • Mã xác thực X-Auth-CouchDB: mã thông báo xác thực ủy quyền (phần x_auth_token trong phần couch_httpd_auth). Mã thông báo này là một hmac-sha1 được tạo từ khóa bí mật và tên người dùng. Khóa bí mật phải giống nhau trong nút máy khách và couchdb. khóa bí mật là khóa bí mật trong phần couch_httpd_auth của ini. Mã thông báo này là tùy chọn nếu khóa bí mật không được xác định.

Khi bạn cung cấp xác thực thông tin tiêu đề này thực sự hoạt động như được quảng cáo.

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