# 用户授权流程

## 流程概览

1. 在**开发者后台 > 安全配置 > 用户授权回调配置**中配置回调地址。
2. 构造授权跳转链接，用户授权后页面重定向至 `redirect_uri?code={string}&state={string}`。
3. 用 `code` [获取用户 access\_token]()。
4. 用 access\_token [获取用户信息]()。

![调用时序](https://cloudcdn.qwps.cn/open/_img/f1bc475482.png "调用时序")

## 构造授权跳转链接

构造如下链接引导用户授权，授权成功后将重定向至 `redirect_uri`，并附带 `code` 和 `state` 参数。

> ⚠️ **第三方企业应用接入 WPS 应用市场时，请使用专用接口：**[ISV 应用授权接口](https://kdocs.cn/l/ciQyBkr15Rq3)

### 请求说明

| 项目         | 说明                                   |
| ---------- | ------------------------------------ |
| **请求地址**   | `https://openapi.wps.cn/oauth2/auth` |
| **请求方法**   | GET                                  |
| **签名方式**   | 无                                    |
| **支持应用类型** | 企业自建应用、第三方企业应用、第三方个人应用               |
| **权限要求**   | 无                                    |

### 查询参数

| 参数             | 类型     | 必填 | 说明                                                                                                                                                  |
| -------------- | ------ | -- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| client\_id     | string | 是  | 应用 APPID                                                                                                                                            |
| response\_type | string | 是  | 固定值 `code`                                                                                                                                          |
| redirect\_uri  | string | 是  | 开发者后台配置的授权回调地址（需 URL encode）                                                                                                                        |
| scope          | string | 是  | 授权权限，多个用英文逗号分隔，如 `scope1,scope2,scope3`注意传入的scope需要先在 **开发者后台 > 权限管理** 中勾选并申请开通，否则将会报错 ；如果只需要满足单点场景获取当前用户信息时，只需要申请kso.user\_base.read即可，其他场景可以按需申请。 |
| state          | string | 否  | 自定义字符串，用于**防范 CSRF 攻击**和**携带应用上下文**。授权后原样返回。建议使用随机值（如 UUID），回调时校验一致性。                                                                               |

### 示例

```http
GET https://openapi.wps.cn/oauth2/auth?response_type=code&client_id={string}&redirect_uri={string}&scope={scope1,scope2,scope3}&state={string}
```

### 响应行为

* **未登录** → 跳转登录页

![用户登录](https://cloudcdn.qwps.cn/open/_img/fe3c347bd4.png "用户登录")

* **已登录但未授权** → 跳转授权页

![用户授权](https://cloudcdn.qwps.cn/open/_img/8e1198f143.png "用户授权")

* **已授权** → 重定向至 `redirect_uri?code={string}&state={string}`

> 📌 `code` 仅可使用一次，10 分钟内未使用将自动过期。

## 获取用户 access\_token

拿到 `code` 后，在**服务端**调用接口换取 access\_token。详见[获取用户 access\_token](/app-integration-dev/wps365/server/certification-authorization/get-token/get-user-access-token)。

> ⚠️ APPKEY 和 access\_token 属高敏感信息，后续所有接口调用（刷新 token、获取用户信息等）**必须在服务端完成**。

## 刷新用户 access\_token

access\_token 有效期 **2 小时**，可通过 refresh\_token 调用[刷新接口](/app-integration-dev/wps365/server/certification-authorization/get-token/refresh-user-access-token)重新获取。

**关于 access\_token：**

* 刷新后，旧 token 在原有效期内仍可用
* 新旧 token **值不同**，注意区分

**关于 refresh\_token：**

* 使用 refresh\_token 刷新 access\_token 时，会返回一个新的 refresh\_token，该refresh\_token的有效期会继承第一个的，原来的refresh\_token 则会自动失效。
* refresh\_token 的总有效期为 365 天，会随着accees\_token第一次生成后开始计时；直到365天失效，之后需要用户重新授权。