cenoch
cenoch

Reputation: 21

How to use OAuth Applciation token generated by Docusign Python client [ApiClient.request_jwt_application_token()]?

I am writing a back end rest application using python that creates envelopes from templates and returns the front end application the url to the created envelope to be displayed.

Using the Python client, I am able to create a valid OAuth token using the following lines:

api_client = ApiClient("https://demo.docusign.net/restapi")

resp = api_client.request_jwt_application_token(
    client_id=client_id, # the integrator key
    oauth_host_name=auth_server, # 'account-d.docusign.com'
    private_key_bytes=private_key_file.read(), # private key temp file containing key in bytes
    expires_in=expiration # 3600
)

The call is successful, and returns the following:

resp
{
    'access_token': 'eyJ0eXAi...81z9D5w',
    'data': None,
    'expires_in': '28800',
    'refresh_token': None,
    'scope': None,
    'token_type': 'Application'
}

And the proper Authorization headers are set in the client:

api_client.default_headers
{
    'X-DocuSign-SDK': 'Python', 
    'User-Agent': 'Swagger-Codegen/1.0.0/python', 
    'Authorization': 'Application eyJ0eXAi...81z9D5w'
}

However, whenever I try to make any call, I get the following response:

envelope_api = EnvelopeApi(api_client)
envelope_api.get_envelope(account_id, envelope_id) 

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  ...
docusign_esign.client.api_exception.ApiException: (400)
Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Cache-Control': 'no-cache', 'Content-Length': '120', 'Content-Type': 'application/json; charset=utf-8', 'X-DocuSign-TraceToken': '14ac...388', 'Date': 'Fri, 20 Dec 2019 17:47:43 GMT', 'Vary': 'Accept-Encoding'})
HTTP response body: b'{"errorCode":"USER_AUTHENTICATION_FAILED","message":"One or both of Username and Password are invalid. invalid_request"}'

Is there an additional step to utilize this Application token? The Python JWT example is severely out of date, and the Python client repository does not mention any required changes to use the new call

Commit introducing new application token functionality

Upvotes: 1

Views: 344

Answers (1)

Drew
Drew

Reputation: 5029

You're generating an application token which is only useful in specific circumstances like with use with Datafeeds. In general, you want to be generating a user token, which will include a UserId as one of the parameters.

To do so, you need the api_client.configure_jwt_authorization_flow method. An example of how to use that is available on GitHub: https://github.com/docusign/eg-01-python-jwt/blob/master/example_base.py

Upvotes: 1

Related Questions