TDengine Restful Authorization 自定义Token

Restful 接口是 TDengine 最常用的接口,仅次于 JDBC。TDengine 支持 HTTP 和 HTTPS,但通常情况下,大家不想搞证书,又在内网环境中,采用 HTTP 方式比较多。但 HTTP 是明文传输,只要抓个包就知道账号密码了。因此需要对用户名和密码进行加密。

TDengine 支持 Basic 认证与自定义认证两种机制,下面进行简单介绍。

目录

    • Basic
      • 示例
        • 创建测试用户
        • 对账号密码进行 Base64 加密
        • 使用Basic方式查询数据库
    • 自定义Token
      • 示例
        • 获取自定义Token并查询
        • 特殊字符处理
    • 批量查询Token脚本

Basic

Basic 比较简单,就是对用户名密码进行 BASE64 编码。其实并不安全,因为可以直接对编码近解密。

示例

创建测试用户
taos> create user test pass 'P@ssw0rd';
Create OK, 0 row(s) affected (0.002246s)taos> grant read on *.* to test;
Query OK, 0 row(s) affected (0.002141s)
对账号密码进行 Base64 加密

在这里插入图片描述

使用Basic方式查询数据库
[root@c2-125 ~]# curl -L -H "Authorization: Basic dGVzdDpQQHNzdzByZA==" 127.0.0.1:6041/rest/sql -d "select current_user();"
{"code":0,"column_meta":[["current_user()","VARCHAR",11]],"data":[["test@c2-125"]],"rows":1}

自定义Token

为了提供安全性,TDengine 支持自定义Token,即对用户名密码进行特殊加密。

示例

获取自定义Token并查询
[root@c2-125 ~]# curl http://127.0.0.1:6041/rest/login/test/P@ssw0rd
{"code":0,"desc":"QIIxd+q+/t7a8qdtNZmtONryp201ma04r0sDvQTxtaDa8qdtNZmtONryp201ma04"}[root@c2-125 ~]# curl -L -H "Authorization: Taosd QIIxd+q+/t7a8qdtNZmtONryp201ma04r0sDvQTxtaDa8qdtNZmtONryp201ma04" 127.0.0.1:6041/rest/sql -d "select current_user();"
{"code":0,"column_meta":[["current_user()","VARCHAR",11]],"data":[["test@c2-125"]],"rows":1}
特殊字符处理

以上密码比较简单,如果是复杂密码呢?

taos> alter user test pass 'P@#!$%000';
Query OK, 0 row(s) affected (0.002323s)
[root@c2-125 ~]# curl http://127.0.0.1:6041/rest/login/test/P@#!$%000
curl http://127.0.0.1:6041/rest/login/test/P@#taos%000
{"code":3,"desc":"Authentication failure"}

需要对特殊字符进行 URL编码才能传输。

[root@c2-125 ~]# curl http://127.0.0.1:6041/rest/login/test%2FP%40%23%21%24%25000
{"code":0,"desc":"QIIxd+q+/t7a8qdtNZmtONryp201ma04Uj6laakTHxe8oWCwoeYGPdryp201ma04"}[root@c2-125 ~]# curl -L -H "Authorization: Taosd QIIxd+q+/t7a8qdtNZmtONryp201ma04Uj6laakTHxe8oWCwoeYGPdryp201ma04" 127.0.0.1:6041/rest/sql -d "select current_user();"
{"code":0,"column_meta":[["current_user()","VARCHAR",11]],"data":[["test@c2-125"]],"rows":1}

批量查询Token脚本

数据库创建好以后,DBA 会为业务创建一系列的账号,如果一个编码查询,就太没有效率了。

以下脚本会逐行读取一个文件。每行应该包含一个用户名和一个空格分隔的密码。然后脚本会将密码编码成URL格式,并向服务器发送HTTP请求,可能是为了认证并获取令牌。服务器的响应被保存到了一个临时文件中,然后脚本提取出令牌。用户名与他们对应的令牌被添加到名为 token_list.txt 的文件中。

#!/bin/sh
cat $1 |while read l
douname=$(echo $l |awk '{print $1}')pass=$(echo $l |awk '{print $2}')ulpass=$(echo ${pass} | tr -d '\n' | xxd -plain | sed 's/\(..\)/%\1/g')curl "http://127.0.0.1:6041/rest/login/${uname}/${ulpass}" >token.tmptoken=$(cat token.tmp |awk -F '"' '{print $6}')echo "$uname: $token" >> token_list.txt
done
[root@c2-125 ~]# cat userlist 
test P@#!$%000
[root@c2-125 ~]# sh getToken.sh userlist
[root@c2-125 ~]# cat token_list.txt 
test: QIIxd+q+/t7a8qdtNZmtONryp201ma04Uj6laakTHxe8oWCwoeYGPdryp201ma04

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/151742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL InnoDB 引擎底层解析(一)

6. InnoDB 引擎底层解析 MySQL 对于我们来说还是一个黑盒,我们只负责使用客户端发送请求并等待服务器返回结果,表中的数据到底存到了哪里?以什么格式存放的?MySQL 是以什么方式来访问的这些数据?这些问题我们统统不知…

AnyTXT Searcher:本地文件内容搜索神器如何搭建与远程访问

文章目录 前言1. AnyTXT Searcher1.1 下载安装AnyTXT Searcher 2. 下载安装注册cpolar3. AnyTXT Searcher设置和操作3.1 AnyTXT结合cpolar—公网访问搜索神器3.2 公网访问测试 4. 固定连接公网地址 前言 你是否遇到过这种情况,异地办公或者不在公司,想找…

iOS_折叠展开 FoldTextView

1. 显示效果 Test1:直接使用: Test2:在 cell 里使用: 2. 使用 2.1 直接使用 // 1.1 init view private lazy var mooFoldTextView: MOOFoldTextView {let view MOOFoldTextView(frame: .zero)view.backgroundColor .cyanvie…

Redis字典实现

前言 字典又称符号表,关联数组或者映射(map)。是一种保存键值对的抽象数据结构。在字典中一个键和一个值进行关联。这些关联的值被称为键值对。 字典中每一个键都是独一无二的,没有重复的。我们可以通过键来查找值,更新值或者删除整个键值对等…

如何定位el-tree中的树节点当父元素滚动时如何定位子元素

使用到的方法 Element 接口的 scrollIntoView() 方法会滚动元素的父容器,使被调用 scrollIntoView() 的元素对用户可见。 参数 alignToTop可选 一个布尔值: 如果为 true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。相应的 scrollIntoV…

算法学习 day26

第二十六天 最大子数组和 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 动态规划问题 class Solution {public int maxSubArray(int[] nums) {int len nums.length;int[] dp new int[len];dp[0] nums[0];int res dp[0];for(int i 1; i < len; i){dp[i] …

Docker 可视化面板 ——Portainer

Portainer 是一个非常好用的 Docker 可视化面板&#xff0c;可以让你轻松地管理你的 Docker 容器。 官网&#xff1a;Portainer: Container Management Software for Kubernetes and Docker 【Docker系列】超级好用的Docker可视化工具——Portainer_哔哩哔哩_bilibili 环境 …

OpenCV C++ 图像 批处理 (批量调整尺寸、批量重命名)

文章目录 图像 批处理(调整尺寸、重命名)图像 批处理(调整尺寸、重命名) 拿着棋盘格,对着相机变换不同的方角度,采集十张以上(以10~20张为宜);或者棋盘格放到桌上,拿着相机从不同角度一通拍摄。 以棋盘格,第一个内焦点为坐标原点,便于计算世界坐标系下三维坐标; …

远程文件包含演示

远程文件包含 基本介绍 受害机器 10.9.47.181 攻击者机器1 10.9.47.41 攻击者机器2 10.9.47.217 实现过程 受害者机器开启phpstudy 并且开启允许远程连接 攻击者机器1上有一个文件&#xff0c;内容是phpinfo(); 攻击者机器1提供web服务使得受害者机器能够访问到攻击者…

庖丁解牛:NIO核心概念与机制详解 02 _ 缓冲区的细节实现

文章目录 PreOverview状态变量概述PositionLimitCapacity演示&#xff1a; 观察变量 访问方法get() 方法put()方法类型化的 get() 和 put() 方法 缓冲区的使用&#xff1a;一个内部循环 Pre 庖丁解牛&#xff1a;NIO核心概念与机制详解 01 接下来我们来看下缓冲区内部细节 Ov…

IPO解读丨高处不胜寒,澜沧古茶低头取暖?

自A股注册制改革不断深化并全面落地后&#xff0c;不少意欲登陆资本市场的企业转战港股。这个过程中&#xff0c;诞生了很多以“港股”为前缀的“第一股”——“白酒第一股”珍酒李渡、“水果零售第一股”百果园、“智能驾驶第一股”知行汽车、“运动科技第一股”Keep…… 由A…

力扣刷题-二叉树-完全二叉树的节点个数

222.完全二叉树的节点个数 给出一个完全二叉树&#xff0c;求出该树的节点个数。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5,6] 输出&#xff1a;6 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;0 示例 3&#xff1a; 输入&#xff1a;root [1]…

springMvc中的拦截器【巩固】

先实现下想要的拦截器功能 package com.hmdp.utils;import com.hmdp.entity.User; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Ht…

Pandas get_dummies用法

get_dummies 是 pandas 实现one hot encode的方式 ​  one-hot的基本思想&#xff1a;将离散型特征的每一种特征取值都看成一种状态&#xff0c;若指定离散特征中有N个 不相同的取值&#xff0c;那么我们就可以将该特征抽象成N种不同的状态&#xff0c;one-hot编码保证了每一…

10 Redis的持久化

Redis支持RDB和AOF两种持久化机制 1、RDB(Redis DataBase) 是对命令的全量快照随着key的数量增大&#xff0c;那么写入磁盘的开销也会越来越大 2、RDB文件的生成是否会阻塞主线程 save: 使用save的方式会阻塞主线程&#xff0c;影响redis的性能 bgsave: 一般情况下不会阻塞…

C语言模拟实现Liunx操作系统与用户之间的桥梁shell(代码详解)

什么是shell&#xff1f; Shell&#xff08;壳&#xff09;是指命令行界面&#xff08;CLI&#xff09;或脚本语言&#xff0c;它为用户提供了与操作系统交互的方式。它是一个程序&#xff0c;从用户那里接收命令&#xff0c;并通过与操作系统内核交互来执行这些命令。Shell充当…

CTFHub Git泄露

Log 前言 根据题目描述&#xff0c;这个题目需要使用到工具 GitHack 来完成&#xff0c;而 CTFHub 上提供的工具需要在 python2 环境中执行&#xff0c;注意 python3 环境无法使用。 GitHack准备&#xff08;kali Linux&#xff09; 打开虚拟机 sudo su 以管理员的身份运行…

开源更安全? yum源配置/rpm 什么是SSH?

文章目录 1.开放源码有利于系统安全2.yum源配置&#xff0c;这一篇就够了&#xff01;(包括本地&#xff0c;网络&#xff0c;本地共享yum源)3.rpm包是什么4.SSH是什么意思&#xff1f;有什么功能&#xff1f; 1.开放源码有利于系统安全 开放源码有利于系统安全 2.yum源配置…

Java 11及更高版本的Oracle JDK版本

2021 年 9 月 14 日&#xff0c;Oracle 发布了可以长期支持的 JDK17 版本&#xff0c;那么从 JDK11 到 JDK17&#xff0c;到底带来了哪些特性呢&#xff1f;亚毫秒级的 ZGC 效果到底怎么样呢&#xff1f;值得我们升级吗&#xff1f;而且升级过程会遇到哪些问题呢&#xff1f;带…

【Spring boot】RedisTemplate中String、Hash、List设置过期时间

文章目录 前言Redis中String设置时间的方法Redis中Hash和List设置时间的方法Redis中Hash的put、putAll、putIfAbsent区别 前言 时间类型&#xff1a;TimeUnit import java.util.concurrent.TimeUnit;TimeUnit.SECONDS:秒 TimeUnit.MINUTES&#xff1a;分 TimeUnit.HOURS&…