DocuSign API JWT Sự cố (Python)
Tôi dường như đang gặp sự cố để xác thực hoạt động chính xác khi sử dụng phương thức jwt.
Đây là yêu cầu được xây dựng để ủy quyền với ứng dụng
uri = api_client.get_authorization_uri(
client_id = DOCUSIGN_APP_INTEGRATION_KEY,
redirect_uri = WEBHOOK_URL,
scopes = ["signature","impersonation"],
response_type = 'code',
)
uri +="&prompt=login"
Và heres the webhook để sau đó nhận được mã thông báo
api_client = ApiClient(oauth_host_name = settings.DOCUSIGN_OAUTH_HOST_NAME)
# Get account id for authed user
xyz = api_client.generate_access_token(
client_id = DOCUSIGN_APP_INTEGRATION_KEY,
client_secret = DOCUSIGN_CLIENT_SECRET_KEY,
code = code,
)
resp = api_client.get_user_info(access_token = xyz.access_token)
acc_id = resp.sub
base_uri = ''
for account in resp.accounts:
if account.is_default:
base_uri = account.base_uri
break
token = api_client.request_jwt_user_token(
client_id = DOCUSIGN_APP_INTEGRATION_KEY,
user_id = acc_id,
oauth_host_name = api_client.get_oauth_host_name(),
private_key_bytes = DOCUSIGN_PRIVATE_KEY,
expires_in = 3600,
)
# Save token.access_token, and base_uri for use elsewhere
...
Tôi cũng đã cố gắng sử dụng id tài khoản tìm thấy từ resp.accounts [0] .account_id (Từ theres chỉ có một tài khoản cho người sử dụng) nhưng điều đó không thành công trên request_jwt_user_tokenvới lỗi này
HTTP response body: b'{"error":"invalid_grant","error_description":"user_not_found"}
Tất cả điều này đều hoạt động tốt và tốt, nhưng sau đó khi tôi cố gắng tạo một phong bì ở nơi khác bằng cách sử dụng mã thông báo như vậy
# Setup api client with token
api_client = ApiClient()
api_client.host = api_base_path # set to https://demo.docusign.net/restapi
api_client.set_default_header("Authorization", "Bearer " + token)
envelope_api = EnvelopesApi(api_client)
try:
envelope_resp = envelope_api.create_envelope(
DOCUSIGN_API_USER_KEY,
envelope_definition=envelope_definition
)
except ApiException as e:
...
Tôi nhận được lỗi này
HTTP response body: b'{"errorCode":"USER_DOES_NOT_BELONG_TO_SPECIFIED_ACCOUNT","message":"The specified User is not a member of the specified Account."}'
Tôi cũng đã cố gắng sử dụng acc_idthay vì khóa người dùng api khi tạo phong bì, nhưng điều đó gây ra lỗi này:
HTTP response body: b'{"errorCode":"PARTNER_AUTHENTICATION_FAILED","message":"The specified Integrator Key was not found or is disabled. Invalid account specified for user."}'
Tất cả điều này được thực hiện thông qua thư viện được cung cấp docusign-esigncho python.
Không hoàn toàn chắc chắn sẽ đi đâu từ đây, nhưng mọi sự trợ giúp đều được đánh giá cao!
Trả lời
Đây là một số thông tin có thể hữu ích.
Trong DocuSign, bạn có tài khoản và tư cách thành viên là một phần của tài khoản - người dùng. Vì vậy, userId là một thứ (GUID) và accountID là một thứ khác (GUID). Bạn chỉ có thể truy cập phong bì từ tài khoản mà bạn là thành viên. khi sử dụng JWT, bạn phải cung cấp userId để lấy mã thông báo truy cập. Các cuộc gọi được họ thực hiện bằng cách mạo danh người dùng này. Nếu bạn cố gắng truy cập một phong bì (hoặc bất kỳ thứ gì) từ một tài khoản mà người dùng cho biết không có tư cách thành viên - bạn sẽ gặp phải lỗi mà mình mắc phải.
Một điều cuối cùng, hãy đảm bảo mọi thứ được thực hiện trong cùng một anv. Có nghĩa là, nếu Oauth được thực hiện trong demo / developer (account-d.docusign.com) thì các lệnh gọi API được thực hiện tới cùng một env (demo.docusign.net). Nếu bạn sử dụng account.docusign.com (production) thì các lệnh gọi API cần phải đến đúng URL sẽ KHÔNG phải là demo.docusign.net (nhưng có thể là na3.docusign.net hoặc eu1.docusign.net, v.v.)