2017-04-25 1 views
0

Azure AD를 사용하여 응용 프로그램 자격 증명 (= 사용자 가장 없음)으로 SharePoint에 쿼리하도록 응용 프로그램 토큰을 얻으려면 어떻게해야합니까?Azure AD 토큰을 사용하여 SharePoint Online에 대한 응용 프로그램 액세스

다음 코드는 사용자로 데이터를 쿼리 완벽하게 작동하지만 우리는

예외가 슬로우에 관계없이 사용자 권한 등의 컬렉션에있는 모든 사이트를 나열하는 것처럼 가장하지 않고 정보를 가져 오기 위해 필요

유형 'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException' 의 예외가 mscorlib.dll에서 발생했지만 사용자 코드

추가 정보 처리되지 않은 : AADS TS70001는 : 'xxx는'식별자와 응용 프로그램 토큰을 얻을 수

코드 디렉토리 sharepoint.com에서 찾을 수 없습니다 :

internal static async Task<string> GetSharePointAccessToken(string url, string userAccessTokenForImpersonation) 
      { 

      string clientID = @"<not posted on stack overflow>"; 
      string clientSecret = @"<not posted on stack overflow>"; 

      var appCred = new ClientCredential(clientID, clientSecret); 
      var authContext = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext("https://login.windows.net/common"); 

      // Use user assetion if provided, otherwise use principal account 
      AuthenticationResult authResult = null; 

      if (string.IsNullOrEmpty(userAccessTokenForImpersonation)) 
      { 
       authResult = await authContext.AcquireTokenAsync(new Uri(url).GetLeftPart(UriPartial.Authority), appCred); 
      } 
      else 
      { 
       authResult = await authContext.AcquireTokenAsync(new Uri(url).GetLeftPart(UriPartial.Authority), appCred, new UserAssertion(userAccessTokenForImpersonation)); 
      } 

      return authResult.AccessToken; 
     } 

테스트 코드 :

// Auth token from Bearer https://xxx.azurewebsites.net/.auth/me 
string authHeader = @"<valid jwt bearer token from azure auth>"; 
var sharePointUrl = @"https://xxx.sharepoint.com/sites/testsite/"; 

string sharePrincipalToken = await GetSharePointAccessToken(sharePointUrl, null); // <-- doesn't work 
string sharePointUserToken = await GetSharePointAccessToken(sharePointUrl, authHeader); // <-- works 

Azure AD의 사용 권한 :

Permissions in Azure AD

답변

0

당신이 점점 오류 메시지가

이것은 당신이 "sharepoint.com"의 맥락에서 토큰을 얻기 위해 우리의 토큰 서비스를 가리키는 사용자로 로그인하는 것을 의미 당신 때문에 "공통"엔드 포인트를 사용하고 있습니다. here에 대해 자세히 알아보십시오.

대신 고정 된 끝점을 사용하십시오. 여기서 세입자는 응용 프로그램이 등록 된 곳과 동일하며 문제가 해결되는지 확인하십시오.

여러 응용 프로그램이이 응용 프로그램에 액세스 할 수있게하려는 경우 명시 적으로 응용 프로그램을 다중 사용자로 설정했는지 확인한 다음 외부 사용자가 사용자에게 응용 프로그램에 로그인하려고했는지 확인하십시오 서비스 호출을 시도하기 전에

도움이 될지 알려주세요.

관련 문제