7 * 24
多渠道服务支持
太空地图开放鉴权指南
更新时间:2024-03-29 15:30:00
太空地图服务采用OAuth 2.0开放授权协议,允许第三方应用在获得用户授权后安全访问太空地图资源,而无需获取用户的用户名和密码。
在开始集成前,您需要完成以下步骤:
太空地图服务支持以下两种授权模式,请根据您的应用类型选择:
| 授权模式 | 描述 | 适用场景 |
|---|---|---|
| 授权码模式(Authorization Code) | 用户授权后,服务端返回授权码(Code),应用再使用此Code向后端令牌端点交换访问令牌(Access Token)。 | 应用有后端服务器,能够安全地存储和使用客户端密钥(client_secret),例如传统的Web应用。 |
| 授权码扩展模式(PKCE) | 授权码模式的增强扩展,通过动态创建并验证代码验证器(code_verifier)和挑战值(code_challenge)来提升安全性,无需使用客户端密钥。 | 应用没有后端服务器或无法安全存储密钥,例如单页应用(SPA)、移动应用程序(App)。 |
构建太空地图授权请求端点,请求用户授权。接口地址为 GET /cgi/oauth/authorize。
https://spacemapp.cn/cgi/oauth/authorize?
response_type=code&
client_id=<您的客户端ID>&
redirect_uri=<应用的回调地址>&
state=<随机串>&
scope=
| 参数 | 必选 | 说明 |
|---|---|---|
response_type | 是 | 填写为 code,表示为授权码模式。 |
client_id | 是 | 应用的唯一标识。使用应用ID(app_id) |
redirect_uri | 是 | 用户授权后重定向的URI,需与注册时设置的一致。 |
scope | 否 | 留空 |
state | 是 | 随机串,用于防CSRF,在返回授权码Code时原封不动返回。。 |
access_type | 否 | 设置为 offline 以在首次授权时获取刷新令牌(Refresh Token)。 |
用户被引导至太空地图登录页面,并在此登录。
用户授权后,浏览器将被重定向到您指定的 redirect_uri,并在URL中附带授权码。
https://yourapp.com/callback?
code=<返回的授权码Code>&
state=state_parameter_passthrough_value应用后端使用收到的授权码,向令牌端点请求访问令牌。接口地址为 POST /cgi/oauth/token。
POST /cgi/oauth/oauth/token HTTP/1.1
Host: spacemapp.cn
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=<返回的授权码Code>&
client_id=<您的客户端ID>&
client_secret=<您的客户端密钥>&
redirect_uri=<应用的回调地址>| 参数 | 必选 | 说明 |
|---|---|---|
grant_type | 是 | OAuth 2.0规范定义的字段,必须为authorization_code。 |
code | 是 | 上一步获取的授权码。Code有效期为5分钟,且只能请求一次。 |
client_id | 是 | 在接入前准备中得到的OAuth 2.0客户端ID,对于AppGallery Connect类应用,该值为应用的APP ID。 |
client_secret | 是 | 在接入前准备中给客户端ID分配的密钥,对于AppGallery Connect类应用,该值为应用的APP SECRET。 |
redirect_uri | 是 | 与第一步中的 redirect_uri 一致。 |
{
"access_token": "<返回的Access Token>",
"expires_in": 3600,
"refresh_token": "<返回的Refresh Token>",
"token_type": "Bearer",
"scope": "profile openid"
}| 参数 | 必选 | 说明 |
|---|---|---|
access_token | 是 | 用户的Access Token。 |
expires_in | 是 | Access Token的剩余有效期,单位:秒。 |
token_type | 是 | 固定返回Bearer,标识返回Access Token的类型。 |
scope | 是 | 生成的Access Token中包含的scope。 |
refresh_token | 是 | 若入参中包含access_type=offline,则会返回此参数,该参数用于刷新Access Token。 |
PKCE模式通过一个由客户端动态生成的代码验证器(Code Verifier)和其转换后的代码挑战(Code Challenge)来增强安全性,特别适合公共客户端。
在发起授权请求前,客户端需要先生成一个高熵的随机字符串作为 Code Verifier,然后对其进行哈希(通常使用S256算法)和Base64URL编码,得到 Code Challenge。
接口地址同样为 GET /cgi/oauth/authorize,但需额外携带PKCE相关参数。
https://spacemapp.cn/cgi/oauth/authorize?
response_type=code&
client_id=<客户端ID>&
redirect_uri=<应用的回调地址>&
scope=openid+<业务的权限scope>&
state=state_parameter_passthrough_value&
code_challenge=ovoy4lehgHbv8uNmif_hak3bH2_Ylk6_fWP0UL232QQ&
code_challenge_method=S256| 参数 | 必选 | 说明 |
|---|---|---|
response_type | 是 | 填写为"code",表示为授权码扩展模式。 |
client_id | 是 | 在接入前准备中得到的OAuth 2.0客户端ID,对于AppGallery Connect类应用,该值为应用的APP ID。 |
redirect_uri | 是 | 授权后要回调的地址URL,即开发者应用接收授权码code的URL。 |
code_challenge_method | 是 | 对code_verifier进行编码的方法。当前支持两个枚举值,建议S256。 · plain:原文,不编码 · S256:code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier))) |
code_challenge | 是 | code_verifier进行编码后的值。 |
scope | 是 | 一个字符串数组,以空格分开(URL编码后空格变为加号+),必须包含字符串"openid",其他权限请参见业务的scope描述,根据需要拼接权限项scope。 |
state | 是 | 随机串,用于防CSRF,在返回授权码Code时原封不动返回。 |
用户被引导至太空地图登录页面,并在此登录。
用户授权后,浏览器将被重定向到您指定的 redirect_uri,并在URL中附带授权码。
https://yourapp.com/callback?
code=<返回的授权码Code>&
state=state_parameter_passthrough_value应用在请求令牌时,必须提供之前生成的 Code Verifier。接口地址为 POST /cgi/oauth/token。
POST /cgi/oauth/token HTTP/1.1
Host: spacemapp.cn
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=<返回的授权码Code>&
client_id=<客户端ID >&
redirect_uri=<应用的回调地址>&
code_verifier=123444444dfd4sadfsdwew321454567587658776t896fdfgdscvvbfxdgfdgfdsfasdfsdgd233| 参数 | 必选 | 说明 |
|---|---|---|
grant_type | 是 | OAuth 2.0规范定义的字段,必须为"authorization_code"。 |
code | 是 | 上一步获取的授权码。Code有效期为5分钟,且只能请求一次。 |
client_id | 是 | 在接入前准备中得到的OAuth 2.0客户端ID,对于AppGallery Connect类应用,该值为应用的APP ID。 |
code_verifier | 是 | 随机字符串,必须与编码前的字符串一致,用来验证authorize请求和token请求来自于同一个客户端。 |
redirect_uri | 是 | 授权后要回调的地址URL,即开发者应用接收授权码code的URL。与上一步中传入的回调地址一致。 |
注意:在PKCE流程中,请求通常不包含 client_secret。
{
"access_token": "<返回的Access Token>",
"expires_in": 3600,
"refresh_token": "<返回的Refresh Token>",
"token_type": "Bearer",
"scope": "profile openid"
}| 参数 | 必选 | 说明 |
|---|---|---|
access_token | 是 | 用户的Access Token。 |
expires_in | 是 | Access Token的剩余有效期,单位:秒。 |
token_type | 是 | 固定返回Bearer,标识返回Access Token的类型。 |
scope | 是 | 生成的Access Token中包含的scope。 |
refresh_token | 是 | 若入参中包含access_type=offline,则会返回此参数,该参数用于刷新Access Token。 |
获取到访问令牌(Access Token)后,即可在请求头中携带它来调用受保护的太空地图API。例如,获取用户信息的接口为 GET /cgi/oauth/userinfo。
GET /cgi/oauth/userinfo HTTP/1.1
Host: spacemapp.cn
Authorization: Bearer ACCESS_TOKENstate 参数,并在回调时验证其一致性,以有效防范CSRF攻击。