我最近创建了一个 docusign 开发人员帐户和集成商密钥,并且正在使用 docusign REST API 并且有一些问题
我可以使用以下 REST 调用检索我帐户下的完整用户列表。
https://demo.docusign.net/restapi/v2/accounts/<accountid>/users?additional_info=true
但是,如果我尝试检索特定用户(除了我在 X-Docusign-authentication 中传递的用户)标头,我会收到 http 400 错误,并显示“无效 UserId。请求 uri 中指定的 UserId 与经过身份验证的用户不匹配”的消息
https://demo.docusign.net/restapi/v2/accounts/<accountid>/users/0d51a699-b17a-48b7-95b6-1e9e9806deb6
在这两种情况下,我都会发送以下标头。
X-DocuSign-Authentication: <DocuSignCredentials><Username>{0}</Username><Password>{1}</Password><IntegratorKey>{2}</IntegratorKey></DocuSignCredentials>
我很惊讶,虽然我可以很好地阅读所有用户,但我不能只阅读一个特定的用户。当然,这似乎不是安全问题,因为我可以通过一个 API 读取用户,但不能使用相同的身份验证令牌读取另一个 API。
我错过了什么?
我想我可以走 SOBO 的路线(代表功能发送),但我想确认上述行为是否是预期的。
更新#1
:我采用了 SOBO方法,现在我得到一个不同的错误(USER_NOT_ACCOUNT_ADMIN),如下所示
GET /restapi/v2/accounts/{accountid}/users/0fe29a55-5564-42a9-b09d-cbe699db13dd HTTP/1.1
Authorization: bearer {token for authenticating user}
X-DocuSign-Act-As-User: {operating user's email}
Accept: application/json
Host: demo.docusign.net
Connection: Keep-Alive
HTTP/1.1 401 Unauthorized
Cache-Control: no-cache
Content-Length: 100
Content-Type: application/json; charset=utf-8
Date: Thu, 17 Oct 2013 21:18:32 GMT
Strict-Transport-Security: max-age=7776000; includeSubDomains
{
"errorCode": "USER_NOT_ACCOUNT_ADMIN",
"message": "User is not an account administrator."
}
我还尝试了第二种 SOBO 方法,即为操作用户获取 oauth 令牌,但返回 http 400 错误并显示以下消息
{
"error": "invalid_request",
"error_description": "An OAuth2 error occurred."
}
因此,虽然我可以为认证用户获取 oauth 令牌,但我无法为操作用户获取 oauth 令牌或代表他们行事。
我已确保验证用户是“帐户管理员”并且将“apiAccountWideAccess”和“•allowSendOnBehalfOf”都设置为 true。唯一设置为“false”的是“canSendAPIRequests”。我在沙盒环境中的帐户 ID 是“601565a7-e9c7-463b-9d7c-622aed905ea8”有什么想法吗?
更新#2
我没有代表身份验证用户和操作用户生成 oauth 令牌,而是尝试在标题下方传递,我终于可以获取另一个用户的个人资料并更新另一个用户的个人资料。
X-DocuSign-Authentication: <DocuSignCredentials><SendOnBehalfOf>{operating userid}</SendOnBehalfOf><Username>{authenticating userid}</Username><Password>{authenticating user's password}</Password><IntegratorKey>{developer's integrator key}</IntegratorKey></DocuSignCredentials>
伟大的!所以这里是什么有效,什么无效的状态。
适用于任何地方都没有 SOBO 标头
GET /restapi/v2/accounts/357938/users?additional_info=true // Read all users
GET /restapi/v2/accounts/357938/users?email=someshchandraatwork@gmail.com&additional_info=true // Read single user by email
POST /restapi/v2/accounts/357938/users // Add users
DELETE /restapi/v2/accounts/357938/users // Close users
*适用于 X-DocuSign-Authentication 标头中的 SOBO
PUT /restapi/v2/accounts/357938/users/74a021e1-3090-4843-b9ab-cceb7cd119f4/profile // Update user's profile
GET /restapi/v2/accounts/357938/users/74a021e1-3090-4843-b9ab-cceb7cd119f4/profile // Read user's profile
无论有没有 SOBO 都仍然无法使用**
GET /restapi/v2/accounts/357938/users/74a021e1-3090-4843-b9ab-cceb7cd119f4/settings
GET /restapi/v2/accounts/357938/users/74a021e1-3090-4843-b9ab-cceb7cd119f4
在两种不工作的情况下,我都会收到以下错误
- 如果没有 SOBO,我会收到用户 ID 与正在验证的用户不匹配的错误。
- 使用 SOBO 我得到的错误比用户不是帐户管理员
我非常感谢在解决无效案例方面的任何帮助。我可以根据需要提供更多详细信息。
其次,我想实现一个场景,我可以在帐户中停用用户,这样他们就不能再登录到 docusign。随后,我想再次启用该用户,并使用他们被禁用之前的相同权限。
我看到该用户有一个“userStatus”字段,我想知道是否可以使用它来停用用户,然后在需要时重新激活。如果支持,那么什么值对应于停用用户?
我要注意的另一件事是,在删除用户时,用户只是被软删除,因为我仍然可以查询状态为“CLOSED”的用户。这将解决我的“停用”问题。但是我不确定在用户“关闭”后是否有办法重新激活它们?