欢迎光临散文网 会员登陆 & 注册

CouchDB 0x00 认证

2022-02-25 21:09 作者:CSDN首席喷子  | 我要投稿

自CouchDB 3.x版本要求访问数据库时必须进行认证。在访问任何实际数据之前,需向/_session发送一个POST请求,要求包括:

(1)Content-Type必须为application/json。

(2)请求体必须为{"name":"xxx", "password":"yyyy"}

 

如果认证成功,这个请求的响应头部会包含一个Set-Cookie域,内容大概是:

AuthSession=YWRtaW46NjIxOEQyRDE6tlGcI_YQ_5Dmv3pBsWsjR6W8BSg; Version=1; Expires=Fri, 25-Feb-2022 13:10:01 GMT; Max-Age=600; Path=/; HttpOnly

添加一个新的Cookie。此后的每一个访问请求头部必须带一个Cookie域,内容就是从AuthSession到第一个分号之间的内容:

AuthSession=YWRtaW46NjIxOEQyRDE6tlGcI_YQ_5Dmv3pBsWsjR6W8BSg

这个Cookie是放在头部的明文,并不安全,应当添加一个Apache做SSL代理。浏览器一般会自动添加这个Cookie,但如果是用node.js等环境,就要考虑手动添加了。一段用于验证的实例代码如下所示:

const https = require("http");

let getToken = () => {

    return new Promise((resolve, reject) => {

        var req = https.request("http://localhost:5984/_session", {

            method: "POST",

            headers: {

                "Content-Type": "application/json",

            }

        }, (response) => {

            if (!response.headers["set-cookie"]) {

                reject("Authentication failed.");

            }

            let token = response.headers["set-cookie"][0];

            let delimaPos = token.indexOf(";");

            token = token.substring(0, delimaPos);

            resolve(token);

        });

        req.write(JSON.stringify({

            name: "admin",

            password: "1234546"

        }));

        req.end();

    });

};

 

getToken().then((value) => {

    console.log(value);

}, (reason) => {

    console.error(reason);

});


CouchDB 0x00 认证的评论 (共 条)

分享到微博请遵守国家法律