管理用户
有了云目录,您就可以使用可增强安全性和自助服务的预置功能,在可扩展的注册表中管理用户。
Cloud Directory 用户与 App ID 用户不同。 用户可以使用您配置的不同身份提供商选项注册您的应用程序,也可以将他们添加到您的目录中。 以下部分中提到的用户是作为身份提供者与 Cloud Directory 相关联的用户。
查看用户信息
您可以通过使用 API 或仪表板,以 JSON 对象的形式查看云目录用户的所有信息。
在控制台中查看用户信息
可以使用 App ID 仪表板来查看有关应用程序用户的详细信息。
-
转到 App ID 实例的“云目录”>“用户”选项卡。
-
浏览表或使用电子邮件地址进行搜索,以查找要查看其信息的用户。 搜索项必须准确。
-
在用户所在行的溢出菜单中,单击查看用户详细信息。 这将打开一个页面,其中包含该用户的信息。 请查看下表以了解可以查看的信息。
您可以通过App ID面板查看用户的详细信息 详细信息 描述 用户标识 用户标识取决于配置的用户注册类型。 例如,如果您有一个电子邮件和密码流程,标识符就是用户的电子邮件。 如果使用用户名和密码流程,标识符就是注册时给出的用户名。 电子邮件 连接到用户的主要电子邮件地址。 名字和姓氏 用户在注册过程中提供的名字和姓氏。 上次登录 用户上次登录应用程序的时间戳。 注:如果是通过仪表板添加的用户,那么登录时间为空,直到用户自己登录到应用程序。 登录时,他们也会成为 App ID 用户。 标识 App ID 分配给用户的标识。 在控制台中没有显示,但可以复制该值并粘贴到文本编辑器中查看。 预定义属性 预定义属性是基于 SCIM 的有关用户的已知信息。 定制属性 定制属性是添加到用户概要文件的其他信息,或者在用户与应用程序交互时了解到的用户相关信息。 摘要 所有属性汇总后形成一个配置文件,让您全面了解云目录用户。 有关更多信息,请参阅用户概要文件。
使用 API 查看用户信息
可以使用 App ID API 来查看有关应用程序用户的详细信息。
-
从服务实例获取租户标识。
-
使用标识性查询(例如,电子邮件地址)来搜索 App ID 用户,以查找用户标识。
curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/Users?query=<identifyingSearchQuery>" \ -H "accept: application/json" \ -H "authorization: Bearer <token>"
示例:
curl -X GET https://us-south.appid.cloud.ibm.com/management/v4/e19a2778-3262-4986-8875-8khjafsdkhjsdafkjh/cloud_directory/Users?query=user@domain.com -H "accept: application/json" -H "authorization: Bearer eyJraWQiOiIyMDE3MTEyOSIsImFsZ...."
-
通过使用在上一步中获取的标识,对
cloud_directory/users
端点发出 GET 请求以查看其完整用户概要文件。curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/Users/<userID>" \ -H "accept: application/json" \ -H "authorization: Bearer <token>"
示例响应:
{ "sub": "c155c0ff-337a-46d3-a22a-a8f2cca08995", "name": "Test User", "email": "testuser@test.com", "identities": [ { "provider": "cloud_directory", "id": "f1772fcc-ff70-4d88-81a0-07dd7a3d988f", "idpUserInfo": { "displayName": "Test User", "active": true, "mfaContext": {}, "emails": [ { "value": "testuser@test.com", "primary": true } ], "meta": { "lastLogin": "2019-05-20T16:33:20.699Z", "created": "2019-05-20T16:25:13.019Z", "location": "/v1/6b8ab644-1d4a-4b3e-bcd9-777ba8430a51/Users/f1772fcc-ff70-4d88-81a0-07dd7a3d988f", "lastModified": "2019-05-20T16:33:20.707Z", "resourceType": "User" }, "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "name": { "givenName": "Test", "familyName": "User", "formatted": "Test User" }, "id": "f1772fcc-ff70-4d88-81a0-07dd7a3d988f", "status": "CONFIRMED", "idpType": "cloud_directory" } } ] }
要了解 App ID 支持的完整用户数据集,请查看 SCIM 核心模式。
添加用户
用户向应用程序注册时,会将其添加为用户。 出于测试目的,您可以通过 App ID 仪表板或使用 API 来添加用户。
用户向应用程序注册时,可通过自动触发欢迎或验证请求等电子邮件的自助服务工作流程来进行注册。 您以管理员身份向应用程序添加用户时,不会启动自助服务工作流程,这意味着用户不会从应用程序收到任何电子邮件。 如果希望用户仍然收到添加通知,可以通过 App ID 管理 API 触发信息流。
如果禁用自助服务注册或代表用户来添加该用户,那么用户在被添加时不会收到欢迎或验证电子邮件。
在控制台中添加用户
-
转至 App ID 仪表板的 Cloud Directory > 用户选项卡。
-
单击添加用户。 这将打开一个表单。
-
输入名字、姓氏、电子邮件和密码。 请确保您尝试注册的电子邮件尚未被其他用户使用。 要确保正确输入了密码,请通过在重新输入密码字段中输入密码来进行确认。
-
单击保存。 这将创建 Cloud Directory 用户。
使用 API 添加用户
-
从应用程序或服务凭证中获取租户标识。
-
获取 IBM Cloud IAM 令牌。
curl -X GET "https://iam.cloud.ibm.com/oidc/token" \ -H "accept: application/x-www-form-urlencoded"
-
运行以下命令以同时创建新用户和概要文件。
curl -X POST "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/sign_up?shouldCreateProfile=true&language=en" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -H "authorization: Bearer <token>" \ -d "{ \"active\": true, \"emails\": [ { \"value\": \"<user@domain.com>\", \"primary\": true } ], \"userName\": \"<userName>\", \"password\": \"<userPassword>\"}"
删除用户
如果要从目录中删除用户,可以从控制台或使用 API 删除该用户。
在控制台中删除单个用户
-
转至 App ID 仪表板的 Cloud Directory > 用户选项卡。
-
单击要删除的用户旁边的复选框。 这将打开一个框。
-
在该框中,单击删除。 这将打开一个屏幕。
-
确认您了解通过单击删除来删除用户是无法撤销的操作。 如果这是误操作,您可以将用户重新添加到目录,但有关该用户的任何信息都不再可用。
使用 API 删除单个用户
-
获取租户标识。
-
获取 IBM Cloud IAM 令牌。
curl -X GET "https://iam.cloud.ibm.com/oidc/token" \ -H "accept: application/x-www-form-urlencoded"
-
使用连接到用户的电子邮件来搜索目录,以查找用户标识。
curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/users?email=<user@domain.com>" \ -H "accept: application/json"
-
删除用户。
curl -X DELETE "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/remove/<userID>" \ -H "accept: application/json" \ -H "authorization: Bearer <token>"
使用 API 删除多个用户
您还可以使用批量删除 API 批量删除云目录用户及其相应的概要文件。
每个请求最多可以删除 100 个用户。
-
获取租户标识。
-
获取 IBM Cloud IAM 令牌。
curl -X GET "https://iam.cloud.ibm.com/oidc/token" \ -H "accept: application/x-www-form-urlencoded"
-
通过运行带有用户标识列表的以下命令来删除用户。
curl -X POST "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/bulk_remove" \ -H "accept: application/json" \ -H "authorization: Bearer <token>" -d '{ "ids": [ "fed2634a-7a6c-4f6a-855d-8e3c73a5b5cc", "9380158c-19c9-4303-9111-a91743f4bad8" ] }'
迁移用户
有时,您可能需要添加 App ID 的实例。 为了帮助迁移到新实例,您可以使用导出和导入 API 进行小规模迁移。 如果要迁移大量用户(16,000 或更多),可以通过单个 API 请求 导出所有 用户或 导入所有 用户,以提高效率。
您必须为 App ID 的两个实例分配 Manager
IAM 角色。
导出所有用户
在将概要文件导入到新实例之前,需要从服务的原始实例中导出这些概要文件。
如果要导出许多用户 (16,000 或更多),那么可以使用 export/all
API 端点。
-
从服务的原始实例中导出所有用户。
curl -X POST 'https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/export/all' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <IAMToken>' \ --data-raw '{"encryptionSecret" : "<encryptionSecret>", "emailAddress" : "jdoe@example.com"}'
-
根据需要获取请求的状态。
curl -X GET 'https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/export/status?id=<id>' --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <IAMToken>'
-
当导出就绪或请求失败时,将向提供的电子邮件地址发送电子邮件。 要下载导出,请使用 export/download API。
curl -X GET 'https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/export/download?id=<id>' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <IAMToken>'
仅当导出请求成功时,才会创建导出文件。 如果请求失败,为降低漏洞风险,将删除所收集的数据。 导出将在 7 天后或您在请求主体中指定的天数 (在 1-30 天的范围内) 自动删除。 您可以选择通过向 delete API 发送请求来手动删除导出。
导出/全部请求中需要提供的参数说明 参数 描述 encryptionSecret
用于加密和解密用户散列密码的定制字符串。 根据需要保留加密密钥以使用 import/all API。 IBM 不会存储私钥,因此如果私钥丢失,那么您无法访问导出的数据。 emailAddress
导出就绪或请求失败时要向其发送电子邮件的电子邮件地址。 expires
可以设置的整数 (1 ≤ 值 ≤ 30),用于指定必须删除导出的天数。 默认值为 7。 tenantID
可以在服务凭证中找到的服务租户标识。 您可以在 App ID 控制面板中查找或创建服务证书。
批量导出用户
导出端点是为大约少于 16 000 个用户的小规模导出保留的。 要导出与特定租户标识关联的所有 Cloud Directory 用户,请使用 export/all API 端点。
-
从服务的原始实例中导出用户。
curl -X GET 'https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/export?encryption_secret=mySecret' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <IAMToken>'
出口请求中需要提供的参数说明 参数 描述 encryptionSecret
用于加密和解密用户散列密码的定制字符串。 tenantID
可以在服务凭证中找到的服务租户标识。 您可以在 App ID 仪表板中找到服务凭证。 仅会返回 Cloud Directory 用户及其概要文件。 不会返回其他身份提供者的用户。
正在导入所有用户
现在,您已拥有导出的 Cloud Directory 用户列表,可以将这些用户导入到新实例中。 您可以使用 import-all API 端点,通过单次请求导入大量用户(16,000 或更多)。
-
导入您下载的已导出用户的列表。
curl -X POST 'https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/import/all' \ --header 'Content-Type: multipart/form-data' \ --header 'Authorization: Bearer <IAMToken>' \ --form 'file=@<User/desktop/myfolder/user_list.json>' \ --form 'encryptionSecret=mySecret' \ --form 'emailAddress=jdoe@example.com'
-
根据需要获取请求的状态。
curl -X GET 'https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/import/status?id=<id>' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <IAMToken>'
导入/导出所有数据请求中需要提供的参数说明 参数 描述 encryptionSecret
用于加密和解密用户散列密码的定制字符串。 加密密钥与您附加到 export/all API 的密钥相同。 IBM 不会存储私钥,因此如果私钥丢失,那么您无法访问导出的数据。 emailAddress
导出就绪或请求失败时要向其发送电子邮件的电子邮件地址。 tenantID
可以在服务凭证中找到的服务租户标识。 您可以在 App ID 控制面板中查找或创建服务证书。 file
export/download 端点的输出。
分批导入用户
您可以使用导入 API 端点来导入小组用户。 通过导入 API 端点,每个请求最多只能添加 50 个用户。 要通过单个请求添加所有用户,请使用 import/all API 端点。
-
如果为用户分配了 角色,请确保在 App ID的新实例中创建角色和作用域。
必须创建的角色和作用域与先前实例中具有相同拼写的角色和作用域完全相同。
-
将使用新的 Cloud Directory 标识导入用户。 如果应用程序以任何方式引用 Cloud Directory 标识,那么您可以选择创建定制属性并调整应用程序以直接调用该属性而不是该标识。
-
将用户导入到服务的新实例。
curl -X POST 'https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/import?encryption_secret=mySecret' --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Bearer <IAMToken>' -d '{"users": [ { "scimUser": { "originalId": "3f3f6779-7978-4383-926f-a43aef3b724b", "name": { "givenName": "John", "familyName": "Doe", "formatted": "John Doe" }, "displayName": "John Doe", "emails": [ { "value": "user@example.com", "primary": true } ], "status": "PENDING" }, "displayName": "Jane-Doe", "emails": [ { "value": "jdoe@example.com", "primary": true } ], "status": "PENDING" }, "passwordHash": "<passwordHashHere>", "passwordHashAlg": <passwordHashAlgorithm>, "profile": { "attributes": {} }, "roles": [] } ]}'
小规模出口和进口的迁移脚本
App ID 提供了一个迁移脚本,您可以通过 CLI 使用该脚本来帮助在使用导出或导入 API 端点时加快迁移过程。 或者,要使迁移过程更高效,可以使用 export/all 和 import/all API 端点。
- 克隆 存储库。
git clone https://github.com/ibm-cloud-security/appid-sample-code-snippets/tree/master/export-import-cloud-directory-users.git
-
在终端中,切换到在其中克隆了存储库的文件夹。
-
运行以下命令。
npm install
-
使用您的参数运行以下命令:
users_export_import 'sourceTenantId' 'destinationTenantId' 'region' 'iamToken'
参数描述 参数 描述 sourceTenantId
计划从中导出用户的 App ID 实例的租户标识。 destinationTenantId
计划将用户导入其中的 App ID 实例的租户标识。 region
了解有关 可用区域 的更多信息。 IAM token
有关获取 IAM 令牌的帮助,请查看 文档。 示例命令:
users_export_import e00a0366-53c5-4fcf-8fef-ab3e66b2ced8 73321c2b-d35a-497a-9845-15c580fdf58c ng eyJraWQiOiIyMDE3MTAyNS0xNjoyNzoxMCIsImFsZyI6IlJTMjU2In0.eyJpYW1faWQiOiJJQk1pZC0zMTAwMDBUNkZTIiwiaWQiOiJJQk1pZC0zMTAwMDBUNkZTIiwicmVhbG1pZCI6IklCTWlkIiwiaWRlbnRpZmllciI6IjMxMDAwIFQ2RlMiPCJnaXZlbl9uYW1lIjoiUm90ZW0iLCJmYW1pbHlfbmFtZSI6IkJyb3NoIiwibmFtZSI6IlJvdGVtIEJyb3NoIiwiZW1haWwiOiJyb3RlbWJyQGlsLmlibS5jb20iLCJzdWIiOiJyb3RlbWJyQGlsLmlibS5jb20iLCJhY2NvdW50Ijp7ImJzcyI6ImQ3OWM5YTk5NjJkYzc2Y2JkMDZlYTVhNzhjMjY0YzE5In0sImlhdCI6MTUzNrE3Mjg4NCwiZXhwIjoxNTM3MTc2NDg0LCJpc3MiOiJodHRwczovL2lhbS5zdGFnZTEuYmx1ZW1peC5uZXQvaWRlbnRpdHkiLCJncmFudF90eXBlIjoidXJuOmlibTpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTpwYXNzY29kZSIsInNjb3BlIjoiaWJtIG9wZW5pZCIsImNsaWVudF9pZCI6ImJ4IiwiYWNyIjoxLCJhbXIiOlsicHdkIl19.c4vLPzhvvNZLjaLy7znDa37qV4o-yuGmSKmJoQKrEQNZU8IC0NIjxwSo7W9kb0pDi3Yf_03_9ufTTGNfjtltzNWycSXjkNgoL-b9_nU61oHdgn0stY1KmNicqyBWfgUU--4xa904QN_QjRHBaUBeJf3XWEphPIMoF7mZeOxEZLnCMcQXSz9pImCMiP4SNT38cHLiI90Yx01rM7hpteepWULh5MYh-B2V03Gkgxfqvv951HF1LDg6eT4Q9in11laTQKtKuomripUju_4GIIjORVYw9NaAVKIJ9lKrPX0SKPhStsa59qGsC_7Uersms5EY1W1VbZVqOZPJbtp6tVf-Lw