向 Dynamics CRM Web 发出请求 API
Making a request to Dynamics CRM Web API
我正在尝试制作一个应用程序,使用 urllib2 从 python 向 Dynamics CRM Web API 发出请求。
到目前为止,我可以通过向 https://login.microsoftonline.com/common/oauth2/authorize 发出 post 请求来使用 Azure 应用程序登录用户
然后用检索到的 authorization_code 我可以用 urllib2
得到 access_token, refresh_token 和其他
url = 'https://login.microsoftonline.com/common/oauth2/token'
post_fields = {'grant_type': 'authorization_code',
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'redirect_uri': REDIRECT_URI,
'resource': 'https://graph.microsoft.com',
'code': code}
request = Request(url, urlencode(post_fields).encode())
resp = urlopen(request).read().decode()
resp = json.loads(resp)
refresh_token = resp['refresh_token']
id_token = resp['id_token']
id_token = jwt.decode(id_token,verify=False)
access_token = resp['access_token']
然后我尝试使用 access_token 发出另一个 post 请求,但没有成功。
我不断收到:
HTTP Error 401: Unauthorized
作为测试,我直接对 .dynamics.com/api/data/v8.1/leads 做了一个 post
如下:
url = 'https://<company_uri>.dynamics.com/api/data/v8.1/leads'
post_fields = {"name": "Sample Account",
"creditonhold": "false",
"address1_latitude": 47.639583,
"description": "This is the description of the sample account",
"revenue": 5000000,
"accountcategorycode": 1
}
request = Request(url, urlencode(post_fields).encode())
request.add_header('Authorization', 'Bearer ' + access_token )
request.add_header("Content-Type", "application/json; charset=utf-8")
request.add_header('OData-MaxVersion','4.0')
request.add_header('OData-Version','4.0')
request.add_header('Accept','application/json')
resp = urlopen(request).read().decode()
但我一直收到相同的 401 错误代码。
我查看了所有 msdn 文档,但没有找到不使用任何库直接执行此操作的方法,我只想使用一个简单的 post 请求。
由于错误代码显示未经授权,我认为 access_token 必须以其他方式发送。
有人可以帮助我了解如何在 Dynamics CRM 上正确使用 access_token 吗?
谢谢!
您取回的访问令牌用于 Azure AD Graph API。不是 Dynamics CRM。
要调用它,您必须请求访问令牌,其中 资源 设置为 Dynamics CRM API 的 App ID URI,而不是 https://graph.windows.net
。
根据 documentation,您应该将 resource 设置为 https://<company_uri>.crm.dynamics.com
。
因此,当您检索令牌时:
url = 'https://login.microsoftonline.com/common/oauth2/token'
post_fields = {'grant_type': 'authorization_code',
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'redirect_uri': REDIRECT_URI,
'resource': 'https://<company_uri>.crm.dynamics.com',
'code': code}
我正在尝试制作一个应用程序,使用 urllib2 从 python 向 Dynamics CRM Web API 发出请求。 到目前为止,我可以通过向 https://login.microsoftonline.com/common/oauth2/authorize 发出 post 请求来使用 Azure 应用程序登录用户 然后用检索到的 authorization_code 我可以用 urllib2
得到 access_token, refresh_token 和其他url = 'https://login.microsoftonline.com/common/oauth2/token'
post_fields = {'grant_type': 'authorization_code',
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'redirect_uri': REDIRECT_URI,
'resource': 'https://graph.microsoft.com',
'code': code}
request = Request(url, urlencode(post_fields).encode())
resp = urlopen(request).read().decode()
resp = json.loads(resp)
refresh_token = resp['refresh_token']
id_token = resp['id_token']
id_token = jwt.decode(id_token,verify=False)
access_token = resp['access_token']
然后我尝试使用 access_token 发出另一个 post 请求,但没有成功。 我不断收到:
HTTP Error 401: Unauthorized
作为测试,我直接对 .dynamics.com/api/data/v8.1/leads 做了一个 post 如下:
url = 'https://<company_uri>.dynamics.com/api/data/v8.1/leads'
post_fields = {"name": "Sample Account",
"creditonhold": "false",
"address1_latitude": 47.639583,
"description": "This is the description of the sample account",
"revenue": 5000000,
"accountcategorycode": 1
}
request = Request(url, urlencode(post_fields).encode())
request.add_header('Authorization', 'Bearer ' + access_token )
request.add_header("Content-Type", "application/json; charset=utf-8")
request.add_header('OData-MaxVersion','4.0')
request.add_header('OData-Version','4.0')
request.add_header('Accept','application/json')
resp = urlopen(request).read().decode()
但我一直收到相同的 401 错误代码。 我查看了所有 msdn 文档,但没有找到不使用任何库直接执行此操作的方法,我只想使用一个简单的 post 请求。
由于错误代码显示未经授权,我认为 access_token 必须以其他方式发送。 有人可以帮助我了解如何在 Dynamics CRM 上正确使用 access_token 吗? 谢谢!
您取回的访问令牌用于 Azure AD Graph API。不是 Dynamics CRM。
要调用它,您必须请求访问令牌,其中 资源 设置为 Dynamics CRM API 的 App ID URI,而不是 https://graph.windows.net
。
根据 documentation,您应该将 resource 设置为 https://<company_uri>.crm.dynamics.com
。
因此,当您检索令牌时:
url = 'https://login.microsoftonline.com/common/oauth2/token'
post_fields = {'grant_type': 'authorization_code',
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'redirect_uri': REDIRECT_URI,
'resource': 'https://<company_uri>.crm.dynamics.com',
'code': code}