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
do
        uname=$(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.tmp
        token=$(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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2.4 矩阵的运算法则

矩阵是数字或 “元素” 的矩形阵列。当矩阵 A A A 有 m m m 行 n n n 列,则是一个 m n m\times n mn 的矩阵。如果矩阵的形状相同,则它们可以相加。矩阵也可以乘上任意常数 c c c。以下是 A B AB AB 和 2 A 2A 2A 的例子,它们都是 …

YOLOv5项目实战(4)— 简单三步,教你按比例划分数据集

前言:Hello大家好,我是小哥谈。本节课就教大家如何去按照比例去划分数据集,希望大家学习之后可以有所收获!~🌈 前期回顾: YOLOv5项目实战(1)— 如何去训练模型 YOLOv5项目

万字长文:从 C# 入门学会 RabbitMQ 消息队列编程

RabbitMQ 简介 RabbitMQ 是一个实现了 AMQP 协议的消息队列,AMQP 被定义为作为消息传递中间件的开放标准的应用层协议。它代表高级消息队列协议,具有消息定位、路由、队列、安全性和可靠性等特点。 目前社区上比较流行的消息队列有 kafka、ActiveMQ、Pul…

freeRTOS--软件定时器

一、什么是定时器: 简单可以理解为闹钟,到达指定一段时间后,就会响铃。STM32 芯片自带硬件定时器,精度较高、达到定时时间后会触发中断,也可以生成 PWM 、输入捕获、输出比较,等等,功能强大&am…

基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码

基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于黄金正弦优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

从0开始学习数据结构 C语言实现 1.前篇及二分查找算法

一、前篇 1、什么是数据结构? 数据结构是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系 2、时间复杂度与空间复杂度 大O符号是用于描述函数渐进行为的数学符号 常用函数的增长表 阶乘O(n!) > 指数…

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蝠鲼觅食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

Spring Boot 中使用 ResourceLoader 加载资源的完整示例

ResourceLoader 是 Spring 框架中用于加载资源的接口。它定义了一系列用于获取资源的方法,可以处理各种资源,包括类路径资源、文件系统资源、URL 资源等。 以下是 ResourceLoader 接口的主要方法: Resource getResource(String location)&am…

VSCode 运行java程序中文乱码

现象描述 java文件中包含中文,运行java程序后,乱码报错。 解决方法 原本运行指令为 cd "d:\programProjects\Java_proj\" ; if ($?) { javac Solution.java } ; if ($?) { java Solution } 需要添加 编码格式 -encoding utf8 cd &quo…

python数据处理作业6:随机生产一个服从正态分布长度为1000的数组,将这个数组划分为25个区间,画出数组的直方图和密度图

每日小语 我只有忘掉自己,才能津津有味地进行沉思和遐想。——卢梭 gpt代码 import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm# 随机生成一个服从正态分布的长度为1000的数组 data np.random.randn(1000)# 划分为25个区间 num_…

【Linux】U盘安装的cfg引导文件配置

isolinux.cfg文件 default vesamenu.c32 timeout 600display boot.msg# Clear the screen when exiting the menu, instead of leaving the menu displayed. # For vesamenu, this means the graphical background is still displayed without # the menu itself for as long …

什么是好用的HR人才测评?

对于HR来说,选用一个合适的测评工具,我想不外乎以下几点: 1、成本可控 不是所有的HR都能申请到足够的资金,去做专业的人才测评,尤其是中小企业,这可是一笔不小 的开支。即使是基层普通岗位的成本&#xf…

redis运维(十一) python操作redis

一 python操作redis ① 安装pyredis redis常见错误 说明:由于redis服务器是5.0.8的,为了避免出现问题,默认最高版本的即可 --> 适配 ② 操作流程 核心:获取redis数据库连接对象 ③ Python 字符串前面加u,r,b的含义 原因: 字符串在…

视频一键转码:批量转换MP4视频的技巧

随着数字媒体设备的普及,视频文件在生活中扮演着越来越重要的角色。而在处理视频文件时,有时需要将其转换为不同的格式以适应不同的需求。其中,MP4格式因其通用性和高质量而备受青睐。本文详解云炫AI智剪如何一键转码的技巧,帮助批…

基础课6——开放领域对话系统架构

开放领域对话系统是指针对非特定领域或行业的对话系统,它可以与用户进行自由的对话,不受特定领域或行业的知识和规则的限制。开放领域对话系统需要具备更广泛的语言理解和生成能力,以便与用户进行自然、流畅的对话。 与垂直领域对话系统相比…

msvcp140.dll是什么东西以及如何解决其文件缺失问题

当我们在使用Windows电脑的过程中,有时候可能会遇到一些由于系统文件缺失或者损坏而导致的问题。其中,"msvcp140.dll缺失"就是一种常见的错误提示。msvcp140.dll究竟是什么?为什么它会缺失?又该如何解决这个问题呢&…

MIKE水动力笔记20_由dfs2网格文件提取dfs1断面序列文件

本文目录 前言Step 1 MIKE Zero工具箱Step 2 提取dfs1 前言 在MIKE中,dfs2是一个一个小格格的网格面的时间序列文件,dfs1是一条由多个点组成的线的时间序列文件。 如下两图: 本博文内容主要讲如何从dfs2网格文件中提取dfs1断面序列文件。 …

PaddleClas学习2——使用PPLCNet模型对车辆朝向进行识别(python)

使用PPLCNet模型对车辆朝向进行识别 1. 配置PaddlePaddle,PaddleClas环境2. 准备数据2.1 标注数据格式2.2 标注数据3. 模型训练3.1 修改配置文件3.2 训练、评估4 模型预测1. 配置PaddlePaddle,PaddleClas环境 安装:请先参考文档 环境准备 配置 PaddleClas 运行环境。 2. 准…

Unity Text文本首行缩进两个字符的方法

Text文本首行缩进两个字符的方法比较简单。通过代码把"\u3000\u3000"加到文本字符串前面即可。 参考如下代码: TMPtext1.text "\u3000\u3000" "这是一段有首行缩进的文本内容。\n这是第二行"; 运行效果如下图所示: 虽…

java入门,从CK导一部分数据到mysql

一、需求 需要从生产环境ck数据库导数据到mysql,数据量大约100w条记录。 二、处理步骤 1、这里的关键词是生产库,第二就是100w条记录。所以处理数据的时候就要遵守一定的规范。首先将原数据库表进行备份,或者将需要导出的数据建一张新的表了…