Python Requests - Azure Graph API Authentication
Question: I am trying to access the Azure AD Graph API using the Python requests
library. My steps are to first get the authorization code. Then, using the
authorization code, I request an access token/refresh token and then finally
query the API.

When I go through the browser, I am able to get my authorization code. I copy
that over to get the access token. However, I've been unable to do the same
with a Python script. I'm stuck at the part where I get the authorization
code.

My script returns a response code of 200, but the response headers don't
include that field. I would've expected the new URL with the code to be in the
response headers. I would have also expected a response code of 301.

Does anyone know why my response headers don't have the auth code? Also, given
the auth code, how would I pull it out to then get the access/refresh tokens
using Python?

My code is below:

    
    
    import requests
    
    s = requests.Session()
    s.auth = (USERNAME, PASSWORD)
    
    # Authorize URL
    authorize_url = 'https://login.microsoftonline.com/%s/oauth2/authorize' % TENANT_ID
    # Token endpoint.
    token_url = 'https://login.microsoftonline.com/%s/oauth2/token' % TENANT_ID
    
    payload = { 'response_type': 'code',
                'client_id': CLIENT_ID,
                'redirect_uri': REDIRECT_URI
              }
    
    request = s.get(authorize_url, json=payload, allow_redirects=True)
    print request.headers
    


Answer: This blog post shows how to properly authenticate against the Azure REST API
using Python:
<http://blogs.msdn.com/b/shwetasblogs/archive/2015/10/21/authentication-with-
azure-ad-for-azure-resource-manager-the-multitenant-app-approach.aspx>. The
MSDN documentation, which is not Python specific is here:
<https://msdn.microsoft.com/en-us/library/azure/dn790557.aspx>.

