Skip to main content

API Key 鉴权

在默认环境中,使用用户名,密码登录后即可换回 token,可以正常使用 token 进行鉴权,但是在开启了双因子认证后,无法单纯通过用户名,密码换回 token,会需要一个额外的第二因子验证,而在 API 的业务场景中,执行是无交互的,无法进行第二因子验证。

为了在此类环境下可以使用 CloudTower API,CloudTower 引入了 API Key ,以代替 token 进行鉴权。

签发 API Key

API Key 的签发依旧需要依赖 token 鉴权,需要手动登录后获取 token 以后进行创建。

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: $TOKEN" \
--data-raw '{"query": "mutation createApiKey($name: String!) { createApiKey(data: { name: $name }) { id key roles { id preset }}}", "variables": {"name": "$NAME"}}' \
http://$CLOUDTOWER_DOMAIN/api/ | jq -r '.data.createApiKey.key'

执行后将会创建一个权限等同于当前用户的 API Key,返回体中会包含 key 字段,即是生成的 API Key 的值。

使用 API Key

API Key 的使用方式和 token 一致,将其放入 Authorization header 中即可。

curl \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: $KEY" \
--data-raw '{"where":{}}' \
http://$CLOUDTOWER_DOMAIN/v2/api/get-vms | jq ".[]"

删除 API Key

API Key 相比于 token 的优势在于可以随时释放。token 指代的是一个用户,只要用户存在,对应的 token 就一直有效。而 API Key 可以通过 API 进行删除。

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: $TOKEN" \
--data-raw '{"query": "mutation deleteApiKey($key: String!) { deleteApiKey(where: { key: $key }) { id } }", "variables": { "key": "$KEY" }}' \
http://$CLOUDTOWER_DOMAIN/api/

执行后将会删除对应 key 的 API Key。