# SSO 登录

## 概述

认证方式目前支持配置企业自有 SSO 认证页面。企业成员可以通过第三方企业代码登录，输入企业代码，进入对应的 SSO 认证页面，认证之后加入访问企业。

## 配置认证方式

### 配置页面样例

企业自有基于标准 oauth2 的 SSO 认证系统，可将 oauth2 三个接口配置到认证方式中，做第三方企业代码登录，如以下 demo，完整接口案例在文档底部。

| 类型         | 地址                                                                                                                                                                     |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 授权页面     | http://demo.com/authorize?client_id=c1ebe466-1cdc-4bd3-ab69-77c3561b9dee&response_type=code&redirect_uri={:redirect_uri}&state={:state}                                  |
| 授权码接口   | http://demo.com/accessToken?client_id=c1ebe466-1cdc-4bd3-ab69-77c3561b9dee&client_secret=d8346ea2-6017-43ed-ad68-19c0f971738b&grant_type=authorization_code&code={:code} |
| 授权令牌接口 | http://demo.com/userInfo?access_token={:access_token}                                                                                                                    |

将以上 demo，配置到[管理后台](https://work.wps.cn)的通讯录 API 同步里，按产品界面分阶段校验这三个接口；

![img](https://cloudcdn.qwps.cn/open/_img/00ded4f2b3.png)

配置成功后，会显示该配置相关的 APPID 和企业代码，之后可用该配置相关的 APPID 或企业代码做 SSO；

![img](https://cloudcdn.qwps.cn/open/_img/59b1f3ce88.png)

### 与第三方认证系统交互流程

#### 方式一：应用集成了协作中台 SDK

当开发者需要将协作中台 SDK 集成到自研企业应用中时，企业应用往往本身存在登录态，此时协作中台 SDK 可基于
企业应用的用户授权完成 SSO。

用户的企业应用通过获取用户授权生成的授权码 Code 及其企业后台 SSO 设置生成的 app_id，并调用协作中台提供的[激活用户&连接](/app-integration-dev/collaboration-middleware/android/connect)接口，完成 SSO 登录。

![img](https://cloudcdn.qwps.cn/open/_img/daf453f52a.png)

#### 方式二：基于企业代码登录

![img](https://cloudcdn.qwps.cn/open/_img/3a59e71ef2.png)

配置认证信息的时候，需要配置企业代码，企业代码用于关联登录用户和预期要登录使用的企业。

企业成员在登录 WPS 的时候，可在登录页选择「更多-第三方企业登录」，输入管理员设置的企业代码，即可进入企业自有 SSO 认证页或者默认 SSO 登录页，输入企业统一认证帐号密码，即可完成登录。

WPS 与第三方 SSO 平台的交互时序图如下：

![img](https://cloudcdn.qwps.cn/open/_img/89aa4e9ad0.png)

#### 方式三：在 WEB 中基于 APPID 发起 SSO

用户基于已配置的认证方式，可用以下链接完成 SSO，可将以下链接作为应用首页，应用地址为：（其中 app_id 为配置 SSO 时生成的 APPID）

```
https://open.wps.cn/oauth/v1/auth?app_id={:app_id}&cb=https%3A%2F%2Fkdocs.cn
```

其中，WPS 与第三方 SSO 平台的交互时序图如下：

![img](https://cloudcdn.qwps.cn/open/_img/20a4fb0c22.png)

### 认证 demo 案例

#### 接口定义

| **类型**     | **请求**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 授权页面     | **Request:** GET /authorize?client_id=c1ebe466-1cdc-4bd3-ab69-77c3561b9dee&response_type=code&redirect_uri={:redirect_uri}&state={:state} HTTP/1.1 <br> **Host:** http://demo.com/ <br> **Content-Type:** application/x-www-form-urlencoded <br> **Response:** HTTP/1.1 302 Found <br> **Location:** https://open.wps.cn/oauth/v1/code?app_id=AK20211008GIMUUL&cb=xxx&code=xxx                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 授权码接口   | **Request:** GET /accessToken?client_id=c1ebe466-1cdc-4bd3-ab69-77c3561b9dee&client_secret=d8346ea2-6017-43ed-ad68-19c0f971738b&grant_type=authorization_code&code={:code} HTTP/1.1 <br> **Host:** http://demo.com/ <br> 或者 <br> POST /accessToken HTTP/1.1 <br> **Host:** http://demo.com/ <br> **Content-Type:** application/x-www-form-urlencodedclient_id=c1ebe466-1cdc-4bd3-ab69-77c3561b9dee&client_secret=d8346ea2-6017-43ed-ad68-19c0f971738b&grant_type=authorization_code&code={:code}<br> **Response:** HTTP/1.1 200 OK <br> **Content-Type:** application/json;charset=UTF-8 <br> **Cache-Control:** no-store <br> **Pragma:** no-cache<br>{ <br> “access_token”:“2YotnFZFEjr1zCsicMWpAA”, <br> “token_type”:“example”, <br> “expires_in”:3600, <br> “refresh_token”:“tGzv3JOkF0XG5Qx2TlKWIA”, <br> “example_parameter”:“example_value” <br> } |
| 授权令牌接口 | **Request:** GET /userInfo?access_token={:access_token} HTTP/1.1 <br> **Host:** http://demo.com/ <br> **Response:** HTTP/1.1 200 OK <br> **Content-Type:** application/json;charset=UTF-8 <br> **Cache-Control:** no-store <br> **Pragma:** no-cache<br>{ <br> “user_name”:“张三”, <br> “union_id”:“ZhangSan”, <br> “avatar”:“http://demo.com/avatar/zhangsan” <br> }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |

### demo 认证参数

| **参数**                              | **含义**                                                                    |
| ------------------------------------- | --------------------------------------------------------------------------- |
| 授权页面地址                          | 授权页面地址是第三方账号授权登录 WPS 时的第三方授权页面地址，可包含固定参数 |
| 重定向 URL 字段（示例：redirect_uri） | 第三方授权页面回调地址字段名                                                |
| access_token 接口地址                 | 第三方服务获取 access_token 接口地址，可包含固定参数                        |
| access_token（示例：access_token）    | 有时效的授权令牌凭证，WPS 用于调用第三方应用的授权接口                      |
| state 字段（示例：state）             | 第三方授权页 state 参数字段名                                               |
| 授权码接口地址                        | 第三方服务获取 oauth code 接口地址，可包含固定参数                          |
| 授权码字段（示例：oauth_code）        | 临时的用户授权凭证，WPS 用于换取第三方应用的授权令牌                        |
| 用户标识字段（示例：union_id）        | 第三方应用的用户 id 字段，用户授权登录后，WPS 才会获取                      |
| 用户昵称字段（示例：nickname）        | 第三方应用的用户昵称字段，用户授权登录后，WPS 才会获取                      |
| 用户头像字段（示例：avatar）          | 第三方应用的用户头像字段，用户授权登录后，WPS 才会获取                      |