Я пытаюсь получить список задач в планировщике мс. У меня есть некоторый код, который работал с редиректом, который представлял код аутентификации для проверки пользователя через объект PublicClientApplication ms java api.
'' '
///
/// Already defined after registering an application in azure AD
/// private static String applicationId;
/// private static String tennantId;
///
public String getUserAccessToken(String[] scopes) {
try {
PublicClientApplication app;
try {
// Build the MSAL application object with
// app ID and authority
String authority = "https://login.microsoftonline.com/";
app = PublicClientApplication.builder(applicationId)
.authority(authority + tennantId + "/")
.build();
} catch (MalformedURLException e) {
return null;
}
// Create consumer to receive the DeviceCode object
// This method gets executed during the flow and provides
// the URL the user logs into and the device code to enter
Consumer<DeviceCode> deviceCodeConsumer = (DeviceCode deviceCode) -> {
span.log(ImmutableMap.of("event", "o365-initialise-authentication-device-code-check", "", ""));
// Print the login information to the console
System.out.println(deviceCode.message());
};
// Request a token, passing the requested permission scopes
IAuthenticationResult result = app.acquireToken(
DeviceCodeFlowParameters
.builder(scopeSet, deviceCodeConsumer)
.build()
).exceptionally(ex -> {
return null;
}).join();
if (result != null) {
return result.accessToken();
}
return null;
}
public void getPlan(string planId)
{
// Build a Graph client
graphClient = GraphServiceClient.builder()
.authenticationProvider((IAuthenticationProvider) authProvider)
.logger(logger)
.buildClient();
PlannerBucketCollectionPage existingBuckets = graphClient.planner().plans(planId).buckets().buildRequest().get();
}
' ''
Это работает с существующим вызовомBuckets, возвращающим сегменты в плане, определенном planId
Теперь я sh для автоматизации кода с помощью демона, который не требует доступа пользователя и код аутентификации теперь: '' 'publi c String getUserAccessToken (String [] scopes) {
try {
// Create default logger to only log errors
DefaultLogger logger = new DefaultLogger();
logger.setLoggingLevel(LoggerLevel.DEBUG);
ConfidentialClientApplication app = ConfidentialClientApplication.builder(
applicationId,
ClientCredentialFactory.create(key))
.authority(authority + tennantId + "/")
.build();
ClientCredentialParameters clientCredentialParam = ClientCredentialParameters.builder(
Collections.singleton(GRAPH_DEFAULT_SCOPE))
.build();
CompletableFuture<IAuthenticationResult> future = app.acquireToken(clientCredentialParam);
BiConsumer<IAuthenticationResult, Throwable> processAuthResult = (res, ex) -> {
if (ex != null) {
System.out.println("Oops! We have an exception - " + ex.getMessage());
}
else
{
System.out.println("Returned ok - " + res);
System.out.println("Access Token - " + res.accessToken());
System.out.println("ID Token - " + res.idToken());
}
};
future.whenCompleteAsync(processAuthResult);
future.join();
CompletableFuture<Set<IAccount>> accountsRequest = app.getAccounts();
BiConsumer<Set<IAccount>, Throwable> processAccountsResult = (res, ex) -> {
if (ex != null) {
System.out.println("Oops! We have an exception - " + ex.getMessage());
}
if ( res == null )
{
System.out.println("No accounts");
}
else
{
log.info("Found "+ res.size() + " accounts");
}
};
accountsRequest.whenCompleteAsync(processAccountsResult);
CompletableFuture<IAuthenticationResult> future1;
try {
future1 = app.acquireTokenSilently
(SilentParameters.builder(Collections.singleton(GRAPH_DEFAULT_SCOPE),
null)
.forceRefresh(true)
.build());
} catch (MalformedURLException e) {
e.printStackTrace();
throw new RuntimeException();
}
future1.join();
IAccount account = app.getAccounts().join().iterator().next();
app.removeAccount(account).join();
return future.get().accessToken();
}
catch ( Exception ex)
{
log.error("Unable to get O365 token", ex);
}
return null;
}
' ''
Однако объекты учетной записи являются нулевыми, и если я пропущу вызов future1, то получу http http 401 ошибку.
Любая помощь / руководство с благодарностью получено.
Заранее спасибо