Authentication 有没有办法通过编程生成CouchDB cookie?
我正在开发一个应用程序,它将使用CouchDB为用户存储一些数据。但我不希望用户直接登录CouchDB 我将有一个应用程序客户端(移动/网络)、一个应用程序服务器和CouchDB服务器。客户端应用程序将向应用程序服务器进行身份验证,然后myy的理想方案是让我的应用程序服务器以编程方式对用户进行身份验证,然后只向客户端应用程序发送10分钟的cookie 也就是说,我希望应用服务器代表应用客户端的用户从CouchDB服务器请求一个Cookie,然后只将Cookie发送到应用客户端 应用服务器可以代表经过身份验证的用户发布到_会话,但这需要:Authentication 有没有办法通过编程生成CouchDB cookie?,authentication,couchdb,Authentication,Couchdb,我正在开发一个应用程序,它将使用CouchDB为用户存储一些数据。但我不希望用户直接登录CouchDB 我将有一个应用程序客户端(移动/网络)、一个应用程序服务器和CouchDB服务器。客户端应用程序将向应用程序服务器进行身份验证,然后myy的理想方案是让我的应用程序服务器以编程方式对用户进行身份验证,然后只向客户端应用程序发送10分钟的cookie 也就是说,我希望应用服务器代表应用客户端的用户从CouchDB服务器请求一个Cookie,然后只将Cookie发送到应用客户端 应用服务器可以代表
为了完整起见,我还将提到,我已经研究了这些其他选项,发现它们缺少:
我没有遵循你的确切目标。您似乎暗示用户可能拥有密码(“通过编程验证用户的应用服务器”),但您不希望用户“永远需要知道他们的CouchDB密码”。您想要什么样的身份验证 对于CouchDB的身份验证,我采用了两种(半)通用方法:
更新:您的问题现在清楚地表明,您希望客户端应用程序直接与两台服务器通信:应用程序(以前称为“中间件”)服务器和CouchDB(数据库)服务器。我留下上面的内容是因为我认为它仍然有点有用,并为这次更新提供了一些背景/背景 您的怀疑是对的,这是一个错误的解决方案:它不是为了最终用户使用,而是为了取代上面第1部分的cookie转发“技巧”。也就是说,代理身份验证是指您完全信任一方(即您的中间件)在代表用户工作时提供用户信息。但是您希望用户直接与数据库对话,并且不能使用
X-Auth-CouchDB-Token
信任他们
我将遵从您对OAuth选项的判断。我确实认为它更接近您想要的,但很明显,您是在根据不同的服务对用户进行身份验证,而不需要存储本身。OAuth 1.0要求的请求签名确实意味着您的客户端应用程序的HTTP库也需要支持
我看到了一些选项,在不构建自定义CouchDB插件的情况下,可以让您的应用服务器将令牌分发给经过身份验证的用户,而您的数据库服务器将接受这些令牌:
def generate_couchdb_cookie(couchAddress, couchSecret, username):
timestamp = format(int(time.time()), 'X')
data = username + ":" + timestamp
server = pycouchdb.Server(couchAddress)
db = server.database("_users")
doc = db.get("org.couchdb.user:" + username)
salt = doc["salt"]
secret = couchSecret + salt
hashed = hmac.new(secret.encode(), data.encode(), hashlib.sha1).digest()
inbytes = data.encode() + ":".encode() + hashed
result = base64.urlsafe_b64encode(inbytes)
return "AuthSession=" + (result.decode("utf-8")).rstrip('=')