因为需要天翼云的《智能视图服务》,所以看了相关开发文档,把我给恶心坏了
以下问题仅仅是针对《智能视图服务》
第一点和第二点只要其中任何一个满足我都不会吐槽,关键是这俩都没有!!
第三点:各位可以去文档地址看看,https://www.ctyun.cn/document/10011391/10040115 这里面提到的“传进来的 body 参数进行 sha256 摘要,对摘要出来的结果转十六进制”,不知道这个 body 是什么东西?而相关 api 的请求方式都是 GET 请求,所以更不知道这个 body 是什么鬼了,还有最重要的,里面提到的几次 hash 摘要和 hex 没有一句话是告诉开发者应该是大写还是小写,纯纯的恶心人!
然后我尝试根据文档的指示写了请求代码,无一例外,签名验证错误。。。
还有一个恶心点,在获取 AK 的时候,有一个 API 密钥和 OpenAPI 密钥,这俩只有 OpenAPI 密钥才能用于接口调用鉴权,不知道搞这么多密钥干什么。。。。
第四点,我直接提工单了。。
说真的,对比其他几家云商,就如同从大城市走进一个穷乡僻壤的地方,基础建设太差了,我觉得提供的服务可以少点,至少这些基础的文档建设还是要完善吧?
参考代码:(用了 Flurl.Http 库)
using Flurl.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace CTYunHelper
{
public class Vss
{
const string API = "https://vss-dsp-gzgy2-a.ctapi.ctyun.cn/v1";
const string AccessKeyId = "xxx";
const string SecretAccessKey = "xxxx";
public static async void Client()
{
Dictionary<string, string> _params = new Dictionary<string, string>
{
{ "Action", "DescribeVSSGroups" }
};
string eop_date = DateTime.Now.ToString("yyyyMMdd'T'HHmmss'Z'");
string request_id = Guid.NewGuid().ToString();
var request = API.WithHeader("eop-date", eop_date).WithHeader("ctyun-eop-request-id", request_id);
Dictionary<string, string> q2 = _params.OrderBy(t => t.Key).ToDictionary(t => t.Key, t => t.Value);
foreach( KeyValuePair<string, string> item in q2)
{
request.SetQueryParam(item.Key, item.Value);
}
string query = request.Url.Query;
string queryHash = CalcSHA256(query);
string queryHex = ToHex(queryHash);
string sigture = $"ctyun-eop-request-id:{request_id}\neop-date:{eop_date}\n\n{query}\n{queryHash}";
string kTime = HmacSHA256(eop_date, SecretAccessKey);
string kAk = HmacSHA256(AccessKeyId, kTime);
string kdate = HmacSHA256(eop_date, kAk);
string signature = HmacSHA256(sigture, kdate);
signature = Convert.ToBase64String(Encoding.UTF8.GetBytes(signature));
request.WithHeader("Eop-Authorization", $"{AccessKeyId} Headers=ctyun-eop-request-id;eop-date Signature={signature}");
try
{
var a = await request.GetAsync();
}
catch(FlurlHttpException ex)
{
string s = await ex.GetResponseStringAsync();
Console.WriteLine(s);
}
}
public static string CalcSHA256(string s)
{
SHA256 sha = SHA256.Create();
byte[] hash_bytes = sha.ComputeHash(Encoding.UTF8.GetBytes(s));
sha.Dispose();
return BitConverter.ToString(hash_bytes).Replace("-", "").ToLower();
}
public static string ToHex(string s)
{
return Convert.ToHexString(Encoding.UTF8.GetBytes(s)).ToLower();
}
public static string HmacSHA256(string s, string key)
{
HMACSHA256 hMACSHA256 = new HMACSHA256();
hMACSHA256.Key = Encoding.UTF8.GetBytes(key);
byte[] hash_bytes = hMACSHA256.ComputeHash(Encoding.UTF8.GetBytes(s));
hMACSHA256.Dispose();
return BitConverter.ToString(hash_bytes).Replace("-", "").ToLower();
}
}
}
Datetime:2023-04-28 00:09
1
dayeye2006199 2023-04-28 00:19:36 +08:00 via Android 1
因为这类服务的常规用法:你是个甲方的爹爹,找到天翼的人或者外包,让他们搞定。
|
2
BugCry 2023-04-28 11:18:30 +08:00
别用天翼云提供的任何 PaaS 、SaaS 服务
都是外包的,东西上线就再没人管了 利益相关:前天翼云公司员工 |
6
bogun 2023-04-28 14:19:33 +08:00
嘿嘿,认证鉴权是他们做的比较好的了已经,等你深入去对接的时候,就会体会到什么叫真正的痛苦
|
7
Aiurvia 2023-04-28 21:06:21 +08:00
这个都是外包的,并且外包的比较烂。
烂到什么程度呢,就是外包的发包的、接包的可能都不懂。 |
8
zzl22100048 2023-04-28 22:20:00 +08:00 via iPhone
天翼云最蠢的是他那个网络控制,达到带宽后直接丢包,监控图表与限流完全不一致,还好 1m 的机器也有 200m 下载,ghcr 等仓库自带镜像
|
9
oldstudyman 356 天前
鉴权是因为要兼容他们过去老系统的垃圾,所以只能继续垃圾下去。
|