ak和sk怎么认证 海康威视_aksk鉴权
简介
鉴权功能的位置处于基础服务的接入网关中。
1. 认证简介
本鉴权方案是在api层面上进行,通过使用Access Key/Secret Key加密的方法来对验证某个请求的调用者身份。
当接入网关接收到业务调用方的请求时,将使用相同的SK和同样的认证机制生成认证字符串,并与用户请求中包含的认证字符串进行比对。如果认证字符串相同,系统认为用户拥有指定的操作权限,并执行相关操作;如果认证字符串不同,系统将忽略该操作并返回错误码。
2. 认证过程
业务云侧请求
note left of 业务云侧: 预置分配的AK/SK
业务云侧->业务云侧: 生成认证字符串
业务云侧->网关: 携带认证字符串的业务请求
网关->网关: 鉴权
网关-->业务云侧: 鉴权失败,返回401
网关->基础服务: 鉴权成功,透传请求
业务端侧请求
业务端侧->业务云侧: 获取携带认证字符串某个api的请求url
note right of 业务云侧: 预置分配的AK/SK
业务云侧->业务云侧: 生成认证字符串
业务云侧->业务端侧: 返回携带认证字符串的url
业务端侧->网关: 使用业务云侧返回的url进行业务请求
网关->网关: 鉴权
网关-->业务云侧: 鉴权失败,返回401
网关->基础服务: 鉴权成功,透传请求
3. 认证字符串生成简介
3.1 概述
在生成认证字符串之前,首先需要生成Signature。为了生成Signature,用户需要首先构建CanonicalRequest并计算SigningKey。
注:
函数名
功能描述
HMAC-SHA256-HEX()
调用HMAC SHA256算法,根据开发者提供的密钥(key)和密文(message)输出密文摘要,并把结果转换为小写形式的十六进制字符串。
Lowercase()
将字符串全部变成小写。
Trim()
去掉字符串开头和结尾的空白字符。
UriEncode()
RFC 3986规定,"URI非保留字符"包括以下字符:字母(A-Z,a-z)、数字(0-9)、连字号(-)、点号(.)、下划线(_)、波浪线(~),算法实现如下:
1. 将字符串转换成UTF-8编码的字节流
2. 保留所有“URI非保留字符”原样不变
3. 对其余字节做一次RFC 3986中规定的百分号编码(Percent-encoding),即一个“%”后面跟着两个表示该字节值的十六进制字母,字母一律采用大写形式。
UriEncodeExceptSlash()
与UriEncode() 类似,区别是斜杠(/)不做编码。一个简单的实现方式是先调用UriEncode(),然后把结果中所有的%2F都替换为/
3.2 生成canonicalRequest
CanonicalRequest = HTTP Method + "\n" + CanonicalURI + "\n" + CanonicalQueryString + "\n" + CanonicalHeaders
HTTP Method:全部大写。支持五种:
GET
POST
PUT
DELETE
HEAD
CanonicalURI:是对URL中的绝对路径进行编码后的结果。要求绝对路径必须以“/”开头,不以“/”开头的需要补充上,空路径为“/”,即CanonicalURI = UriEncodeExceptSlash(Path)。
举例:
若URL为https://bos.cn-n1.baidubce.com/example/测试,则其URL Path为/example/测试,将之规范化得到CanonicalURI = /example/%E6%B5%8B%E8%AF%95。
CanonicalQueryString:对于URL中的Query String(Query String即URL中“?”后面的“key1 = valve1 & key2 = valve2 ”字符串)进行编码后的结果。
编码方法为:
将Query String根据&拆开成若干项,每一项是key=value或者只有key的形式。
对拆开后的每一项进行如下处理:
对于key是authorization,直接忽略。
对于只有key的项,转换为UriEncode(key) + "="的形式。
对于key=value的项,转换为 UriEncode(key) + "=" + UriEncode(value) 的形式。这里value可以是空字符串。
将上面转换后的所有字符串按照字典顺序排序。
将排序后的字符串按顺序用 & 符号链接起来。
举例:
若URL为https://bos.cn-n1.baidubce.com/example?text&text1=测试&text10=test,在这个例子中Query String是 text&text1=测试&text10=test。
根据 & 拆开成 text 、text1=测试 和 text10=test 三项。
对每一项进行处理:
text => UriEncode("text") + "=" => text=
text1=测试 => UriEncode("text1") + "=" + UriEncode("测试") => text1=%E6%B5%8B%E8%AF%95
text10=test => UriEncode("text10") + "=" + UriEncode("test")=> text10=test
对 text= 、 text1=%E6%B5%8B%E8%AF%95 和 text10=test 按照字典序进行排序。它们有共同前缀text,但是=的ASCII码比所有数字的ASCII码都要大,因此 text1=%E6%B5%8B%E8%AF%95 和 text10=test 排在 text= 的前面。同样,text10=test 要排在 text1=%E6%B5%8B%E8%AF%95 之前。最终结果是 text10=test 、text1=%E6%B5%8B%E8%AF%95 、text= 。
把排序好的三项 text10=test 、 text1=%E6%B5%8B%E8%AF%95 、 text= 用&连接起来得到 text10=test&text1=%E6%B5%8B%E8%AF%95&text=。
CanonicalHeaders:对HTTP请求中的Header部分进行选择性编码的结果。
您可以自行决定哪些Header 需要编码。唯一要求是Host域必须被编码。大多数情况下,我们推荐您对以下Header进行编码,也可以使用其他header,此处不做限制:
Host
Content-Length
Content-Type
Content-MD5
对于每个要编码的Header进行如下处理:
将Header的名字变成全小写。
将Header的值去掉开头和结尾的空白字符。
经过上一步之后值为空字符串的Header忽略,其余的转换为 UriEncode(name) + ":" + UriEncode(value) 的形式。
把上面转换后的所有字符串按照字典序进行排序。
将排序后的字符串按顺序用\n符号连接起来得到最终的CanonicalQueryHeaders。
举例:
不使用signedHeaders默认值。若希望对 Date 进行编码,则需要用到signedHeaders。
要编码的Header如下:
Host: bj.bcebos.com
Date: Mon, 27 Apr 2015 16:23:49 +0800
Content-Type: text/plain
Content-Length: 8
Content-Md5: NFzcPqhviddjRNnSOGo4rw==
首先把所有名字都改为小写。
host: bj.bcebos.com
date: Mon, 27 Apr 2015 16:23:49 +0800
content-type: text/plain
content-length: 8
content-md5: NFzcPqhviddjRNnSOGo4rw==
将Header的值去掉开头和结尾的空白字符。
host:bj.bcebos.com
date:Mon, 27 Apr 2015 16:23:49 +0800
content-type:text/plain
content-length:8
content-md5:NFzcPqhviddjRNnSOGo4rw==
做UriEncode。
host:bj.bcebos.com
date:Mon%2C%2027%20Apr%202015%2016%3A23%3A49%20%2B0800
content-type:text%2Fplain
content-length:8
content-md5:NFzcPqhviddjRNnSOGo4rw%3D%3D?
把上面转换后的所有字符串按照字典序进行排序。
content-length:8
content-md5:NFzcPqhviddjRNnSOGo4rw%3D%3D?
content-type:text%2Fplain
date:Mon%2C%2027%20Apr%202015%2016%3A23%3A49%20%2B0800
host:bj.bcebos.com
将排序后的字符串按顺序用\n符号连接起来得到最终结果。
content-length:8
content-md5:NFzcPqhviddjRNnSOGo4rw%3D%3D?
content-type:text%2Fplain
date:Mon%2C%2027%20Apr%202015%2016%3A23%3A49%20%2B0800
host:bj.bcebos.com
这时候认证字符串的signedHeaders内容应该是
content-length;content-md5;content-type;date;host
3.3 生成SigningKey
SigningKey = HMAC-SHA256-HEX(sk, authStringPrefix),其中:
sk为用户的Secret Access Key,可以通过在控制台中进行查询,关于SK的获取方法,请参看获取AK/SK。
authStringPrefix代表认证字符串的前缀部分,即:auth-v1/{accessKeyId}/{timestamp}/{expirationPeriodInSeconds}。
3.4 生成Signature
Signature = HMAC-SHA256-HEX(SigningKey, CanonicalRequest)
3.5 生成认证字符串
认证字符串 = auth-v1/{accessKeyId}/{timestamp}/{expirationPeriodInSeconds}/{signedHeaders}/{signature}
timestamp:签名生效UTC时间,格式为yyyy-mm-ddThh:mm:ssZ,例如:2015-04-27T08:23:49Z,默认值为当前时间。(为实现方便,直接使用时间戳!!)
expirationPeriodInSeconds:签名有效期限,从timestamp所指定的时间开始计算,时间为秒,默认值为1800秒(30)分钟。
signedHeaders:签名算法中涉及到的HTTP头域列表。HTTP头域名字一律要求小写且头域名字之间用分号(;)分隔,如host;range;x-bce-date。列表按照字典序排列。当signedHeaders为空时表示取默认值。
标签:UriEncode,aksk,认证,content,云侧,text,字符串,鉴权
来源: https://www.cnblogs.com/xxxuwentao/p/10344964.html
ak和sk怎么认证 海康威视_aksk鉴权相关推荐
- ak和sk怎么认证 海康威视_公有云API的认证方式:AK/SK 简介
1 公有云API的认证方式 一般有一夏几种认证方式: Token认证 AK/SK认证 RSA非对称加密方式 下面主要介绍AK/SK 1 AK/SK 1.1 AK/SK 原理 云主机需要通过使用Acce ...
- ak和sk怎么认证 海康威视_“海康威视”也遭遇美断供了?董事长陈宗年回应:正在消化这一信息...
简介:针对有外媒报道海康威视可能遭遇美国供应商"断供",5月22号海康威视开盘逼近跌停.对此,海康威视董事长陈宗年回应记者:"不好意思,我要消化一下这个信息." ...
- 请求令牌 接口_时序图说明JWT用户认证及接口鉴权的细节
JWT用户认证及接口鉴权的细节以及原理 一.回顾JWT的授权及鉴权流程 在笔者的上一篇文章中,已经为大家介绍了JWT以及其结构及使用方法.其授权与鉴权流程浓缩为以下两句话: 授权:使用可信用户信息(用 ...
- ASP.Net Core实战——身份认证(JWT鉴权)
踩坑不背锅,.NET Core 试深浅 关于鉴权认证 什么是鉴权认证 常见鉴权方式 关于JWT认证 JWT认证流程 JWT组成 JWT实践 关于鉴权认证 什么是鉴权认证 鉴权(authenticati ...
- 【Spring Cloud Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权
一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间这里只贴出关键部分代码的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证 ...
- ak sk认证java demo_AK-SK鉴权
插件名称类别 名称 描述 属性 服务插件 AK/SK 鉴权 gw-ak_sk_auth 用户鉴权 功能描述 配置自己的AK/SK,或是使用网关自动生成的AK/SK,完成认证. 客户端涉及的AK/SK签 ...
- labview的用户身份认证系统设计_elasticsearch 集群身份认证与用户鉴权
elasticsearch在默认安装后,没有提供任何安全保护. 在elasticsearch.yml配置了server.host=0.0.0.0导致公网可以访问es集群. 数据安全的基本需求: 1.身 ...
- 吊打面试官系列之:什么是 认证、鉴权、授权、权限控制,这一篇必须安排的明明白白。
鉴权方案 1.引言 2.鉴权方案 2.1 认证 2.2 鉴权 2.3 授权 2.4 权限控制 2.5 认证,鉴权,授权及权限控制的关系 3.总结 1.引言 小屌丝:鱼哥,啥是认证,啥是鉴权? 小鱼:嗯 ...
- ONVIF协议网络摄像机(IPC)客户端程序开发(9):鉴权(认证)
1 专栏导读 本专栏第一篇文章「专栏开篇」列出了专栏的完整目录,按目录顺序阅读,有助于你的理解,专栏前面文章讲过的知识点(或代码段),后面文章不会赘述.为了节省篇幅,突出重点,在文章中展示的示例代码仅 ...
最新文章
- 如何成为顶尖管理者?
- ccflow如何实现自由流程的?
- 正在进行时 Order 1
- 试卷代号6098计算机应用基础,2231电大《Visual Basic程序设计》试题和答案200507
- idea内存溢出解决_各种OOM代码样例及解决方法
- ID3/C4.5/Gini Index
- VB获取Windows操作系统所有版本
- 使用JavaScript实现长方形、直角三角形、平行四边形、等腰三角形、倒三角、数字三角形...
- 51Nod-1486 大大走格子
- 黑马程序员之Web前端全栈 · 阶段一 前端开发基础 (1)
- 大觉寺-阳台山穿越记
- java char表示范围_char取值范围
- 4244. 【五校联考6day2】yi
- java zip文件加密_java自动压缩文件并加密
- 金字塔原理4个基本原则_青松财经发现,股市中存在4个基本原理,学会了少吃亏!...
- (转)常用的js代码
- ISO镜像转换成docker镜像
- php continue什么意思,php switch continue 什么意思??
- 《抗倭英雄戚继光》 郦波
- STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记二(3):Cortex-M3处理器异常模型
热门文章
- 2023年上半年软件设计师上午试卷及答案
- UE4 物理碰撞(C++)
- 简历里的这些词,真的不能有!
- 序关系分析法 G_1法的描述和matlab代码
- 【读点论文】Deep Residual Learning for Image Recognition 训练更深的网络
- Android之碎片
- linux系统查看FTP用户名密码,Linux的FTP的三种登录方式:
- 一位电子工程师从学校到工作岗位的项目经历,或许你可以借鉴
- godaddy plesk mysql_GoDaddy Windows虚拟主机介绍 | Godaddy美国主机中文指南
- 张会亭:花心怪才莫若沈坤