Программисты JAVA общаются здесь
Anonymous
Считайте код устройства из потока кода устройства с помощью Java; МСАЛ; API Microsoft Graph
Сообщение
Anonymous » 17 янв 2025, 11:00
Ниже приведен мой код, и мне нужен способ скопировать URL-адрес и код устройства в переменную, чтобы я мог использовать селен для входа в браузер и использовать код для аутентификации. Единственная проблема заключается в том, что я не могу найти способ скопировать поток кода устройства.
Код: Выделить всё
package com.eclerx.email;
import java.util.Arrays;
import java.util.List;
import com.azure.identity.DeviceCodeCredential;
import com.azure.identity.DeviceCodeCredentialBuilder;
import com.microsoft.graph.authentication.TokenCredentialAuthProvider;
import com.microsoft.graph.models.Message;
import com.microsoft.graph.models.User;
import com.microsoft.graph.requests.GraphServiceClient;
import com.microsoft.graph.requests.MessageCollectionPage;
import okhttp3.Request;
public class DeviceCodeCredentialsTest {
private String deviceCode;
private static final List graphApiScopes =
Arrays.asList("https://graph.microsoft.com/.default");
public DeviceCodeCredentialsTest() {
}
public static AccessProvider initializeGraphForUserAuth() {
final DeviceCodeCredential deviceCodeCred = new
DeviceCodeCredentialBuilder().clientId(Constants.CLIENT_ID)
.tenantId(Constants.AUTH_TENANT)
.challengeConsumer(challange -> System.out.println("**" +
challange.getMessage())).build();
System.out.println(deviceCodeCred.toString());
TokenCredentialAuthProvider tokenCredentialAuthProvider = new
TokenCredentialAuthProvider(graphApiScopes,
deviceCodeCred);
System.out.println("Token " + tokenCredentialAuthProvider.toString());
GraphServiceClient graphServiceClient = GraphServiceClient.builder()
.authenticationProvider(tokenCredentialAuthProvider).buildClient();
System.out.println(graphServiceClient.toString());
return new AccessProvider(graphServiceClient, tokenCredentialAuthProvider);
}
public static void main(String[] args) {
AccessProvider accessProvider = initializeGraphForUserAuth();
System.out.println("token : " + accessProvider.accessToken());
System.out.println("User name : " + accessProvider.getServiceClient().users());
User user = accessProvider.getServiceClient().me().buildRequest().get();
final MessageCollectionPage messagePage = accessProvider.getServiceClient().me().messages().buildRequest()
.top(3).select("subject").get();
List messageList = messagePage.getCurrentPage();
for (Message msg : messageList) {
System.out.println("Subject -> " + msg.subject);
}
}
Вывод приведенного выше кода показан ниже
Код: Выделить всё
To sign in, use a web browser to open the page
https://microsoft.com/devicelogin and enter
the code ABCDEFGHI to authenticate.
Мне нужен способ скопировать приведенный выше код устройства
Подробнее здесь:
https://stackoverflow.com/questions/793 ... -graph-api
1737100807
Anonymous
Ниже приведен мой код, и мне нужен способ скопировать URL-адрес и код устройства в переменную, чтобы я мог использовать селен для входа в браузер и использовать код для аутентификации. Единственная проблема заключается в том, что я не могу найти способ скопировать поток кода устройства. [code]package com.eclerx.email; import java.util.Arrays; import java.util.List; import com.azure.identity.DeviceCodeCredential; import com.azure.identity.DeviceCodeCredentialBuilder; import com.microsoft.graph.authentication.TokenCredentialAuthProvider; import com.microsoft.graph.models.Message; import com.microsoft.graph.models.User; import com.microsoft.graph.requests.GraphServiceClient; import com.microsoft.graph.requests.MessageCollectionPage; import okhttp3.Request; public class DeviceCodeCredentialsTest { private String deviceCode; private static final List graphApiScopes = Arrays.asList("https://graph.microsoft.com/.default"); public DeviceCodeCredentialsTest() { } public static AccessProvider initializeGraphForUserAuth() { final DeviceCodeCredential deviceCodeCred = new DeviceCodeCredentialBuilder().clientId(Constants.CLIENT_ID) .tenantId(Constants.AUTH_TENANT) .challengeConsumer(challange -> System.out.println("**" + challange.getMessage())).build(); System.out.println(deviceCodeCred.toString()); TokenCredentialAuthProvider tokenCredentialAuthProvider = new TokenCredentialAuthProvider(graphApiScopes, deviceCodeCred); System.out.println("Token " + tokenCredentialAuthProvider.toString()); GraphServiceClient graphServiceClient = GraphServiceClient.builder() .authenticationProvider(tokenCredentialAuthProvider).buildClient(); System.out.println(graphServiceClient.toString()); return new AccessProvider(graphServiceClient, tokenCredentialAuthProvider); } public static void main(String[] args) { AccessProvider accessProvider = initializeGraphForUserAuth(); System.out.println("token : " + accessProvider.accessToken()); System.out.println("User name : " + accessProvider.getServiceClient().users()); User user = accessProvider.getServiceClient().me().buildRequest().get(); final MessageCollectionPage messagePage = accessProvider.getServiceClient().me().messages().buildRequest() .top(3).select("subject").get(); List messageList = messagePage.getCurrentPage(); for (Message msg : messageList) { System.out.println("Subject -> " + msg.subject); } } [/code] Вывод приведенного выше кода показан ниже [code]To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code ABCDEFGHI to authenticate. [/code] Мне нужен способ скопировать приведенный выше код устройства Подробнее здесь: [url]https://stackoverflow.com/questions/79363991/read-device-code-from-device-code-flow-using-java-msal-microsoft-graph-api[/url]