2016-06-07 4 views
1

그래프 API 및 관련 인증/권한 부여 플로를 사용하면 조직의 모든 사용자 데이터에 어떻게 액세스 할 수 있습니까? 또한 여러 조직/세입자가 앱을 사용할 수 있어야합니다.그래프 API를 통해 다른 사용자의 데이터에 액세스하는 방법은 무엇입니까?

예 : contoso.onmicrosoft.com에 속한 모든 사용자의 모든 일정에서 일정을 읽어야하는 앱이 있습니다. 관리자 인 [email protected]이 언급 된 데이터를 읽을 수있는 응용 프로그램을 허가하고 싶습니다. Managed API를 사용하면 가장 (impersonation)을 통해 쉽게 수행 할 수 있습니다.

그러나 Graph API 및 OAuth를 사용하여 동일한 작업을 수행하려고 시도하지만 직접적인 해결책을 찾을 수 없거나 매우 명확한 것이 빠져 있어야합니다. manage.windowsazure.com (멀티 테넌트)을 통해 응용 프로그램을 만들었고 Microsoft Graph API (모든 응용 프로그램 및 위임 된 사용 권한)가 필요하도록 구성했습니다.

1)

2) 잭이 응용 프로그램

3) 내가 돌아올에게 권한을 부여 https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&redirect_uri=<my redirect url>&client_id=<my client id>으로 [email protected] 포인트 :

나는 다음과 같은했다 <my redirect url>/?code=<my authorization code>&session_state=<blah>

4) 아래처럼 POST 요청을 보냅니다.

POST https://login.microsoftonline.com/common/oauth2/token 
Headers: content-type: application/x-www-form-urlencoded 

Body: 
grant_type=authorization_code&code=<my auth code from step above> 
&redirect_uri=<my redirect url> 
&client_id=<my client id> 
&client_secret=<my client secret> 
&resource=https%3A%2F%2Fgraph.microsoft.com%2F 

5) 다음 작업을 수행 할 때 :

GET https://graph.microsoft.com/v1.0/users/[email protected]/messages 
Headers: Authorization: Bearer <auth token from step #4> 

메시지에 대해 200 OK 응답이 표시됩니다.

다음 작업을 수행 할 때 :

GET https://graph.microsoft.com/v1.0/users/[email protected]/messages 
Headers: Authorization: Bearer <auth token from step #4> 
내가 가진 403 금지 응답을 얻을 :

{ 
    "error": { 
     "code": "ErrorAccessDenied", 
     "innerError": { 
      "date": "2016-06-07T08:47:27", 
      "request-id": "5b629e30-e6bd-474d-b3dd-8ce25c5ad1c4" 
     }, 
     "message": "Access is denied. Check credentials and try again." 
    } 
} 

답변

3

참조한 흐름/URL은 위임 된 범위를 활용하는 인증 코드 흐름을위한 것입니다.

A) 관리자가 앱을 작동 (예 : 모든 캘린더에 액세스)하려면 올바른 흐름을 사용하고 있습니다.

B) 관리자가 동의 한 후에 모든 사용자가 앱을 사용하게하려면 app (클라이언트 자격 정보) 플로를 사용하고 애플리케이션 범위를 사용해야합니다. 즉, 일반 인증 흐름과 동의를 분리해야합니다.

동의를 들어 다음과 같은 URL로 관리자를 가리 키도록해야합니다 :

GET https://login.microsoftonline.com/common/oauth2/authorize?resource=https://graph.microsoft.com/&client_id=<YourClientId>&client_secret=<YourClientSecret>&response_type=code&redirectUri=<YourRedirectUri>&prompt=admin_consent 

인증 흐름에 대한 귀하의 웹 서버에서 단일 통화가 필요합니다

POST https://login.microsoftonline.com/common/oauth2/token 
body resource=https://graph.microsoft.com/&client_id=<YourClientId>&client_secret=<YourClientSecret>&response_type=code 

또는를 더 나은 점은 ADAL의 AquireToken (resource, clientCredentials) 오버로드를 사용하기 만하면됩니다.

일단 끝나면 앱에서 그래프를 요청하는 것이 좋습니다. 에 관계없이

당신이 일을 수행 할 수 있습니다 올바르게 설정되어 있는지 한 번 확인) A를 스틱) 또는 B로 전환하려면 다음

  1. 당신이 그래프에서 돌아 토큰을 확인합니다 (한 당신은 무기명와 함께 요청에 첨부)하고

참고 즉 Calendars.Read 필요는 역할과 역할 항목이 있는지 확인하십시오 : 2.B 당신을 필요로 & 2.A 다음 단계를 가지고 관리자가 신청서에 동의하는 테스트 거주자에게 보내십시오.

2.A 사용 GraphExplorer (https://graphexplorer2.azurewebsites.net/) 그 동의를 확인이 제대로 아무것도가 표시되지 않으면

beta/servicePrincipals?$filter=displayName eq '[YourApplicationName]' 

를 조회하여 설정 한 후, 아무도 응용 프로그램에 동의하지 않았다. 사용 GraphExplorer (만 위임 범위와 인증 코드 흐름에 적용)과

2.B 위임 하나가

beta/oauth2permissiongrants?$filter=clientId eq '[IdFrom ServicePrincipal in 2.a]' 

를 조회하고 특정 사용자에 대한 결과 중 하나를 얻을 수 있도록 올바르게 권한이 부여되었는지 확인 질문이나 "AllPrincipals". 여기 위임 범위 대 응용 프로그램에


상세 정보 : 응용 프로그램에 http://graph.microsoft.io/en-us/docs/authorization/permission_scopes

더 많은 정보를 원하시면 여기 흐름 : https://graph.microsoft.io/en-us/docs/authorization/app_only

+0

이 도움이! 나는 App Only 버전으로 바꾸었다. (인증서 없이는 몇 가지 문제가 있었지만, 결국 그것도 없었다.) 그 열쇠는, 이전처럼 흐름을 시도했기 때문에'prompt = admin_consent'를 추가하는 것처럼 보이지만 작동하지 않았습니다. 특정 API 호출에 몇 가지 문제가 있지만 그와 같은 많은 공간이 있습니다. :) 다시 한 번 감사드립니다! –

2

응용 프로그램 권한을 사용하기 위해 (https://graph.microsoft.io/en-us/docs/authorization/app_only 참조) 응용 프로그램 전용 인증 흐름을 사용하세요 - 토큰 요청 (4 단계)에 대해 grant_type = client_credentials를 grant_type = authorization_code 대신 전달해야합니다.

관련 문제