javascript - 从 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 是否正确
解决方案
我做了一些研究并遇到了这个解决方案,它需要您执行这些步骤才能获得所需的信息。基本上有一个从授权(登录)响应返回的代码,用于获取令牌。
此令牌将包含用户信息,然后用于访问 Microsoft Graph API 并获取用户信息。请参阅使用访问令牌调用 Microsoft Graph
推荐阅读
- android - 在 AlertDialog 操作后完成当前活动会引发错误
- c# - 邮件进入 Outlook 垃圾邮件文件夹
- c - 在找到两个输入数组的并集和交集的 C 程序中,我在交集部分有问题
- python - 将 python 32 更改为 64 位后,Jupyter Notebook/Lab 无法启动
- java - 使用警报管理器安排通知
- java - java - 如何在java中随机分配我们分配到二维数组中的每个数字?
- python - Python3.7:加载共享库时出错:libpython3.7m.so.1.0
- spring - @PersistenceUnit 和 @PersistenceContext 可以在同一个应用程序中使用吗
- javascript - 如果在对象中找到值,则返回键
- javascript - Zapier Javascript代码来隔离日期时间字符串的一部分