我一直在尝试弄清楚如何在使用OAuth2 客户端凭据流时找到用户的SharePoint路径(其中应用程序有权使用Office 365管理员读取所有用户的SharePoint文件)一次性录取)
我在Azure中设置了客户端应用程序,如果我对SharePoint URL进行硬编码,则能够读取文件 - 所以我知道它已正确设置。
但我需要“发现”SharePoint网址,以便它可以更改容忍并可以跨客户重复使用。
Using OAuth2 Flow for Exchange
var azureAdAuthority = "https://login.windows.net/{tenant-id}/oauth2/authorize".Replace("{tenant-id}", tenantId);
var discoveryUri = "https://api.office.com/discovery/v1.0/me/";
var discoveryResourceUri = "https://api.office.com/discovery/";
// discover contact endpoint
var cert = new X509Certificate2(certFilePath, certFilePassword, X509KeyStorageFlags.MachineKeySet);
var clientAssertion = new ClientAssertionCertificate(clientId, cert);
var userIdentifier = new UserIdentifier(userObjectId, UserIdentifierType.UniqueId);
var userAssertion = new UserAssertion(userObjectId);
// create auth context
var authContext = new AuthenticationContext(azureAdAuthority, false);
// create O365 discovery client
var discovery = new DiscoveryClient(new Uri(discoveryUri),
() => authContext.AcquireTokenSilent(discoveryResourceUri, clientAssertion, userIdentifier).AccessToken);
// query discovery service for endpoint for 'calendar' endpoint
var dcr = await discovery.DiscoverCapabilityAsync("MyFiles");
这个和许多其他变体会从AcquireTokenSilent函数中抛出异常。
如果我不使用“userIdentifier”并调用AcquireToken函数则成功,但DiscoverCapabilityAsync函数失败。