账号管理

本节介绍使用PDS支持的账号系统登录PDS的最佳实践,您可以参考本文档使用账号登录PDS。

1. 通过界面配置使用

对于以下5种账号系统,可以在PDS的配置界面进行配置后,使用账号登录。

  • 手机号(PDS 原生支持,提供手机号注册、登录等功能),具体的流程为:手机号登录配置

  • 邮箱(PDS原生支持,提供邮箱注册、登录等功能)

  • 钉钉(支持钉钉扫码和钉钉密码登录),具体的流程为:钉钉登录配置

  • RAM子账号(支持阿里云 RAM 子账号的OAuth登录),具体的流程为:RAM OAuth 登录配置

  • AD域/LDAP 登录配置,具体的流程为:AD域/LDAP 登录配置

image.png

2. 开发接入

PDS还支持自定义应用,通过可信的私钥计算凭证,再调用PDSAuthorize - OAuth请求授权换取AccessToken,可以自行接入任何的账号体系。用户可以使用该账号体系中的账号登录PDS。

通过标准JWT生成Token接入,具体的实现方式和配置流程请看:JWT应用接入

账号管理

本节描述了PDS的账号管理的最佳实践,您可以参考该文档对账号进行管理。

基本概念

同一个用户可以使用多种方式登录PDS,对于每种登录方式,都有一个账号与之对应。

PDS会将用户与账号绑定,用户与账号的绑定关系示意图如下:

image.png

对于上图所示的User1,可以采用手机号、邮箱、钉钉的方式登录PDS。

绑定的具体方式为:

  1. User的属性信息中填写登录的账号

  2. 创建AccountLinkInfo,表示用户绑定的账号信息,其中user_id即为用户的唯一标识

以用户使用手机号和邮箱登录为例:

  • 用户的信息为:

{
 "domain_id": "bj1",
 "user_id": "c9b7a5aa04d14ae3867fdc886fa01da4",
 "avatar": "",
 "created_at": 1692345217531,
 "updated_at": 1692345217531,
 "email": "12*@aliyunpds.com",
 "nick_name": "001",
 "phone": "139****",
 "role": "user",
 "status": "enabled",
 "user_name": "pds",
 "description": "vipuser",
 "default_drive_id": "1",
 "user_data": {
 	"key": ""
 },
 "creator": "user1"
}

可以看到用户的属性信息中含有emailphone字段,分别代表使用邮箱和手机号登录的账号

  • 账号信息列表为:

{"items":
 [
   {
     "authentication_type": "email",
     "created_at": 1692345217628,
     "display_name": "12*@aliyunpds.com",
     "domain_id": "bj1",
     "extra": "",
     "identity": "12*@aliyunpds.com",
     "user_id": "c9b7a5aa04d14ae3867fdc886fa01da4"
   },
   {
     "authentication_type": "mobile",
     "created_at": 1692345217822,
     "display_name": "139****",
     "domain_id": "bj1",
     "extra": "",
     "identity": "139****",
     "user_id": "c9b7a5aa04d14ae3867fdc886fa01da4"
   }
 ]
}

可以看到该用户含有emailmobile的两条账号信息

API调用及示例

获取账号信息

调用GetLinkInfo - 获取账号信息接口,通过账号类型、账号唯一标识和账号唯一标识的附加信息获取该条账号的完整信息

请求body示例

{
 'identity': '139****', 
 'type': 'mobile'
}

返回body示例

{
 "authentication_type": "mobile",
 "created_at": 1692348425994,
 "display_name": "139****",
 "domain_id": "bj1",
 "extra": "",
 "identity": "139****",
 "user_id": "c9b7a5aa04d14ae3867fdc886fa01da4"
}

根据用户ID获取账号信息列表

调用GetLinkInfoByUserId - 根据用户ID获取账号信息接口,通过用户的ID获取该用户已经绑定的账号信息列表,返回所有和该用户绑定的账号信息

请求body示例:

{
 "user_id": "c9b7a5aa04d14ae3867fdc886fa01da4"
}

返回body示例:

{"items":
 [
   {
     "authentication_type": "email",
     "created_at": 1692345217628,
     "display_name": "12*@aliyunpds.com",
     "domain_id": "bj1",
     "extra": "",
     "identity": "12*@aliyunpds.com",
     "user_id": "c9b7a5aa04d14ae3867fdc886fa01da4"
   },
   {
     "authentication_type": "mobile",
     "created_at": 1692345217822,
     "display_name": "139****",
     "domain_id": "bj1",
     "extra": "",
     "identity": "139****",
     "user_id": "c9b7a5aa04d14ae3867fdc886fa01da4"
   }
 ]
}

绑定账号信息

调用LinkAccount - 绑定账号接口,绑定用户的账号信息。

请求body示例:

{
 "identity": "139****",
 "type": "mobile",
 "user_id": "c9b7a5aa04d14ae3867fdc886fa01da4"
}

返回body示例:

{
 "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpX****.eyJ1c2VySWQiOiJ0ZXN0X3VzZXJfT1VTNkRyNUF2OGQxNWVlZjk1NGMwNDdhNjgxYjA3MDhkMWFlZWUxZDMiLCJjdXN0b21Kc29uIjoie1wiY2xpZW50SWRcIjpcImNsaWVudF9pZF9mb3JfYWtcIixcImRvbWFpbklkXCI6XCJkYWlseTQ1MDE4XCIsXCJzY29wZVwiOltcIkRSSVZFLkdFVFwiLFwiRFJJVkUuTElTVFwiLFwiU0hBUkUuQUxMXCIsXCJGSUxFLkFMTFwiLFwiRFJJVkUuVVBEQVRFXCIsXCJVU0VSLlVQREFURV9JTkZPXCIsXCJVU0VSLkdFVFwiLFwiVVNFUi5MSVNUXCIsXCJTVE9SQUdFLkFMTFwiLFwiQkFUQ0hcIixcIkFDQ09VTlQuQUxMXCIsXCJPQVVUSC5BTExcIixcIklNQUdFLkFMTFwiLFwiSU5WSVRFLkFMTFwiLFwiVFJBREUuQUxMXCIsXCJERVZJQ0UuQUxMXCIsXCJHUk9VUC5HRVRcIixcIkdST1VQLkxJU1RcIixcIk1FTUJFUlNISVAuR0VUXCIsXCJNRU1CRVJTSElQLkxJU1RcIixcIlZJRVcuQUxMXCIsXCJTWU5DTUFQUElORy5BTExcIl0sXCJyb2xlXCI6XCJ1c2VyXCIsXCJyZWZcIjpcIlwiLFwiZGV2aWNlX2lkXCI6XCI1YjYzYWE0ZWRiZTg0ZTYyODE1YTM5MjMwNmM2YTc5NFwifSIsImV4cCI6MTY5MjM1MjQxNywiaWF0IjoxNjkyMzQ1MT****.NbTNBnY8l-flQmUoHrcxOy1ab7ZuOM3TGvaFz4F-gllJ1yWVP9JFutGlOkIUZJ05l7gIjOUroMrbrRQ6hPy9IG0j2RO60J_n18LQF1yUTtMfUMe97cbJF9MY3JSKjvuQ9KDPTwQK0bNfcsIr9LvjwcXueuzGH5MdP3jwaQGDC7Q",
 "avatar": "",
 "default_drive_id": "",
 "domain_id": "bj1",
 "expire_time": "2023-08-18T09:53:37Z",
 "expires_in": 7200,
 "is_first_login": false,
 "nick_name": "",
 "refresh_token": "5b63aa4edbe84e62815a392306c6a794",
 "role": "user",
 "status": "enabled",
 "token_type": "Bearer",
 "user_id": "c9b7a5aa04d14ae3867fdc886fa01da4",
 "user_name": ""
}

注意:在绑定账号信息时,不能将已经绑定的账号绑定到其他用户上,如:手机号“139****”已经绑定给用户A,则不能再将该手机号绑定给用户B

解绑账号信息

调用UnLinkAccount - 取消账号关联接口,将某条账号与用户解绑。

请求body示例:

{
 "identity": "139****",
 "type": "mobile",
 "user_id": "c9b7a5aa04d14ae3867fdc886fa01da4"
}

返回body示例: 当前API无返回参数,仅返回HTTP响应状态码:204

注意:调用该接口仅删除该条账号,但不会修改用户的属性信息,即在用户的属性信息中仍然能查询到:"phone": "139****"

同一账号客户端同时登录限制

目前不限制同一账号同时在多个客户端登录,但建议不超过5