【问题标题】:Spring Azure AD - Get user's ADDRESS after authenticationSpring Azure AD - 身份验证后获取用户的地址
【发布时间】:2018-10-19 14:13:12
【问题描述】:

我使用的是微软提供的示例,我验证了自己就好了。身份验证后,我检索有关我的用户的基本信息。如何检索有关我的用户的更多信息(例如街道号码、门牌号码、电话号码等)?

  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";
}

【问题讨论】:

  • 你有关于这个线程的任何更新吗?如果它有用,您可以将其标记为答案。

标签: java spring azure spring-boot active-directory


【解决方案1】:

首先我们需要从 auth 获取访问令牌。

我们可以通过以下代码获取访问令牌。

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

如何用Java代码发送请求API,请用下面的代码试一试。

Azure AD graph REST API for get a user

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

Microsoft graph Rest API for get a user

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

注意:如果您需要不同的属性集,可以使用 OData $select 查询参数。例如,要返回 displayName、givenName 和 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);

【讨论】:

    猜你喜欢
    • 2016-08-23
    • 2018-11-17
    • 2020-03-27
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2019-06-25
    相关资源
    最近更新 更多