DocuSign API JWT Sorunu (Python)

Sep 26 2020

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

1 InbarGazit Sep 27 2020 at 03:25

İş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)