Spring Azure AD - получите АДРЕС пользователя после аутентификации - PullRequest
0 голосов
/ 19 октября 2018

Я использую образец, предоставленный Microsoft, я очень хорошо себя аутентифицирую.Я получаю основную информацию о моем пользователе после аутентификации.Как получить дополнительную информацию о моем пользователе (например, номер улицы, номер дома, номер телефона и т. Д. )?

  1. Я использую этот пример внутреннего загрузчика Azure AD Spring Boot - Github
  2. Я запускаю и регистрируюсь (https://localhost:8080)
  3. Успешная аутентификация!
  4. Я получаю основную информацию о пользователе ( например, Имя,Фамилия )
  5. Как получить дополнительную информацию о пользователе ( например, номер улицы, номер дома, номер телефона )?

Код (HomeController.java):

@GetMapping("/")
public String index(Model model, OAuth2AuthenticationToken auth) {
    final OAuth2AuthorizedClient client = this.authorizedClientService.loadAuthorizedClient(
            auth.getAuthorizedClientRegistrationId(),
            auth.getName());

    // Name, Surname
    model.addAttribute("userName", auth.getName());
    model.addAttribute("pageTitle", "Welcome, "+auth.getName());
    // Azure info
    model.addAttribute("clientName", client.getClientRegistration().getClientName());

    // HERE I WANT TO SEND A (MICROSOFT OR AD) GRAPH API REQUEST TO GET 
    // THIS USER'S ADDRESS (street number, house number, etc.)

    return "index";
}

1 Ответ

0 голосов
/ 23 октября 2018

Во-первых, нам нужно получить токен доступа от auth.

Мы могли бы получить токен доступа с помощью следующего кода.

DefaultOidcUser user = (DefaultOidcUser)auth.getPrincipal();
String accessToken = user.getIdToken().getTokenValue(); 

Как отправить API запроса с кодом Javaпопробуйте его с помощью следующего кода.

API REST графа Azure для получения пользователя

https://graph.windows.net/myorganization/users/{user_id}?api-version=1.6

API остальных графа Microsoft для полученияпользователь

https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}?$select=displayName,givenName,postalCode,...

Примечание: Если вам нужен другой набор свойств, вы можете использовать параметр запроса OData $ select.Например, чтобы вернуть displayName, данноеName и postalCode, вы должны добавить в свой запрос следующее: $ select = displayName, GivenName, postalCode

Ниже приведен демонстрационный код:

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.util.EntityUtils;

 String url = "https://graph.windows.net/{yourtenantId}/users/{userObjectId}?api-version=1.6"; //take Azure AD graph for example.
 HttpClient client = HttpClientBuilder.create().build();
 HttpGet request = new HttpGet(url);
 request.addHeader("Authorization","Bearer "+ accessToken);
 HttpResponse response = client.execute(request);
 HttpEntity entity = response.getEntity();
 // Read the contents of an entity and return it as a String.
 String content = EntityUtils.toString(entity);
 JsonObject jsonObject = (JsonObject) new JsonParser().parse(content);
...