1

我最近创建了一个 docusign 开发人员帐户和集成商密钥,并且正在使用 docusign REST API 并且有一些问题

  1. 我可以使用以下 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 我得到的错误比用户不是帐户管理员

我非常感谢在解决无效案例方面的任何帮助。我可以根据需要提供更多详细信息。

  1. 其次,我想实现一个场景,我可以在帐户中停用用户,这样他们就不能再登录到 docusign。随后,我想再次启用该用户,并使用他们被禁用之前的相同权限。

    我看到该用户有一个“userStatus”字段,我想知道是否可以使用它来停用用户,然后在需要时重新激活。如果支持,那么什么值对应于停用用户?

    我要注意的另一件事是,在删除用户时,用户只是被软删除,因为我仍然可以查询状态为“CLOSED”的用户。这将解决我的“停用”问题。但是我不确定在用户“关闭”后是否有办法重新激活它们?

4

2 回答 2

1

我相信这可能是一个帐户管理问题。我不知道为什么,但我从 DocuSign 那边查看了您的帐户设置,发现您的帐户没有检查“代表发送” - 这很奇怪,因为您似乎可以访问控制台中的设置 ->首选项设置。

但无论哪种情况,我都想知道我刚刚在您的帐户上启用的设置是否解决了您的问题,因为它可能已经解决了。

我也不确定您问题的用户信息部分,让我看看我是否可以为此提出任何建议,一旦我这样做,我将编辑我的答案。

于 2013-10-17T22:03:06.670 回答
1

回复 Erign 上面的帖子。

作为帐户管理员的任何人都应该能够修改/添加/删除帐户中的用户。我不确定您的 SOBO 步骤是否正确,您能否确认您完全遵循这些步骤?如果是这样,您在哪一步遇到问题或出错?– Ergin5 分钟前

是的,我正在遵循这些步骤。我能够为 autheitcating 用户生成 oauth 令牌,但在为操作用户执行相同操作时会出错。以下是我的要求和回应。

1. 认证用户的 AUTH TOKEN 请求

POST /restapi/v2/oauth2/token HTTP/1.1
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Host: demo.docusign.net
Content-Length: 139
Expect: 100-continue
Connection: Keep-Alive

grant_type=password&client_id={integratorykey}&username={authenticating user's email}&password={authenticating user's password}&scope=api

回复

HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 100
Content-Type: application/json; charset=utf-8
Date: Thu, 17 Oct 2013 22:57:26 GMT
Strict-Transport-Security: max-age=7776000; includeSubDomains

{
  "access_token": "{authenticating user's token}",
  "token_type": "bearer",
  "scope": "api"
}

2. 操作用户的授权令牌请求

POST /restapi/v2/oauth2/token HTTP/1.1
Authorization: bearer {authenticating user's token}
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Host: demo.docusign.net
Content-Length: 137
Expect: 100-continue

grant_type=password&client_id={integratorykey}&username={operating user's id}&password={empty}&scope=api

回复

HTTP/1.1 400 Bad Request
Cache-Control: no-cache
Content-Length: 87
Content-Type: application/json; charset=utf-8
Date: Thu, 17 Oct 2013 22:57:29 GMT
Strict-Transport-Security: max-age=7776000; includeSubDomains

{
  "error": "invalid_request",
  "error_description": "An OAuth2 error occurred."
}
于 2013-10-17T23:11:05.133 回答