DocuSign API JWT Sorunu (Python)
Jwt yöntemini kullanırken kimlik doğrulamasının doğru çalışması için sorun yaşıyorum.
İşte uygulama ile yetkilendirme için oluşturulan istek
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"
Ve işte o zaman jetonu almak için 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
...
Ayrıca resp.accounts [0] .account_id adresinde bulunan hesap kimliğini kullanmayı denedim (kullanıcı için yalnızca bir hesap olduğu için) ancak request_jwt_user_tokenbu hata ile başarısız oluyor
HTTP response body: b'{"error":"invalid_grant","error_description":"user_not_found"}
Bunların hepsi iyi ve iyi çalışıyor, ancak daha sonra jetonu böyle kullanarak başka bir yerde bir zarf oluşturmaya çalıştığımda
# 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:
...
Bu hatayı alıyorum
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_idZarfı oluştururken api kullanıcı anahtarı yerine kullanmayı da denedim , ancak bu şu hatayı veriyor:
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üm bunlar docusign-esignpython için sağlanan kitaplık aracılığıyla yapılır .
Buradan nereye gideceğinizden pek emin değilim, ancak herhangi bir yardım için minnettarız!
Yanıtlar
İşte yardımcı olabilecek bazı bilgiler.
DocuSign'da hesapların bir parçası olan hesaplarınız ve üyelikleriniz vardır - kullanıcılar. Öyleyse, bir kullanıcı kimliği bir şeydir (GUID) ve bir hesap kimliği başka bir şeydir (GUID). Zarflara sadece üye olduğunuz bir hesaptan erişebilirsiniz. JWT'yi kullanırken, erişim belirtecini almak için userId'yi sağlamanız gerekir. Aramalar, bu kullanıcının kimliğine bürünerek yapılan aramalardır. Söz konusu kullanıcının üyeliği olmayan bir hesaptan bir zarfa (veya herhangi bir şeye) erişmeye çalışırsanız, aldığınız hatayı alırsınız.
Son bir şey, lütfen her şeyin aynı örs içinde yapıldığından emin olun. Yani, Oauth demo / geliştiricide (account-d.docusign.com) yapılırsa, API çağrıları aynı ortam için yapılır (demo.docusign.net). Account.docusign.com (üretim) kullanıyorsanız, API çağrılarının demo.docusign.net OLMAYACAK doğru URL'de olması gerekir (ancak na3.docusign.net veya eu1.docusign.net vb. Olabilir)