前言
百度SDK的认证体系有点复杂,有时候让人有点摸不着头脑。直到我看到了这个网页,我才有点豁然开朗。
特此,我尝试使用了这三种鉴权方式,里面碰到了不少坑,于是将其整理成文档,倾情推出。
对应的源码测试工程也放在csdn下,文末有链接,有需要的小伙伴可以去下载。
一、百度的鉴权机制
https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu
果然,百度有三种鉴权的机制。对于初学者而言非常容易搞懵。
二、第一种方式
2.1、创建应用
在ModuleBuilder中创建应用:
应用创建完毕(从上图来看这个应用覆盖的服务还是非常丰富的),如下图:
2.2、获取Key
将Key提取出来,如下图:
2.3、获取access_token
以下是获取access_token的代码:
import requests
API_KEY='填入申请得到的API Key',
SECRET_KEY = "填入申请得到的Secret Key"
def get_access_token():
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
response = requests.post(url, params=params)
print(response.json()) # 打印整个JSON响应,检查结构
return str(response.json().get("access_token"))
get_access_token()
运行结果如下:
说明能正确的获取access_token
其实从调试的信息来看,是一个键值的集合。(这个和第三种形成的一个长字符串有所不同)
三、第二种方式
3.1、表面上的API Key
从这个入口进入:
选API Key,可以看到已经建立好的三条API Key,如下图:
但是,千万要注意,这个API Key往往不是我们程序中直接要调用的API Key。
为什么这么说呢,可以参考知乎上的一篇文章:https://zhuanlan.zhihu.com/p/700011842
可参照这篇文章的第三部分,就可以了解到这里生成的API Key,实际上前缀字符串+签名摘要。所以,百度对这种关键字的称呼是比较混乱的,非常容易产生混淆。
3.2、程序和网站上的对应关系
分别对应百度网站上的:
四、第三种方式
4.1、Access Key和Secret Key的获取
进入到API Key的设定界面,如下图:
4.2、调用程序来获取token
详细代码:
import os
from qianfan import Qianfan
from qianfan.resources.console.iam import IAM
def test_create_token():
response = IAM.create_bearer_token(
expire_in_seconds=2592000,
ak='申请得到的Access Key',
sk='申请得到的Secret Access Key',
)
print(response.body['token'])
test_create_token()
这是运行的结果:
说明,可以获取到token,这个token一般比较长,大约有580个字符左右。
五、源码链接
https://download.csdn.net/download/quickrubber/90562323
(采用Python3.8,编译环境是PyCharm)