直达内容

获取用户 OAuth 授权

机器人如果要访问用户的一些信息,例如用户的手机号,联系人,资产等信息,就需要用户给机器人授权。

请求授权

GET https://www.mixin.one/oauth/authorize?client_id=CLIENT_ID&scope=PROFILE:READ+ASSETS:READ&response_type=code&return_to=

参数

client_id
*必须
机器人 client_id
scope
*必须
私有需要签名
response_type
*必须
返回的 authorization code
state可选项, 应用生成的 base64 的字符串. 详细介绍: https://auth0.com/docs/secure/attack-protection/state-parameters

可选项,利用 PKCE 增加安全性。详情链接: https://www.oauth.com/oauth2-servers/pkce/authorization-request , 下面的方式只是增加了安全性,并不影响上面的使用

参数

client_id
*必须
机器人 client_id
scope
*必须
私有需要签名
response_type
*必须
返回的 authorization code
state可选项, 应用生成的 base64 的字符串. 详细介绍: https://auth0.com/docs/secure/attack-protection/state-parameters
code_challengecode challenge 由客户端生成 随机的 code verifier, 然后 SHA256 编码后的结果.
code_challenge_method默认 `SHA256`

获取访问令牌 (Access Token)

在上一步授权完成后,会拿到 authorization code, 然后根据 code 来获取其它的 OAuth 信息。

POST /oauth/token

这一步主要是拿到 OAuth 签名所需要的信息, 用 OAuth 签名, 链接

API 端点 URL

 https://api.mixin.one/oauth/token

请求体

{
"client_id": "机器人的 client_id",
"code": "授权完成后返回的 authorization code",
"client_secret": "机器人的 secret",
"code_verifier": "",
"ed25519": "ed25519 的随机公钥,客户端需要保存私钥后面签名用",
}

请求示例

curl -i -X POST -H "Content-Type: application/json"  https://api.mixin.one/oauth/token --data PAYLOAD
Response
{
"ed25519": "ed25519 的随机公钥",
"scope": "用户授权的 scope, e.g. 'PROFILE:READ ASSETS:READ'"
"authorization_id": "authorization 的 id",
}

取消授权

在授权之后,用户可以在 Mixin Messenger 中随时取消授权。 此外用户的授权有效期是一年,过期后还需要继续访问相关 API, 需要用户重新授权。

下一篇中我们会列出,机器人可以获取的用户的权限范围。