2012-02-23 9 views
6

나는이 주제에 대해 상당히 새롭다는 것을 인정해야하며, 특히 erlang을 처음 접했습니다. 현재, 다양한 인증 처리기를 가지고 놀고 자합니다. 목표는 페이스 북, 트위터 등에 "위임 된 인증"기능을 사용하는 것입니다.couchdb 사용자 지정 인증 처리기

  1. 필자는 couchdb의 oAuth 구현이 필자가 원하는 것과 정반대임을 이해했다. 이를 사용하여 소파 사용자를위한 토큰을 만들 수 있지만 트위터 accessTokens/비밀을 수락하지 않고 소파 사용자에게 매핑합니다.
  2. 정확히 datacouch - nodejs가있는 트위터에 대한 인증이 필요합니다. 그런 다음 개인용 소파에서 일반 텍스트 비밀번호를 가져 와서 _session-API와 함께 사용하여 couch 쿠키를 생성합니다.

이제 일반 텍스트 암호를 저장하지 않으려합니다. proxy_authentification_handler를 사용하는 것에 대해 들었지만 너무 익숙하지 않거나 사용하기에는 너무 어리 석습니다. (I 이해 것이면) I는 제조 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 

또한 부 아파치에

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 

으로서도 대해 (ⅰ false로 proxy_use_secret 세트 docs의 설명에서 언급 첫 번째 단계) 액세스 토큰없이 인증을 허용합니다.

지금은 아무 영향을 미치지 않는 것 같다 http://localhost:5984/_utils/config.html?uname=user1&roles=user에 GET ...

누구 이제까지 실행하는 일을 가지고 작업을 수행 할 때? 내가 놓친 게 있니? 또는 erlang을 코딩하지 않고 사용자 정의 인증 처리기를 구현할 수 있습니까?

도움을 많이 주셔서 감사합니다.

답변

2

URL 매개 변수는 아무 것도 처리하지 않습니다. 당신이 original bug 볼 때 당신은 사용자 이름과 역할이 URL에 의해하지에 전달하지만, HTTP를하는 것을 볼 수 있습니다 헤더 :

  • X-인증-CouchDB를-사용자 이름 : 사용자 이름 (couch_httpd_auth 섹션에서 x_auth_username)
  • X -Auth-CouchDB- 역할 : 사용자 역할, 쉼표로 구분 된 역할 목록 (couch_httpd_auth 섹션의 x_auth_roles)
  • X-Auth-CouchDB- 토큰 : 인증을 인증하는 토큰 (couch_httpd_auth 섹션의 x_auth_token). 이 토큰은 비밀 키와 사용자 이름으로 만든 hmac-sha1입니다. 비밀 키는 클라이언트 및 couchdb 노드에서 동일해야합니다. 비밀 키는 ini의 couch_httpd_auth 섹션에있는 비밀 키입니다. 비밀 키가 정의되지 않은 경우이 토큰은 선택 사항입니다.

이러한 헤더 정보를 제공하면 인증은 실제로 광고 된대로 작동합니다.