背景这段时间我们一直在基于Tars进行开发。最近的文章大多是Tars的一些学习笔记。前面我们搭建了Tars基础框架,并开通了Tarsweb管理界面,用于服务运维。但是读者肯定很快就会发现:好像不需要登录,那如何保证只有授权用户才能更改服务呢?显然Tarsweb支持用户认证。官方文档在这里。本文记录我用户系统对接实验中的一些笔记,方便其他Tars用户参考。(特别是像我这样不熟悉Node.js的小白。。。)本系列文章:腾讯Tars基础框架手工搭建-填坑官方指南腾讯Tars-Go服务HelloWorld-从HTTP开始腾讯Tars-Go服务HelloWorld——RPC通信腾讯Tars-Go服务获取自定义模板(配置)值腾讯TarsWeb管理端用户系统对接(本文)文章地址:https://segmentfault.com/a/1190000019657656Tars用户认证流程准备如果要开启Tarsweb的用户功能,开发者首先需要设计一个自己的用户登录服务。该服务是一个http服务,具有独立的用户登录和注销功能。TarsWeb本身实现了一个简单的用户功能,但在本文中我们重新设计了一个。为了便于说明,我们假设TarsWeb和用户服务Web环境如下:TarsWebURL:https://tars.amc.comUserWebURL:https://user.amc.com基本流程用户通过浏览器访问从Tarsweb管理平台开始,如果开启了用户功能,基本流程如下:一句话:每当浏览器向Tarsweb发起请求,Tarsweb就向用户服务器判断用户是否有权限;如果认证通过,Tars将正常运行;如果没有,它将被重定向到用户登录页面。TarsWeb配置用户系统在TarsWeb/config/loginConfig.js文件中配置。读者可以直接查询代码,研究详细用法。我这里连接的是最基本的功能(其实够用了),下面列出涉及到的相关配置值:module.exports={enableLogin:true,//开启登录认证amc.com/login.html',//认证失败时重定向的URLredirectUrlParamName:'redirect_url',//在上述重定向中,URL中包含了Tars原始URL的参数名。后面会解释uidCookieName:'uid',//用户服务用来保存用户名在cookie中的cookie名称ticketCookieName:'ticket',//用户服务用来保存用户名的cookie名称cookies中的ticketcookieDomain:'amc.com',//用户服务的cookies所属域,注意让Tarsweb能够访问validate:"https://auth.amc.com/cgi-bin/validate",//Tarsweb判断是否有来自用户服务移除用户权限时使用的请求validateUidParamName:'uid',//请求validate时,用户名的参数名存放在thePOSTbodyvalidateTicketParamName:'ticket',//请求validate时,POSTbody中保存了ticket的参数名validateMatch:[//validate返回JSON响应时,TarsWeb如何判断结果['code',0],//表示判断条件为resp.code==0['data.result',true]//表示判断条件为resp.data.result==true],//多个conditions是AND的关系,所有条件都满足才认为认证通过ignore:['/static'],//表示不需要登录验证的路径,如果每次请求给用户认证还是很浪费的。ignoreIps:[],//访问IP白名单};做完这个配置,我们再解释一下之前的图:用户在没有ticket或者ticket无效的情况下访问TarsWeb,通过浏览器访问https://tars.amc.com。此时TarsWeb根据配置从cookie中取出uid和ticket参数值,然后以如下Json格式提交给https://user.amc.com。/cgi-bin/validate发出请求:{"uid":"xxxxx",//如果cookie不存在,这里的值为"undefined""ticket":"xxxxx",//如果cookie存在不存在,这里的值会是“undefined”}当user.amc.com返回失败时,只要不返回validateMatch中指定的条件,TarsWeb会直接返回http状态码307,重定向URL:https://用户.amc。com/login.html?redirect_url=https%3A%2F%2Ftars.amc.com%2F通过登录服务登录浏览器,通过重定向的URL访问用户服务,进行登录操作。用户服务根据TarsWeb上的redirect_url参数,用户登录成功后应该可以跳转到TarsWeb。在ticket有效期内访问TarsWeb用户成功登录后被重定向到TarsWeb或用户在ticket有效期内访问TarsWeb后,Tars仍会请求https://user.amc.com/cgi-bin/validate根据配置判断注释。此时根据配置,用户服务应该返回如下信息:{"code":0,"data":{"result":true}}这样TarsWeb就可以认为ticket是有效的根据配置,继续跟进Tars操作。用户退出登录成功后,用户可以在Tarsweb界面的右上角看到自己的uid名。用户名的下拉菜单只有一个选项,就是注销操作。在没有配置logoutUrl的情况下,TarsWeb的logout实现逻辑只是简单的删除配置中提到的uid和ticketcookies值。其实这个逻辑就够了。结束语本文给出了连接第三方用户系统最简单的方法。其实笔者是想登陆微信网站的,但是因为手头没有网站记录而放弃了。不过为企业网站部署的读者也可以这样做,这样其实更安全,操作也更方便。本文已根据CreativeCommonsAttribution-NonCommercial-ShareAlike4.0InternationalLicense获得许可。原作者:amc,欢迎转载,但转载请注明出处。原标题:《腾讯 Tars Web 管理端用户体系对接》发布日期:2019-4-7
