利用 couchdb 实现用户认证
token 的生成过程可分成两大步:用户登录和生成 token。其中用户登录的检验依靠 couchdb。另,使用 couchdb 管理角色,完成授权。
用户注册
couchdb 内置了一个 _users 数据库存放所有用户,创建用户的服务如下,其中 org.couchdb.user 是 couchdb 规定的前缀。
curl -X PUT https://dev.imaicloud.com/couchdb/_users/org.couchdb.user:jan \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name": "jan", "password": "apple", "roles": [], "type": "user"}'
用户登录
couchdb 支持多种认证方式,这里使用它的 cookie 认证。
curl -vX POST https://dev.imaicloud.com/couchdb/_session \
-H 'Content-Type:application/x-www-form-urlencoded' \
-d 'name=anna&password=secret'
登录后 couchdb 会在用户 cookie 中写入会话标识(类似 jsessionid)。登录响应相关内容:
Set-Cookie: AuthSession=amFuOjU3ODY0NzU1Otyly0ka4T1Y5FGB0Q8yfZGfmvbq;
{"ok":true,"name":"root","roles":["_admin"]}
取用户信息
couchdb 已经在用户浏览器中写入了会话标识,就可以发请求取用户信息了:
curl -vX GET https://dev.imaicloud.com/couchdb/_session \
--cookie AuthSession=amFuOjU3ODY0NzU1Otyly0ka4T1Y5FGB0Q8yfZGfmvbq
响应:
{ok: true,userCtx: {name: "anna",roles: ["_admin"]}, \
info: {authentication_db: "_users",authentication_handlers: [\
"oauth","cookie","default"],authenticated: "cookie" } }
上述响应中的 userCtx(User Context Object)就是用户上下文信息。
生成token
将 userCtx 发给后台的 token 生成程序来生成token。将 token 写入 cookie 中: imaicloud_expires=2147483647;
imaicloud_md5=TX7ZNGJJNqtHviTmMr-DDQ; imaicloud_payload=payload;
imaicloud_role=_admin,compdev,appdev
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论