本节介绍使用PDS支持的账号系统登录PDS的最佳实践,您可以参考本文档使用账号登录PDS。
1. 通过界面配置使用
对于以下5种账号系统,可以在PDS的配置界面进行配置后,使用账号登录。
手机号(PDS 原生支持,提供手机号注册、登录等功能),具体的流程为:手机号登录配置
邮箱(PDS原生支持,提供邮箱注册、登录等功能)
钉钉(支持钉钉扫码和钉钉密码登录),具体的流程为:钉钉登录配置
RAM子账号(支持阿里云 RAM 子账号的OAuth登录),具体的流程为:RAM OAuth 登录配置
AD域/LDAP 登录配置,具体的流程为:AD域/LDAP 登录配置
2. 开发接入
PDS还支持自定义应用,通过可信的私钥计算凭证,再调用PDS的Authorize - OAuth请求授权换取AccessToken,可以自行接入任何的账号体系。用户可以使用该账号体系中的账号登录PDS。
通过标准JWT生成Token接入,具体的实现方式和配置流程请看:JWT应用接入
账号管理
本节描述了PDS的账号管理的最佳实践,您可以参考该文档对账号进行管理。
基本概念
同一个用户可以使用多种方式登录PDS,对于每种登录方式,都有一个账号与之对应。
PDS会将用户与账号绑定,用户与账号的绑定关系示意图如下:
对于上图所示的User1,可以采用手机号、邮箱、钉钉的方式登录PDS。
绑定的具体方式为:
在User的属性信息中填写登录的账号
创建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"
}
可以看到用户的属性信息中含有email和phone字段,分别代表使用邮箱和手机号登录的账号
账号信息列表为:
{"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"
}
]
}
可以看到该用户含有email和mobile的两条账号信息
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个