2017-09-16 6 views
1

私は、Outlook 365 APIを使用しようとしています。私の使用例は非常にシンプルです.1時間ごとに実行されるスクリプトを作成して、ユーザーのカレンダーに関する情報を抽出します。Outlook 365 API - 認証

私のスクリプトはPythonで動作し、トークンを取得できましたが、ユーザーのイベントを取得できません。私は明らかにMicrosoft Application Registration Portalに私のアプリを登録し、Calendar.readアプリケーションの許可を与えている。管理者はまた、/adminconsentエンドポイントにアクセスして同意を出しました。ここで

は、トークン(ドキュメントhere)を取得するための私のコードです:

url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token' 
data = { 
    'grant_type': 'client_credentials', 
    'client_id': app_id, 
    'scope': 'https://graph.microsoft.com/.default', <--- Really not sure about this here 
    'client_secret': client_secret, 
} 
r = requests.post(url, data=data) 
token = r.json().get('access_token') 

私が使用することを想定していますどのような範囲?ドキュメントは、上記のものだけを説明しています。

そしてユーザーのカレンダーを読むために:

url = 'https://outlook.office.com/api/v2.0/users/{}/events'.format(user_email) 
headers = { 
    'Authorization': 'Bearer {}'.format(token) 
} 
r = requests.get(url, headers=headers) 

は再び、私は本当にusers/{user_email}/部分のことを確認していません。似たようなことをしたが、文書のどこにも見つからなかったstackoverflowの人を読んだ。

は、私がアクセストークンを取得することができるが、私は、ユーザーのカレンダーを読み取ろうと次のエラーを取得する:

応答[401]

は、アクセストークンは、認証方法を使用して取得していますこのアプリケーションのアクセスを許可するには弱すぎます。提示された認証強度は1であり、必要なのは2です。

お手数ですが、私を助けてください。私はこの非常に簡単な作業をするのにあまりにも多くの時間を費やしました。

答えて

0

私は最終的にそれを見つけました。私はとても近くにいた。

Outlook Unified APIエンドポイントの代わりにMicrosoft Graph APIエンドポイントを使用する必要がありました。

最終的なコードは次のようになります。

import requests 

# Get a token 
url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token' 
data = { 
    'grant_type': 'client_credentials', 
    'client_id': app_id, 
    'scope': 'https://graph.microsoft.com/.default' 
    'client_secret': client_secret, 
} 
r = requests.post(url, data=data) 
token = r.json().get('access_token') 

# ... 

# Use the token using microsoft graph endpoints 
url = 'https://graph.microsoft.com/v1.0/users/{}/events'.format(user_email) # can also use the user_id (e.g. 12345-abcde-...) 
headers = { 
    'Authorization': 'Bearer {}'.format(token) 
} 
r = requests.get(url, headers=headers) 

Microsoftのドキュメントは本当に明確にする必要があります。非常に似たようなAPIが多すぎます。

+0

フィードバックFabriceに感謝します。グラフは絶対に推奨されるAPIです。実際には、Outlookのエンドポイントをカバーしています。違いを説明しようとする試みと、あなたが別のものを選ぶ理由を教えてください:https://docs.microsoft.com/en-us/outlook/rest/compare-graph-outlook GoogleではREST APIストーリーを統一して、グラフが好ましい方法であることを明確にしています。 –

+0

Cool。ご意見ありがとうございます。私はそれがあなたがあるバージョンから他のバージョンへと移行しようとしているその時点であると思うので、私の最後のフレーズです。 –

関連する問題