腾讯Tars Web管理用户系统对接

  小程序备案     |      2023-09-13
腾讯Tars Web管理用户系统对接

背景

这段时间我们一直在基于Tars进行开发。最近的文章大部分都是Tars的一些学习笔记。前期我们搭建了Tars 基础框架,并开放了Tars Web 管理界面进行服务运维。但读者肯定很快就会发现:好像不需要登录,那么如何保证只有授权用户才能更改服务呢?

显然Tars web 支持用户认证。官方文档在这里。本文记录了我在用户系统对接实验中的一些笔记,方便其他Tars用户参考。 (特别是对于像我这样不熟悉Node.js 的菜鸟.)

本系列文章:

腾讯Tars 基础框架手动搭建—— 填补官方指南的坑腾讯Tars-Go 服务Hello World—— 从HTTP 启动腾讯Tars-Go 服务Hello World—— RPC 通信腾讯Tars-Go 服务获取自定义模板(配置)值腾讯Tars Web 管理用户系统对接(本文)

Tars 用户鉴权流程

准备

如果要开启Tars web的用户功能,开发者首先需要设计一个自己的用户登录服务。该服务是一个http服务,具有独立的用户登录和注销功能。 Tars Web 本身实现了一个简单的用户功能,但在本文中我们重新设计了一个。为了便于说明,我们假设Tars Web 和用户服务Web 环境如下:

Tars Web URL:https://tars.amc.com 用户Web URL:https://user.amc.com

基本流程

用户通过浏览器访问Tars Web 管理平台,如果启用了用户功能,基本流程如下:

简而言之:每当浏览器向Tars web 发起请求时,Tars web 就会向用户服务器发起请求,判断用户是否有权限;如果认证通过,Tars将正常运行;如果没有,它将被重定向到用户登录页面。

Tars Web 端配置

用户系统在TarsWeb/config/loginConfig.js 文件中配置。读者可以查询代码直接研究详细用法。我这里连接的是最基本的功能(其实就够了),下面列出了涉及到的相关配置值:

module.exports={ enableLogin: true, //启用登录验证loginUrl: 'https://user.amc.com/login.html', //验证失败时重定向的URL redirectUrlParamName: 'redirect_url', //上面重定向时的参数URL中包含Tars原始URL的名称。后面会解释uidCookieName: 'uid', //用户服务用来保存cookie 中用户名的cookie 名称TicketCookieName: 'ticket', //用户服务用来保存cookie 的名称cookies中的ticket cookieDomain: 'amc.com ', //用户服务的cookie所属域,注意允许Tars web能够访问validate: 'https://auth.amc.com/cgi-bin /validate', //Tars web 判断是否有用户权限访问用户服务时请求使用的validateUidParamName: 'uid', //请求validate 时,POST body 中存储的是用户名的参数名称validateTicketParamName: 'ticket', //请求validate 时,POST body 中保存的是Ticket 的参数名称validateMatch: [//validate 返回JSON 响应时,Tars Web 如何判断结果['code', 0],//表示判断条件为resp.code==0 ['data.result', true]//表示判断条件为resp.data。 result==true ],//多个条件是与的关系,必须所有条件都通过才认为认证通过ignore: ['/static'], //表示不需要登录验证的路径,如果每个请求都对用户进行身份验证还是很浪费ignoreIps: [], //访问IP白名单};复制完这个配置后,我们再解释一下上一张图:

无票据或票据失效情况下访问 Tars Web

用户通过浏览器访问https://tars.amc.com。此时,Tars Web 根据配置从cookie 中取出uid 和Ticket 参数值,然后发送到https://user.amc.com/cgi-bin/validate 请求,参数放在URL 查询中,例如:

https://user.amc.com/cgi-bin/validate?uid=