摘要:OBS提供了REST(Representational State Transfer)风格API,支持您通过HTTP/HTTPS请求调用。本文将带你了解OBS API鉴权实现的宝典秘籍。

OBS提供了REST(Representational State Transfer)风格API,支持您通过HTTP/HTTPS请求调用。在调用OBS的API前,需要了解OBS的鉴权认证方式。

签名计算篇

本文就将带您了解OBS的两种常见的鉴权方式——Header携带签名和URL携带签名。

1、在Header中携带签名计算

官网链接:https://support.huaweicloud.com/api-obs/obs_04_0010.html

1.1、签名的计算原理和计算方法

原理图示

计算方法

1.构造请求字符串(StringToSign)。

请求字符串的构造方法如下:

StringToSign =

HTTP-Verb + "\n" +

Content-MD5 + "\n" +

Content-Type + "\n" +

Date + "\n" +

CanonicalizedHeaders + CanonicalizedResource

2.对第一步的结果进行UTF-8编码。

3.使用SK对第二步的结果进行HMAC-SHA1签名计算。

4.对第三步的结果进行Base64编码,得到签名。

签名如以下形式(28位长度的BASE64编码的字符串):

JONydLd9zpf+Eu3IYiUjNmukHN0= 

计算示例

例:需要获取桶”obs-test”下的对象log.conf的对象ACL,如何构造请求并计算签名?

1、首先明确StringToSign的各字段:

请求方法:GET;

请求MD5:空

Content-Type:空

请求时间:Tue, 28 Jul 2020 06:29:47 GMT(即北京时间2020年7月28日14:29:47)

自定义头域(CanonicalizedHeaders):空

规范化资源(CanonicalizedResource):/obs-test/log.conf?acl

2、构造请求字符串StringToSign如下:

StringToSign = ‘’’GET

Tue, 28 Jul 2020 06:29:47 GMT

/obs-test/log.conf?acl’’’

3、根据签名算法,将StringToSign进行HMAC-SHA1计算后进行BASE64编码获得签名结果:xYlcrwT9jSaCtY0OnBE01OBR+aA=

1.2、签名计算的实现方式

以Python计算签名代码为例,供参考:

1.  import hashlib
2.  import hmac
3.  import binascii
4.  from datetime import datetime
5.
6.  # 验证信息
7.  AK = '您的access_key_id'
8.  SK = '您的secret_access_key_id'
9.
10. # 指定HTTP方法,可选GET/PUT/DELETE/POST/OPTIONS
11. httpMethod = "GET"
12.
13. # 指定请求的Header:Content-Type和Content-MD5
14. contentType = ""
15. conten**5 = ""
16.
17. # 使用datetime库生成时间,如果需要自定义请求时间请保持格式一致
18. date = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
19.
20. # 填写canonicalizedHeaders
21. # canonicalizedHeaders = "x-obs-acl:public-read"
22. # canonicalizedHeaders = "x-obs-acl:public-read\n"+'x-obs-storage-class:WARM\n'
23. canonicalizedHeaders = ""
24.
25. # 填写CanonicalizedResource
26. # CanonicalizedResource = "/BucketName/ObjectName"
27. # CanonicalizedResource = "/BucketName/ObjectName?acl"
28. # CanonicalizedResource = "/"
29. CanonicalizedResource = "/BucketName/"
30.
31. # 生成StringToSign
32. canonical_string = httpMethod + "\n" + conten**5 + "\n" + contentType + "\n" + date + "\n" + canonicalizedHeaders + CanonicalizedResource
33.
34. # 计算签名并进行BASE64编码
35. hashed = hmac.new(SK.encode('UTF-8'), canonical_string.encode('UTF-8'), hashlib.sha1)
36. encode_canonical = binascii.b2a_base64(hashed.digest())[:-1].decode('UTF-8')
37.
38. # 打印StringToSign以便出现问题时进行验证
39. print(canonical_string)
40.
41. # 打印签名
42. print(encode_canonical)  

C语言签名算法示例:

请参考https://obs-community.obs.cn-north-1.myhuaweicloud.com/sign/signature_c.zip,下载C语言签名计算代码样例,其中:

计算签名的接口包含在sign.h头文件中。

计算签名的示例代码在main.c文件中。

可视化签名计算工具:

您也可以通过OBS提供的可视化签名计算工具来计算签名。

工具链接:

https://obs-community.obs.cn-north-1.myhuaweicloud.com/sign/header_signature.html

说明:

1. canonicalizedHeaders:表示HTTP请求头域中的OBS请求头字段,即以“x-obs-”作为前辍的头域,如“x-obs-date,x-obs-acl,x-obs-meta-*”;

a.请求头字段中关键字的的所有字符要转为小写,需要添加多个字段时,要将所有字段按照关键字的字典序从小到大进行排序;

b.在添加请求头字段时,如果有重名的字段,则需要进行合并。如:x-obs-meta-name:name1和x-obs-meta-name:name2,则需要先将重名字段的值(这里是name1和name2)以逗号分隔,合并成x-obs-meta-name:name1,name2;

c.头域中的请求头字段中的关键字不允许含有非ASCII码或不可识别字符;请求头字段中的值也不建议使用非ASCII码或不可识别字符,如果一定要使用非ASCII码或不可识别字符,需要客户端自行做编解码处理,可以采用URL编码或者Base64编码,服务端不会做解码处理;

d.当请求头字段中含有无意义空格或table键时,需要摒弃。例如:x-obs-meta-name: name(name前带有一个无意义空格),需要转换为:x-obs-meta-name:name;

e.每一个请求头字段最后都需要另起新行。

2. canonicalizedResource表示HTTP请求所指定的OBS资源,构造方式如下:

<桶名+对象名>+[子资源] …

a.通过桶绑定的自定义域名访问OBS,桶名由自定义域名表示,则为"/http://obs.ccc.com/object",其中“obs.ccc.com”为桶绑定的自定义域名。如果没有对象名,如列举桶,则为"/http://obs.ccc.com/";

b.不是通过桶绑定的自定义域名访问OBS的场景,则为"/bucket/object",如果没有对象名,如列举桶,则为"/bucket/"。如果桶名也没有,则为“/”;

c.如果有子资源,则将子资源添加进来,例如?acl,?logging。

3. 如需要使用临时AK/SK+SecurityToken的方式计算签名,计算签名的方法保持一致,但需要在头域中添加“x-obs-security-token:…”字段。

4.计算Content-MD5的方法见文末的说明。

5.其他语言计算签名的代码可详见对应语言的SDK,详见:

https://support.huaweicloud.com/sdkreference-obs/obs_02_0001.html

1.3、常见问题

1.访问OBS时报错:Signature Does Not Match

签名不匹配的情况主要有以下两种可能:

a.您没有使用正确的AK/SK,您可以检查您计算签名使用的SK和发送请求时所携带的AK是否正确且匹配;

b.您计算签名时构造的StringToSign和服务端根据接收到的HTTP请求所计算的StringToSign不匹配,您可以检查服务端返回的StringToSign,并与本地计算签名所使用的StringToSign进行对比。

如下图是服务端返回的由接收到HTTP请求所还原的StringToSign,您可以通过对比您本地的StringToSign和您发送到服务端的HTTP请求,来分析您签名计算失败的原因。

2.访问OBS时报错:Request has expired

此类情况请您检查您携带的Date是否正确,为保证请求的时效性,您所携带的Date头域必须与服务端的时间相差在15分钟以内(服务端为UTC时间),如您携带了x-obs-date头域,需检查x-obs-date的时间是否与服务端时间相差15分钟以内。

2、在URL中携带签名

OBS服务支持用户构造一个特定操作的URL,这个URL中会包含用户AK、签名、有效期、资源等信息,任何拿到这个URL的人均可执行这个操作,OBS服务收到这个请求后认为该请求就是签发URL用户自己在执行操作。例如构造一个携带签名信息的下载对象的URL,拿到相应URL的人能下载这个对象,但该URL只在Expires指定的失效时间内有效。URL中携带签名主要用于在不提供给其他人Secret Access Key的情况下,让其他人能用预签发的URL来进行身份认证,并执行预定义的操作。

官网链接https://support.huaweicloud.com/api-obs/obs_04_0011.html

2.1、签名的计算原理和计算方法

原理图示

计算方法

1.构造请求字符串(StringToSign)。

请求字符串的构造方法如下:

StringToSign =

HTTP-Verb + "\n" +

Content-MD5 + "\n" +

Content-Type + "\n" +

Date + "\n" +

CanonicalizedHeaders + CanonicalizedResource

2.对第一步的结果进行UTF-8编码。

3.使用SK对第二步的结果进行HMAC-SHA1签名计算。

4.对第三步的结果进行Base64编码,得到签名。

签名如以下形式(28位长度的BASE64编码的字符串):

JONydLd9zpf+Eu3IYiUjNmukHN0=

URL中携带的签名计算方法同Header中携带签名的签名计算方法,但是需要将Date更换为UNIX时间戳。

携带签名的URL形式如下:

http://obs-ycytest.obs.cn-north-1.myhuaweicloud.com/?AccessKeyId=YN97UCJEKF2ALJ44AHAN&Expires=1575452568&Signature=0wG/GF7XgmOatCFhwHJh0J6NrtQ=

其对应的StringToSign为

GET

1575452568

/obs-ycytest/

URL中携带的参数具体含义见下表:

计算示例

例:需要获取桶”obs-test”下的对象log.conf的对象ACL,如何构造请求并计算签名?

1、首先明确StringToSign的各字段:

请求方法:GET;

请求MD5:空

Content-Type:空

请求时间:1595918661(即北京时间2020年7月28日14:44:21)

自定义头域(CanonicalizedHeaders):空

规范化资源(CanonicalizedResource):/obs-test/log.conf?acl

2、构造请求字符串StringToSign如下:

StringToSign = ‘’’GET

1595918661

/obs-test/log.conf?acl’’’

3、根据签名算法,将StringToSign进行HMAC-SHA1计算后进行BASE64编码获得签名结果:lLcYw1fFMJv5m+MS0XenNrqJlag=

根据计算的结果,将URL拼接起来即可生成携带签名的URL如下:

http://obs-test.obs.myhuaweicloud.com/log.conf?AccessKeyId=xxx&acl&Expires=1595918661&Signature= lLcYw1fFMJv5m+MS0XenNrqJlag=

2.2、签名计算的实现方式

在URL中携带签名时,只需将Date替换为UNIX时间戳即可计算对应的签名,因此对应的代码不再赘述。

如需要使用临时AK/SK+SecurityToken的方式计算签名,计算签名的方法保持一致,但需要在对应的CanonicalizedResource中添加“?x-obs-security-token=…”字段,且计算得到的签名必须要进行URL编码。使用临时AK/SK+SecurityToken计算签名的代码如下:

1.  import hashlib
2.  import hmac
3.  import binascii
4.  import urllib.request
5.
6.  AK = 'Input Your AccessKeyId'
7.  SK = 'Input Your SecretKeyId'
8.  Token = 'Input Your SecurityToken'
9.
10. httpMethod = "GET"
11. contentType = ""
12. Conten**5 = ''
13. date = '1594972984'
14. canonicalizedHeaders = ''
15. CanonicalizedResource = "/messageflow/flowengine.tar.gz" + "?x-obs-security-token=" + Token
16. canonical_string = httpMethod + "\n" + Conten**5 + "\n" + contentType + "\n" + date + "\n" + canonicalizedHeaders + CanonicalizedResource
17. hashed = hmac.new(SK.encode('UTF-8'), canonical_string.encode('UTF-8'), hashlib.sha1)
18. encode_canonical = binascii.b2a_base64(hashed.digest())[:-1].decode('UTF-8')
19.
20. url= 'messageflow.obs.myhuaweicloud.com/flowengine.tar.gz?x-obs-security-token={}&Expires={}&AccessKeyId={}&Signature={}'.format(Token, date, AK, urllib.request.quote(encode_canonical))
21. print(url)  

说明:

1.在计算签名时,Date表示的是一个UNIX时间戳;

2.如果想要在浏览器中使用URL中携带签名生成的预定于URL,则计算签名时不要使用“Content-MD5”、“Content-Type”、“CanonicalizedHeaders”计算签名,否则浏览器不能携带这些参数,请求发送到服务端之后,会提示签名错误。

3、Content-MD5的计算方式

3.1、Content-MD5的计算方法

以消息内容“0123456789”为例,以下详细说明计算该字符串的Content-MD5的方法。

1.先计算MD5加密的二进制数组(128位)。

2.对这个二进制数组进行base64编码(而不是对32位字符串编码)。

以Python为例:

>>> import base64,hashlib

>>> hash = hashlib.md5()

>>> hash.update("0123456789".encode(‘utf-8’))

>>> base64.b64encode(hash.digest())

'eB5eJF1ptWaXm4bijSPyxw=='

注:hash.digest(),计算出二进制数组(128位)。

>>> hash.digest()

'x\x1e^$]i\xb5f\x97\x9b\x86\xe2\x8d#\xf2\xc7'

3.2、Content-MD5计算的实现

以Python计算文件MD5代码为例,供参考:

1.  import os
2.  import base64
3.  import hashlib
4.
5.
6.  def md5_file_encode_by_size_offset(file_path=None, size=None, offset=None, chuckSize=None):
7.      if file_path is not None and size is not None and offset is not None:
8.          m = hashlib.md5()
9.          with open(file_path, 'rb') as fp:
10.             CHUNKSIZE = 65536 if chuckSize is None else chuckSize
11.             fp.seek(offset)
12.             read_count = 0
13.             while read_count < size:
14.                 read_size = CHUNKSIZE if size - read_count >= CHUNKSIZE else size - read_count
15.                 data = fp.read(read_size)
16.                 read_count_once = len(data)
17.                 if read_count_once <= 0:
18.                     break
19.                 m.update(data)
20.                 read_count += read_count_once
21.         return base64.b64encode(m.digest()).decode()
22.
23.
24. file_path = r'Input Your File Path'
25. size = os.path.getsize(file_path)
26. Conten**5 = md5_file_encode_by_size_offset(file_path=file_path, size=size, offset=0)
27. print(Conten**5)  

3.3、常见问题

常见错误是直接对计算出的32位字符串进行base64编码。

# hash.hexdigest(),计算得到可见的32位字符串编码。

>>> import base64,hashlib

>>> hash = hashlib.md5()

>>> hash.update("0123456789".encode(‘utf-8’))

>>> hash.hexdigest()

'781e5e245d69b566979b86e28d23f2c7'

# 错误的MD5值进行base64编码后的结果:

>>> base64.b64encode(hash.hexdigest())

'NzgxZTVlMjQ1ZDY5YjU2Njk3OWI4NmUyOGQyM2YyYzc='

POST签名计算

OBS服务支持基于浏览器的POST上传对象请求,此类请求的签名信息通过表单的方式上传。POST上传对象的流程主要如下:

首先,创建一个安全策略,指定请求中需要满足的条件,比如:桶名、对象名前缀;

然后,创建一个基于此策略的签名,需要签名的请求表单中必须包含有效的signature和policy;

最后,创建一个表单将对象上传到桶中。

1、基于浏览器上传的表单中携带签名

官网链接:https://support.huaweicloud.com/api-obs/obs_04_0012.html

1.1、签名的计算原理和计算方法

原理图示

计算方法

1.构造请求Policy:

例如一个最简单的请求Policy如下:

Policy = {"expiration": "2020-12-21T12:00:00.000Z","conditions": [{"bucket": "obs-test"},["eq","$key","post.txt"],]
}

2.对请求Policy进行UTF-8编码。

3.对第二步的结果进行Base64编码。

4.使用SK对第三步的结果进行HMAC-SHA1签名计算。

5.对第四步的结果进行Base64编码,得到签名。

签名如以下形式(28位长度的BASE64编码的字符串):

CVs7GTY6n8Gdhc74Gj+QhpbxtT4=

即:StringToSign = Base64( UTF-8-Encoding-Of( policy ) )

Signature = Base64( HMAC-SHA1( YourSecretAccessKeyID, StringToSign ) )

计算示例

例:需要通过浏览器表单上传对象”post.txt”到桶”obs-test”下,同时设置对象ACL为公共读,如何构造请求并计算签名?

1、首先构造请求Policy:

设置请求过期时间:2020-12-21T12:00:00.000Z

桶名:obs-test

对象ACL:public-read

匹配条件:对象名=post.txt

2、构造Policy如下:

{"expiration": "2020-12-21T12:00:00.000Z","conditions": [{"bucket": "obs-test"},{"x-obs-acl": "public-read"},["eq","$key","post.txt"],]
}

3、根据签名算法,将Policy进行UTF-8编码后再进行BASE64编码,再进行HMAC-SHA1计算后获得签名结果:odouyqpyXcYlKQz7G1/EaUNfJUE=

1.2、签名计算的实现方式

以Python计算签名代码为例,供参考:

1.  import hashlib
2.  import hmac
3.  import binascii
4.
5.  # 验证信息
6.  SK = '您的secret_access_key_id'
7.
8.  # Policy
9.  canonical_string = '''''{
10.   "expiration": "2020-12-21T12:00:00.000Z",
11.   "conditions": [
12.     {
13.       "bucket": "obs-test"
14.     },
15.     {
16.     "x-obs-acl": "public-read"
17.     },
18.     [
19.       "eq",
20.       "$key",
21.       "post.txt"
22.     ],
23.   ]
24. }'''
25.
26. policybase64 = binascii.b2a_base64(canonical_string.encode('utf-8'))
27. policybase64 = policybase64[:-1].decode('UTF-8')
28. # Policy的Base64编码
29. print(policybase64)
30. hashed = hmac.new(SK.encode('UTF-8'), policybase64.encode('UTF-8'), hashlib.sha1)
31. encode_canonical = binascii.b2a_base64(hashed.digest())[:-1].decode('UTF-8')
32. # 签名
33. print(encode_canonical)  

说明:

1. policy使用json格式,conditions可以支持 { } 和 [ ] 两种方式,{ }中包含表单元素的key和value两项,以冒号分隔;[ ]中包含条件类型、key、value三项,以逗号分隔,元素key之前使用$字符表示变量;

2.下表内的字符都必须进行转义:

1.3、基于浏览器表单上传的Policy与其他方式的StringToSign的异同

基于浏览器表单上传时,匹配条件可以设置为“Starts-With”,即前缀匹配而非精确匹配,因此在上传时适用于更广的场景。

OBS API实战篇

OBS提供了REST(Representational State Transfer)风格API,支持您通过HTTP/HTTPS请求调用。

通过前述的签名计算方法,想必大家对OBS的API鉴权方式已经有所了解,下文将通过Postman、cURL、编码等方法对OBS的API进行实战调用。

1、OBS支持的API列表

详见官网链接:https://support.huaweicloud.com/api-obs/obs_04_0005.html

2、构造请求

本节主要介绍OBS RESTful 请求的构成

2.1、请求URI

OBS根据桶和对象以及所对应的子资源参数来确定具体的URI,当需要进行资源操作时,可以使用这个URI地址。

URI的一般格式为(方括号内为可选项):

protocol://[bucket.]domain[:port][/object][?param]

URI中参数的具体含义如下:

2.2、请求方法

HTTP方法(也称为操作或动词),它告诉服务你正在请求什么类型的操作。

华为云对象存储支持以下的REST请求方法:

2.3、请求消息头

请求消息头是可选的附加请求头字段,如指定的URI和HTTP方法所要求的字段。以下是OBS的公共请求消息头:

2.4、请求消息体(可选)

请求消息体通常以结构化格式(如JSON或XML)发出,与请求消息头中Content-type对应,传递除请求消息头之外的内容。若请求消息体中参数支持中文,则中文字符必须为UTF-8编码。

每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。

3、发起请求

本文以列举桶内对象为例,说明各种客户端发起请求调用OBS API的流程。

3.1、构造请求

1、按照上述2.1构建请求URI,本例中的URI即为“bucketname.obs.cn-north-4.myhuaweicloud.com”;

2.按照上述2.2选择对应的请求方法,本例使用“GET”请求方法;

3.按照2.3选择对应的请求消息头,由于本例的请求为GET请求,因此Content-Type、Content-Length、Content-MD5都设置为空字符串;

其中“Authorization”请求头中的签名需要根据前文所述的签名计算方法进行计算:

StringToSign=GET

Thu, 03 Sep 2020 01:57:08 GMT

/bucketname/

将其进行加密并进行编码后,获得Authorization头域为:OBS Y5IBJTPVZBXYXVLKVOSZ:L0h7P/XDJltLkT/arekZy3Ysh68=

4.传入对应的请求消息体,本例中不涉及。

3.2、使用PostMan发起请求

Postman是一种网页调试与发送网页http请求的chrome插件。我们可以用来很方便的模拟get或者post或者其他方式的请求来调试接口。

由于Postman具有可视化的操作界面,因此调试接口过程不再赘述。

注意事项:

当在请求中不手动指定“Content-Type”等头域时,Postman会自动生成头域,可能会导致签名不匹配的情况,可通过点击红框中的按钮将隐藏头域显示以便定位此类问题;

3.3、使用cURL发起请求

cURL是利用URL语法在命令行方式下工作的文件传输工具。利用cURL可以调试OBS提供的接口。在使用curl调试OBS API时,需要用到以下的语法:

-H HTTP请求头

-X HTTP方法

调用OBS提供的列举对象接口时,在Linux终端下执行以下命令:

curl -X GET https://bucketname.obs.cn-north-4.myhuaweicloud.com -H "Content-Type:" -H "Authorization:OBS Y5IBJTPVZBXYXVLKVOSZ:*****" -H "Date:Tue, 25 Aug 2020 03:16:39 GMT" –kv

即可获取到接口返回的信息。

注意事项:

curl命令所携带的 –k参数允许curl使用非安全的ssl连接并且传输数据(证书不受信),而-v参数能输出更详细的参数便于debug。

3.4、使用HTTP请求库发起请求

通过编码发起请求,以Python常见的HTTP请求库requests库为例,代码如下:(示例代码中已集成签名计算)

1.  import hashlib
2.  import hmac
3.  import binascii
4.  from datetime import datetime
5.  import requests
6.  import time
7.
8.  AK = "Input Your Access Key Id"
9.  SK = "Input Your Secret Access Key Id"
10.
11.
12. time = time.time()
13. time = int(time)
14. time = str(time)
15.
16. # 计算签名
17. httpMethod = 'GET'
18. contentType = ''
19. Conten**5 = ''
20. date = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
21. canonicalizedHeaders = ''
22. canonicalizedResource = '/obs-yuchenyu/'
23. canonical_string = httpMethod + "\n" + Conten**5 + "\n" + contentType + "\n" + date + "\n" + canonicalizedHeaders + canonicalizedResource
24. hashed = hmac.new(SK.encode('UTF-8'), canonical_string.encode('UTF-8'), hashlib.sha1)
25. encode_canonical = binascii.b2a_base64(hashed.digest())[:-1].decode('UTF-8')
26.
27. url = 'https://obs-yuchenyu.obs.cn-north-4.myhuaweicloud.com/'
28.
29. # 生成请求头
30. headers = {
31.     'Date': date,
32.     'Authorization': 'OBS {}:{}'.format(AK, encode_canonical),
33.     'Content-Type': '',
34.     'Content-MD5': ''
35. }
36.
37.
38. # 发送请求
39. resp = requests.get(url, headers=headers, verify=False)
40. print(resp.status_code)
41. print(resp.headers)
42. print(resp.content.decode('utf-8'))
返回结果如下:
"C:\Program Files\Python37\python.exe" "D:/OBS PythonSDK/OBS_API.py"
200
{'via': 'proxy A', 'Date': 'Tue, 25 Aug 2020 03:25:59 GMT', 'Server': 'OBS', 'Connection': 'Keep-Alive', 'x-obs-id-2': '32AAAQAAEAABAAAQAAEAABAAAQAAEAABCTDP5fqiYrOrqBlcJ91P0KqhCGTp+5Pl', 'Content-Type': 'application/xml', 'Content-Length': '28217', 'x-obs-request-id': '0000017423A6A7AA44CB43873F3DBCD6', 'x-obs-bucket-location': 'cn-north-4'}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ListBucketResult xmlns="http://obs.myhwclouds.com/doc/2015-06-30/">……
Process finished with exit code 0

点击关注,第一时间了解华为云新鲜技术~

号外,华为云官方开发者推广招募计划正在火热进行中,点击立即了解详情

OBS鉴权实现的宝典秘籍,速拿!相关推荐

  1. 一文带你掌握OBS的两种常见的鉴权方式

    OBS提供了REST(Representational State Transfer)风格API,支持您通过HTTP/HTTPS请求调用.在调用OBS的API前,需要了解OBS的鉴权认证方式.本文就将 ...

  2. springcloud 微服务鉴权_我对微服务、SpringCloud、k8s、Istio的一些杂想

    一.微服务与SOA "微服务"是一个名词,没有这个名词之前也有"微服务",一个朗朗上口的名词能让大家产生一个认知共识,这对推动一个事务的发展挺重要的,不然你叫微 ...

  3. 阿里云实时音视频直播鉴权java代码示例

    阿里云鉴权官网说明https://help.aliyun.com/document_detail/85018.html?source=5176.11533457&userCode=yolmum ...

  4. RTSP向ZLM流媒体服务器的推流和拉流鉴权

    文章目录 前言 一.HTTP Hook 二.向ZLM推流鉴权 三.向ZLM拉流 四.参考 前言 本篇博客的测试环境: Windows 10 + Qt 5.12.2 MSVC. 由于项目中使用了RTSP ...

  5. java鉴权_一个开箱即用的高效认证鉴权框架,专注于restful api的认证鉴权动态保护...

    作者:tomsun28 来源:SegmentFault 思否 写在开头 看了看这个专栏的最近一篇文章已经是两年前了,时间过得好快.应该是出学校后时间就很快了.两年前因为用shiro后,自己就按着想法开 ...

  6. 请求令牌 接口_时序图说明JWT用户认证及接口鉴权的细节

    JWT用户认证及接口鉴权的细节以及原理 一.回顾JWT的授权及鉴权流程 在笔者的上一篇文章中,已经为大家介绍了JWT以及其结构及使用方法.其授权与鉴权流程浓缩为以下两句话: 授权:使用可信用户信息(用 ...

  7. 快速搭建一个网关服务,动态路由、鉴权看完就会(含流程图)

    [文章来源]https://sourl.cn/tcbSPi 前 言 本文记录一下我是如何使用Gateway搭建网关服务及实现动态路由的,帮助大家学习如何快速搭建一个网关服务,了解路由相关配置,鉴权的流 ...

  8. 面试官:谈谈JWT鉴权的应用场景及使用建议?

    作者:mantou叔叔 || 编辑:搜云库技术团队 出处:https://dwz.cn/7bikj3yk 1. JWT 介绍 JSON Web Token(JWT)是一个开放式标准(RFC 7519) ...

  9. ASP.netcore MVC钉钉H5微应用(二)鉴权

    官方文档:鉴权 由于官方文档没有C#的,所以自己弄了个C#的 需要注意的是,不是所有功能都需要鉴权,但是在需要鉴权的地方,一定要有 -第一步:获得access_token 我使用的是企业内部应用 具体 ...

最新文章

  1. 30 元素可视区client系列
  2. Hadoop入门实例——WordCount统计单词
  3. 【译】Engineering Security Through Coordination Problems
  4. 摆脱困境:从计划作业中调用安全方法
  5. 穷人迈向富翁的理财十步曲
  6. Magnet :让Mac上的分屏更好用
  7. 如何查看java安装路径
  8. Starting Programe
  9. 【设计开发命名必备】英语单词缩写规则
  10. 科学计算机上的符号是什么意思,计算器上各个符号是什么意思_计算器各键说明【图文】-太平洋IT百科手机版...
  11. 掌门优课用户量增多,用户看上了它什么?
  12. 网址短连接 short url
  13. 基于FPGA的数据采集—信号产生篇
  14. pyecharts折线图上symbol(小圆圈)颜色的修改方法
  15. Pandas时间序列进阶(日期范围,频率,移位,时区处理)
  16. strapi CMS 框架内容管理
  17. 集合论基本概念与其运算
  18. JVM-Java虚拟机
  19. 如何使用eNSP模拟器连接本地虚拟机
  20. linux部署csgo服务器,CSGOLinux服务器架设20150311_图文.doc

热门文章

  1. 在Vrep中如何创建基于QT的GUI
  2. CAN笔记(11) 位时序
  3. 深度学习笔记(11) 超参数调试
  4. c语言printf族函数,C语言中的printf族函数深入详解
  5. mysql 数据库连表查询语句_数据库连表查询sql语句
  6. nyoj 聪明的kk
  7. 【.Net】C#实现多线程的方式:使用Parallel类
  8. 新发布 | Azure镜像市场正式上线
  9. SharePoint服务器连接配置数据库的连接字符串保存位置
  10. 数据结构—链表-单链表应用-拆分链表