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의 사용 권한 :