fix【README】typo, add doc【API签名】
This commit is contained in:
@@ -1,69 +0,0 @@
|
||||
# API认证与鉴权
|
||||
|
||||
- [Cookie方式(web端)](#Cookie方式(web端))
|
||||
- [APP方式(手机客户端及TV端等)](#APP方式(手机客户端及TV端等))
|
||||
|
||||
---
|
||||
|
||||
## Cookie方式(web端)
|
||||
|
||||
cookie中的值在访问登录接口成功登录时,用`set-cookie`写入
|
||||
|
||||
在访问api时为`Cookie`头的数据
|
||||
|
||||
Token有效期为1月,更改密码或过期失效
|
||||
|
||||
| cookie项 | 含义 | 备注 |
|
||||
| ----------------- | ----------------- | ------------------------------------------ |
|
||||
| DedeUserID | 当前用户mid | |
|
||||
| DedeUserID__ckMd5 | 用户mid md5校验值 | |
|
||||
| SESSDATA | 登录Token | 用于用户识别与鉴权<br />作用同`access_key` |
|
||||
| bili_jct | CSRF Token | 用于操作性接口 |
|
||||
|
||||
## APP方式(手机客户端及TV端等)
|
||||
|
||||
| 参数 | 含义 | 备注 |
|
||||
| ------------- | ---------------- | ---------------------- |
|
||||
| access_key | APP登录Token | 注意必须在第一个参数 |
|
||||
| appkey | APP密钥 | |
|
||||
| refresh_token | APP刷新登录Token | 仅在刷新时使用 |
|
||||
| ts | 当前时间戳 | |
|
||||
| sign | APP签名 | 注意必须在最后一个参数 |
|
||||
|
||||
**接口鉴权:**
|
||||
|
||||
使用`appkey`作为api的必要参数,并使用除`sign`外所有参数的url字串后连接相对应的盐值进行**md5校验**(32位小写),把计算结果作为sign的值,与前面参数一同发送
|
||||
|
||||
**appkey与appsec一一对应**
|
||||
|
||||
已知的appkey与签名:
|
||||
|
||||
| appkey | appsec(sign盐值) | 平台 | 应用 | 备注 |
|
||||
| ---------------- | -------------------------------- | ---- | -------- | -------- |
|
||||
| 07da50c9a0bf829f | 25bdede4e1581c836cab73a48790ca6e | 安卓 | 概念版 | |
|
||||
| 1d8b6e7d45233436 | 560c52ccd288fed045859ed18bffd973 | 安卓 | 客户端 | 一般用途 |
|
||||
| 178cf125136ca8ea | 34381a26236dd1171185c0beb042e1c6 | 安卓 | 概念版 | |
|
||||
| 37207f2beaebf8d7 | e988e794d4d4b6dd43bc0e89d6e90c43 | 安卓 | biliLink | |
|
||||
| 4409e2ce8ffd12b8 | 59b43e04ad6965f34319062b478f83dd | TV | 客户端 | |
|
||||
| 57263273bc6b67f6 | a0488e488d1567960d3a765e8d129f90 | 安卓 | 客户端 | |
|
||||
| 5dce947fe22167f9 | | 安卓 | 必剪 | |
|
||||
| 7d336ec01856996b | a1ce6983bc89e20a36c37f40c4f1a0dd | 安卓 | 概念版 | |
|
||||
| 85eb6835b0a1034e | 2ad42749773c441109bdc0191257a664 | | | |
|
||||
| 8e16697a1b4f8121 | f5dd03b752426f2e623d7badb28d190a | 安卓 | 国际版 | |
|
||||
| aae92bc66f3edfab | af125a0d5279fd576c1b4418a3e8276d | PC | 投稿工具 | |
|
||||
| ae57252b0c09105d | c75875c596a69eb55bd119e74b07cfe3 | 安卓 | 国际版 | |
|
||||
| bb3101000e232e27 | 36efcfed79309338ced0380abd824ac1 | 安卓 | 国际版 | |
|
||||
| bca7e84c2d947ac6 | 60698ba2f68e01ce44738920a0ffe768 | 安卓 | 客户端 | 登录专用 |
|
||||
| cc578d267072c94d | | 安卓 | 轻视频 | |
|
||||
| cc8617fd6961e070 | | 安卓 | 漫画 | |
|
||||
| iVGUTjsxvpLeuDCf | aHRmhWMLkdeMuILqORnYZocwMBpMEOdt | 安卓 | 客户端 | 取流专用 |
|
||||
|
||||
例如:
|
||||
|
||||
参数的url为`appkey=1d8b6e7d45233436&test=123`->连接盐值后为`appkey=1d8b6e7d45233436&test=123560c52ccd288fed045859ed18bffd973`->进行md5 32bit校验,结果为`8a3fdd74911862810f5c78f65afcce5d`->最终参数为`appkey=1d8b6e7d45233436&test=123&sign=8a3fdd74911862810f5c78f65afcce5d`
|
||||
|
||||
**身份认证:**
|
||||
|
||||
使用参数` access_key `进行身份验证,有效期为1月,作用同`SESSDATA`
|
||||
|
||||
可以使用` refresh_token `进行刷新
|
||||
83
other/API_sign.md
Normal file
83
other/API_sign.md
Normal file
@@ -0,0 +1,83 @@
|
||||
# API 签名与鉴权
|
||||
|
||||
部分客户端专用的 rest api 存在基于 sign 的鉴权,需要使用规定的`appkey`及其对应的`appsec`与原始请求参数进行签名计算
|
||||
|
||||
不同`appkey`对应不同的 app (如客户端、概念版、必剪、漫画、bililink等)
|
||||
|
||||
不同平台同 app 也会存在不同的 `appkey`(如安卓端、ios端、TV端等)
|
||||
|
||||
同平台同 app 下不同功能也会存在不同的 `appkey`(如登录专用、取流专用等)
|
||||
|
||||
**appkey与appsec一一对应**
|
||||
|
||||
- [API 签名的计算方式](#API 签名的计算方式)
|
||||
- [已知的 APPKey](#已知的 APPKey)
|
||||
|
||||
---
|
||||
|
||||
## API 签名的计算方式
|
||||
|
||||
首先为参数中添加`appkey`字段,然后按照参数的 key 重新排序,再将重排序后的参数使用 url query 格式序列化拼接与该 appkey 相对应的 appsec (盐值) 进行**md5 hash计算**(32位小写),该 hash 便是 API 签名
|
||||
|
||||
为参数尾部增添`sign`字段,它的值为上一步计算所得的 hash,一并作为表单提交
|
||||
|
||||
**实例:**
|
||||
|
||||
使用 appkey = `1d8b6e7d45233436`, appsec = `560c52ccd288fed045859ed18bffd973` 对如下 `params` 参数进行签名
|
||||
|
||||
```python
|
||||
import hashlib
|
||||
import urllib.parse
|
||||
|
||||
def appsign(params, appkey, appsec):
|
||||
'为请求参数进行 api 签名'
|
||||
params.update({'appkey': appkey})
|
||||
params = dict(sorted(params.items())) # 重排序参数 key
|
||||
query = urllib.parse.urlencode(params) # 序列化参数
|
||||
sign = hashlib.md5((query+appsec).encode()).hexdigest() # 计算 api 签名
|
||||
params.update({'sign':sign})
|
||||
return params
|
||||
|
||||
appkey = '1d8b6e7d45233436'
|
||||
appsec = '560c52ccd288fed045859ed18bffd973'
|
||||
params = {
|
||||
'id':114514,
|
||||
'str':'1919810',
|
||||
'test':'いいよ,こいよ',
|
||||
}
|
||||
signed_params = appsign(params, appkey, appsec)
|
||||
query = urllib.parse.urlencode(signed_params)
|
||||
print(signed_params)
|
||||
print(query)
|
||||
```
|
||||
|
||||
输出以下内容,分别是进行 api 签名后参数的 dict 以及 url query 格式
|
||||
|
||||
```
|
||||
{'appkey': '1d8b6e7d45233436', 'id': 114514, 'str': '1919810', 'test': 'いいよ,こいよ', 'sign': '01479cf20504d865519ac50f33ba3a7d'}
|
||||
appkey=1d8b6e7d45233436&id=114514&str=1919810&test=%E3%81%84%E3%81%84%E3%82%88%EF%BC%8C%E3%81%93%E3%81%84%E3%82%88&sign=01479cf20504d865519ac50f33ba3a7d
|
||||
```
|
||||
|
||||
## 已知的 APPKey
|
||||
|
||||
| appkey | appsec(sign盐值) | 平台 | 应用 | 备注 |
|
||||
| ---------------- | -------------------------------- | ---- | -------- | -------- |
|
||||
| 07da50c9a0bf829f | 25bdede4e1581c836cab73a48790ca6e | 安卓 | 概念版 | |
|
||||
| 1d8b6e7d45233436 | 560c52ccd288fed045859ed18bffd973 | 安卓 | 客户端 | 一般用途 |
|
||||
| 178cf125136ca8ea | 34381a26236dd1171185c0beb042e1c6 | 安卓 | 概念版 | |
|
||||
| 27eb53fc9058f8c3 | c2ed53a74eeefe3cf99fbd01d8c9c375 | ios | 客户端 | 一般用途 |
|
||||
| 37207f2beaebf8d7 | e988e794d4d4b6dd43bc0e89d6e90c43 | 安卓 | biliLink | |
|
||||
| 4409e2ce8ffd12b8 | 59b43e04ad6965f34319062b478f83dd | TV | 客户端 | |
|
||||
| 57263273bc6b67f6 | a0488e488d1567960d3a765e8d129f90 | 安卓 | 客户端 | |
|
||||
| 5dce947fe22167f9 | | 安卓 | 必剪 | |
|
||||
| 7d336ec01856996b | a1ce6983bc89e20a36c37f40c4f1a0dd | 安卓 | 概念版 | |
|
||||
| 85eb6835b0a1034e | 2ad42749773c441109bdc0191257a664 | | | |
|
||||
| 8e16697a1b4f8121 | f5dd03b752426f2e623d7badb28d190a | 安卓 | 国际版 | |
|
||||
| aae92bc66f3edfab | af125a0d5279fd576c1b4418a3e8276d | PC | 投稿工具 | |
|
||||
| ae57252b0c09105d | c75875c596a69eb55bd119e74b07cfe3 | 安卓 | 国际版 | |
|
||||
| bb3101000e232e27 | 36efcfed79309338ced0380abd824ac1 | 安卓 | 国际版 | |
|
||||
| bca7e84c2d947ac6 | 60698ba2f68e01ce44738920a0ffe768 | 安卓 | 客户端 | 登录专用 |
|
||||
| cc578d267072c94d | | 安卓 | 轻视频 | |
|
||||
| cc8617fd6961e070 | | 安卓 | 漫画 | |
|
||||
| iVGUTjsxvpLeuDCf | aHRmhWMLkdeMuILqORnYZocwMBpMEOdt | 安卓 | 客户端 | 取流专用 |
|
||||
| YvirImLGlLANCLvM | JNlZNgfNGKZEpaDTkCdPQVXntXhuiJEM | ios | 客户端 | 取流专用 |
|
||||
Reference in New Issue
Block a user