首页 > 解决方案 > 从 bearer_token O365 获取当前登录用户的用户信息

问题描述

我有一个来自 O365 的不记名令牌,当我对其进行解码时,不存在当前登录用户的用户信息。我能够获得一个令牌并使用jwt.io进行解码。我需要的用户信息是用户的family_name、given_name 和名称。

但是,只有当我将 grant_type 更改为密码并指定用户名和密码时,我才能获得带有用户信息的令牌。这给了我一个带有刷新令牌的委托令牌,它包含我需要的用户信息,但根据要求这是不可能的。

是否有另一种方法可以在不将授权类型更改为密码的情况下从令牌中获取用户信息?

使用 Ajax 请求的令牌请求

var form = new FormData();
form.append("grant_type", "client_credentials");
form.append("client_id", "xxxxx-xxxxx-xxxx-xxxxxx");
form.append("client_secret", "xxxxxxxxxx");
form.append("scope", "https://graph.microsoft.com/.default");

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://cors-anywhere.herokuapp.com/https://login.microsoftonline.com/xxxxxxxxxxx/oauth2/token",
  "method": "POST",
  "headers": {

    "cache-control": "no-cache",
    "postman-token": "4b326d42-a15d-c1ef-e2d3-2fb7f690b2ac"
  },
  "processData": false,
  "contentType": false,
  "mimeType": "multipart/form-data",
  "data": form
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

不记名令牌结果

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCIsImtpZCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCJ9.eyJhdWQiOiIwMDAwMDAwMi0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9jZTE2ZDRlMC0wYTUyLTQwMjgtOTVhOS1iNDIzMTAwYTgxNzMvIiwiaWF0IjoxNTY5MTY3MDM1LCJuYmYiOjE1NjkxNjcwMzUsImV4cCI6MTU2OTE3MDkzNSwiYWlvIjoiNDJGZ1lEaDE0WDU5OGNrT3Y5eGpjNm8vM0JIWkNRQT0iLCJhcHBpZCI6Ijc3OGVlNzNmLTg3OTQtNDVkZi05MDk1LTJhNjNhMTBiMmFkNCIsImFwcGlkYWNyIjoiMSIsImlkcCI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0L2NlMTZkNGUwLTBhNTItNDAyOC05NWE5LWI0MjMxMDBhODE3My8iLCJvaWQiOiJhYTZlMTI3Mi0xNmIyLTRhMDEtYTA4ZC03NmRkYmQ1MjRmMjYiLCJzdWIiOiJhYTZlMTI3Mi0xNmIyLTRhMDEtYTA4ZC03NmRkYmQ1MjRmMjYiLCJ0ZW5hbnRfcmVnaW9uX3Njb3BlIjoiTkEiLCJ0aWQiOiJjZTE2ZDRlMC0wYTUyLTQwMjgtOTVhOS1iNDIzMTAwYTgxNzMiLCJ1dGkiOiI3WENYa0tydk5rQ05XWGdjVndHYUFBIiwidmVyIjoiMS4wIn0.nbRKMflEF7582CVhyyUDPV1KfwyjY1uMG9w5jRLGUkg_bkEiqqvjudT6X4s32szdSAYdwddXUmrWCoqPm5hkbPA4eOqDrYk_y-mvNZwrmr2ZdrpqH4ma_w39kuCIcq7_vRgKfpZ3r3i-c21Ilpgr92qI25WWqDOFgKVO1Pd4YVRqy9caZ7DVeiIp26BAqAFHwuLEEbhXakOqUXfh49LShzTwpzl-8UaIQBzyoiFUWksA2OdM1cTaf-LSTYjwKXu5IN7rJ7z6xkC3YSLmctOPP2a1Y3PpYAlGbKmSdde5do4rIckiFRcwoUsqGGFOkzuyHUwU0na26-DLDLEB8DJ1og

我不确定 aud 是否正确

解码的 JWT

标签: javascriptoauth-2.0microsoft-graph-apibearer-tokeno365-flow

解决方案


我做了一些研究并遇到了这个解决方案,它需要您执行这些步骤才能获得所需的信息。基本上有一个从授权(登录)响应返回的代码,用于获取令牌。

此令牌将包含用户信息,然后用于访问 Microsoft Graph API 并获取用户信息。请参阅使用访问令牌调用 Microsoft Graph


推荐阅读