2017-01-22 9 views
1

私は、urllib2を使用してPythonからDynamics CRM Web APIにリクエストするアプリを作ろうとしています。 は、これまでのところ、私はそれから取り出さauthorization_codeと私はurllib2のDynamics CRM Web APIに依頼する

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は、refresh_tokenなどを取得することができますhttps://login.microsoftonline.com/common/oauth2/authorize にPOSTリクエストをすることによってAzureのアプリケーションをユーザにログインすることができますそれから私は別のポストを作ってみましたaccess_tokenを使ってリクエストしましたが、運がありませんでした。 私は入れません:

HTTPエラー401:許可されていない

私は.dynamics.com/API /データ/ V8.1への直接ポストを作るだけでテストとして/次のように をリード:

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のドキュメント全体を見てきましたが、ライブラリを使用せずに直接これを行う方法が見つからなかったので、単純な投稿要求を使用したいだけです。

エラーコードに「Unauthorized」と表示されるため、access_tokenは別の方法で送信する必要があると思います。 ダイナミックCRMでaccess_tokenを正しく使用する方法を教えてもらえますか? ありがとう!

答えて

2

戻ってきたアクセストークンはAzure AD Graph API用です。 Dynamics CRMではありません。

これを呼び出すには、リソースのダイナミズムCRM APIのアプリID URIがhttps://graph.windows.netではないアクセストークンを要求する必要があります。

documentationによれば、リソース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} 
+0

私は前に一度リソースを変更していたが、私は答えを得たことはありません、私はいつも、「HTTP/1.1 400不正な要求」を取得しました。 https://graph.microsoft.comのリソースではコードを取得していましたが、今はアクセスが許可されているリソースではないので便利だと分かりました。 私は今、リソースを変更しましたが、私は400のエラーが発生しています。 –

+0

あなたはその応答を読むべきです、それは何が問題だったと言うでしょう。 – juunas

+0

"ユーザーまたは管理者がアプリケーションの使用に同意していません"。元の問題はリソースが間違っていたため、これが解決されたと思います。ありがとうございます。 –

関連する問題