2017-02-01 9 views
0

これは私がやっていることです。仕事用アカウントを使用してOffice 365のカレンダーにアクセスできない

Microsoft Azureを通じてMicrosoft Graph APIを使用して、Office 365テナントのカレンダーにアクセスして管理できるアプリケーションを開発したいと考えています。同社には、10人のユーザーを持つOffice 365 BusinessとAzure Active Directoryへのアクセスがあります。私はPython 3.5を使用していて、ライブラリに 承認コード許可フローをレイアウトするよう要求しています。

Windows Azure Active Directoryに自分のアプリケーションを登録し、このアプリケーションに必要なすべてのアクセス許可と返信URLを提供しました。クライアント秘密鍵も発行されています。トークン

を取得し、第二に

def triggerAutorization(request): 
state = str(uuid4()) 
payload = { 
"client_id": client_id, 
"response_type": "code", 
"state": state, 
"redirect_uri": "http://localhost:8000/authorized", 
"prompt": "consent" 
} 
url = "https://login.microsoftonline.com/{tenant}/oauth2/authorize?" + urllib.parse.urlencode(payload) 
return HttpResponseRedirect(url) 

:Autorizationコードを取得し、まず

:ここ https://graph.microsoft.io/en-us/docs/authorization/app_authorization


、私は続くプロセス:

は、私は次のリンクを読んで
def requestToken(request): 
    headers = { 'Content-Type' : "application/x-www-form-urlencoded"} 
    post_data = { 
    "client_id": client_id, 
    "client_secret": client_secret, 
    "code" : request.session['code'], 
    "redirect_uri" : "http://localhost:8000/authorized", 
    "grant_type": "authorization_code", 
    "resource": "https://graph.microsoft.com/" 
    } 
    raw_response = requests.post("https://login.microsoftonline.com/{tenant}/oauth2/token?", data=post_data, headers= headers) 
    json_response = raw_response.json() 
    if json_response['access_token']: 
     request.session['access_token'] = json_response['access_token'] 

    return HttpResponseRedirect('/createquote') 
それは結構です

第三に、すべては、私がアクセスカレンダーへの権利(私は仮定)をトークンに沿ってアクセスを得た:

'scope': 'Calendars.Read Calendars.Read.All Calendars.Read.Shared Calendars.ReadWrite Calendars.ReadWrite.All Contacts.Read.Shared Directory.AccessAsUser.All Directory.Read.All Files.Read Files.Read.All Files.Read.Selected Files.ReadWrite Files.ReadWrite.All Mail.Read Mail.ReadWrite.All Mail.Send Mail.Send.All openid profile User.Read User.Read.All User.ReadBasic.All', 
'expires_on': '1485932306', 
'refresh_token': 'AQAB..', 
'resource': 'https://graph.microsoft.com/', 
'token_type': 'Bearer', 
'expires_in': '3600', 
'ext_expires_in': '0', 
'not_before': '1485928406', 
'access_token': 'eyJ0...', 
'id_token': 'eyJ0...' 

第四に、問題はここに来て、私はAPI呼び出しを作るしようとすると、応答が500のサーバーエラーであり、意味のある詳細はないためです。

def getCalendarList(request): 

    token = request.session['access_token'] 
    headers = { 
    'User-Agent' : 'pythoncontacts/1.2', 
    'Authorization' : 'bearer {0}' . format(token), 
    'Content-Type' :"application/json;odata.metadata=minimal;odata.streaming=true" 
} 
    request_id = str(uuid.uuid4()) 
    instrumentation = { 'client-request-id' : request_id, 
         'return-client-request-id' : 'true' } 
    headers.update(instrumentation) 
    raw_response = requests.get("https://graph.microsoft.com/v1.0/me/calendars", headers = headers) 
    json_response = raw_response.json() 
    return HttpResponse(" %s" %str(json_response)) 

面白いことに、私は「https://graph.microsoft.com/v1.0/me/」とのAPIコールを変更すると、それが動作することです。

コミュニティ、あなたが私を助けてくれることを願っています。私は数多くのドキュメントを読んで、さまざまなアプローチを試みましたが、これを動作させることはできませんでした。

多くのありがとうございます。

多くの方にご注目ください。

+0

このユーザーのデフォルトカレンダーはhttps://outlook.offfice365.comで確認できますか?また、Exchange Onlineを使用しているか、Exchange Onlineを使用しているビジネスライセンスがあるかについては、説明からは分かりません。 –

+0

Marc LaFleurに感謝します。 !! :-) –

答えて

0

私は全部の処理を未処理で行っていません。ヘッダーを自分で作成することなく、より高いレベルで作業するためのoath2ライブラリが必要です。彼はdjangoを使用していますが、MSFTの男jasonjohから素晴らしいチュートリアルがあります。どのようにトークンを保管していますか?私は彼らが4k以上だと思う!

希望します。

+0

ところで、おそらくあなたはv2 API [link](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-appmodel-v2-html)を見てください。概要)。 – david

+0

OAUTH /トークンプロセスに問題があるようには聞こえません。グラフエンドポイントを呼び出すと、彼はすでに認証済みです。私はそれがトークンであればHTTP 401 - Unauthorizedを見ると予想されます。 –

1

解決策が見つかりました。それは私のOffice 365計画であった。 「Office 365 business」エディションで作成されたユーザーは、Microsoft Graphを完全に使用することはできません。多くの研究の後、私はビジネスプレミアムのサブスクリプション試験にサインアップしました。そのプランの下にユーザーを作成し、そのアカウントを使用してサインインし、最終的に彼のカレンダーを取得します。さらに、V2.0エンドポイントを使用するようにプロセスを変更しました。

面白いことは、時々、Microsoftサービスのエラー応答が問題の本当の原因を説明していないことです。

これは、同じ問題を処理する必要があるかもしれません。実際には、Microsoft GraphとAzure ADで動作するビジネスプランに注意してください。

Office 365件の中規模ビジネス(今Office 365件のビジネスプレミアムと呼びます) Office 365のエンタープライズE1、E3、E4、またはK1 Office 365の教育 Office 365の開発

詳細については、これはURLです。

https://msdn.microsoft.com/en-us/office/office365/howto/setup-development-environment#bk_Office365Account

私は私のために働くのコードを投稿させていただきます。 最後に、私は文法や意味の誤りをしてください。

すべてのコミュニティに感謝します。

関連する問題