2017-02-01 1 views
0

이것이 내가하는 일입니다.작업 계정을 사용하여 Office 365의 일정에 액세스 할 수 없습니다.

Microsoft Azure를 통해 Microsoft Graph API를 사용하여 Office 365 테넌트의 일정에 액세스하고 관리 할 수있는 응용 프로그램을 개발하고 싶습니다. 이 회사는 10 명의 사용자를 가진 365 개의 사무실과 Azure Active Directory에 대한 액세스 권한을 가지고 있습니다. 저는 파이썬 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을 사용하고 있는지 여부에 대한 설명이 명확하지 않습니다. –

+0

Marc LaFleur에게 감사드립니다. !! !! :-) –

답변

0

전체 프로세스를 원시로 처리하지는 않았지만 헤더를 직접 작성하지 않고 상위 레벨에서 작업하는 데 도움이되는 일부 oath2 라이브러리가 있어야합니다. 그가 장고를 사용하더라도 MSFT 남자 jasonjoh에서 위대한 튜토리얼이 있습니다. 토큰을 어떻게 보관하고 있습니까? 나는 그들이 4k 이상이라고 생각한다.

희망합니다.

+0

어쨌든 v2 API [link] (https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-appmodel-v2-ko)를 봐야합니다. 개요). – david

+0

OAUTH/토큰 프로세스에 문제가있는 것 같지 않습니다. 그래프 엔드 포인트를 호출하면 그는 이미 인증을 마쳤습니다. HTTP 401 - 토큰 자체 인 경우 Unauthorized를 볼 것으로 예상됩니다. –

1

해결책을 찾았습니다. 그게 내 Office 365 계획 이었어. "Office 365 business"버전으로 만든 사용자는 Microsoft Graph를 전체적으로 사용할 수 없습니다. 많은 연구 끝에 Business Premium 가입 시험에 등록했습니다. 그 계획에 따라 사용자를 생성 한 다음 그 계정을 사용하여 로그인하고 마침내 캘린더를받습니다. 또한 V2.0 엔드 포인트를 사용하도록 프로세스를 변경했습니다.

때때로 재미있는 점은 Microsoft 서비스 오류 응답이 문제의 실제 원인을 설명하지 않는다는 것입니다.

더 많은 개발자가 동일한 문제를 처리해야 할 수도 있습니다. 실제로 Microsoft Graph 및 Azure AD에서 작동하는 비즈니스 계획을 알고 있어야합니다.

오피스 365 개 중견 기업 (지금 전화 Office와 같은 365 비즈니스 프리미엄) 오피스 365 엔터프라이즈 E1, E3, E4, 또는 K1 오피스 365 교육 오피스 365 개발자 자세한 내용은

, 이것은 URL입니다 :

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

내가 나를 위해 일하는 코드를 게시하실 수 있습니다. 마지막으로, 문법이나 의미 오류를 실례합니다.

모든 커뮤니티에게 감사드립니다.

관련 문제