ปัญหา DocuSign API JWT (Python)
ดูเหมือนว่าฉันจะมีปัญหาในการตรวจสอบสิทธิ์ให้ทำงานได้อย่างถูกต้องเมื่อใช้เมธอด jwt
นี่คือคำขอที่สร้างขึ้นสำหรับการอนุญาตกับแอปพลิเคชัน
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"
และนี่คือ webhook เพื่อรับโทเค็น
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
...
ฉันได้ลองใช้รหัสบัญชีที่พบจาก resp.accounts [0] .account_id ด้วย (เนื่องจากมีเพียงบัญชีเดียวสำหรับผู้ใช้) แต่ก็ล้มเหลวrequest_jwt_user_tokenด้วยข้อผิดพลาดนี้
HTTP response body: b'{"error":"invalid_grant","error_description":"user_not_found"}
ทั้งหมดนี้ใช้งานได้ดี แต่แล้วเมื่อฉันพยายามสร้างซองจดหมายที่อื่นโดยใช้โทเค็นเช่นนั้น
# 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:
...
ฉันได้รับข้อผิดพลาดนี้
HTTP response body: b'{"errorCode":"USER_DOES_NOT_BELONG_TO_SPECIFIED_ACCOUNT","message":"The specified User is not a member of the specified Account."}'
ฉันได้พยายามใช้acc_idแทนคีย์ผู้ใช้ api เมื่อสร้างซองจดหมาย แต่นั่นทำให้เกิดข้อผิดพลาดนี้:
HTTP response body: b'{"errorCode":"PARTNER_AUTHENTICATION_FAILED","message":"The specified Integrator Key was not found or is disabled. Invalid account specified for user."}'
ทั้งหมดนี้ทำได้ผ่านไลบรารีที่จัดเตรียมdocusign-esignไว้สำหรับ python
ไม่ค่อยแน่ใจว่าจะไปที่ไหนจากที่นี่ แต่ขอขอบคุณความช่วยเหลือใด ๆ !
คำตอบ
นี่คือข้อมูลบางส่วนที่อาจช่วยได้
ใน DocuSign คุณมีบัญชีและการเป็นสมาชิกที่เป็นส่วนหนึ่งของบัญชี - ผู้ใช้ ดังนั้น userId คือสิ่งหนึ่ง (GUID) และ accountID ก็เป็นอีกสิ่งหนึ่ง (GUID) คุณสามารถเข้าถึงซองจดหมายจากบัญชีที่คุณเป็นสมาชิกเท่านั้น เมื่อใช้ JWT คุณต้องระบุ userId เพื่อรับโทเค็นการเข้าถึง การโทรนั้นเกิดจากการแอบอ้างเป็นผู้ใช้รายนี้ หากคุณพยายามเข้าถึงซองจดหมาย (หรืออะไรก็ได้) จากบัญชีที่ผู้ใช้ดังกล่าวไม่มีการเป็นสมาชิกคุณจะได้รับข้อผิดพลาดที่คุณได้รับ
สิ่งสุดท้ายโปรดตรวจสอบให้แน่ใจว่าทุกอย่างเสร็จสิ้นในช่วงเวลาเดียวกัน หมายความว่าถ้า Oauth เสร็จสิ้นในการสาธิต / นักพัฒนา (account-d.docusign.com) การเรียก API จะถูกสร้างขึ้นใน env เดียวกัน (demo.docusign.net) หากคุณใช้ account.docusign.com (การผลิต) การเรียก API จะต้องเป็น URL ที่ถูกต้องซึ่งจะไม่ใช่ demo.docusign.net (แต่อาจเป็น na3.docusign.net หรือ eu1.docusign.net เป็นต้น)