我正在使用守护程序服务,该服务从Microsoft Graph检索联系人列表,但不会向用户提示Microsoft身份验证。但是,即使获得了管理员的同意,我也无法检索我在Microsoft Azure中设置的权限。
我使用邮递员生成带有以下信息的令牌。
https://login.microsoftonline.com/0835055b-8a00-4130-b07a-037430dd000d/oauth2/v2.0/token
以下json是我得到的结果
{
"token_type": "Bearer",
"scope": "profile openid email https://graph.microsoft.com/User.Read https://graph.microsoft.com/.default",
"expires_in": 3600,
"ext_expires_in": 3600,
"access_token": "{MY_TOKEN_HERE}"
}
令牌已成功生成,但返回的令牌不包含我在MS Azure中portal.azure.com>已注册的应用程序> API权限中设置的已授予管理员同意的权限。
我有Microsoft Graph-Users.Read和Contacts Read,并需要管理员同意,并带有绿色的勾号。参见下图:
Microsoft Azure - API Permission
如果没有作用域,我将无法检索具有给定令牌的联系人列表。
{
"error": {
"code": "ErrorAccessDenied",
"message": "Access is denied. Check credentials and try again.",
"innerError": {
"request-id": "63a24a22-34f7-42a1-a9d5-d7aaf598f4d6",
"date": "2019-07-01T02:59:15"
}
}
}
有什么我想念的吗?我以为,当管理员授予同意后,我应该能够将API包含在范围内以生成令牌。
我看到这里有一个类似的问题,但是没有适合我的解决方案: Microsoft graph API: Unable to fetch users with the generated access token
答案 0 :(得分:1)
根据您的屏幕截图,您授予的contacts.read是应用程序权限。而且,您只有一个委派权限:user.read。
但是,如果要调用图形api:graph.microsoft.com/v1.0/me/contacts,则需要使用委托权限。它将代表用户。因此,您可以获得有关“我”的信息。并且基于the official documentation,您需要授予Contacts.Read(用于编写的Contacts.ReadWrite)委托权限。
如果要使用应用程序权限,则需要使用client credentials flow获取访问令牌。通过这种方式获得的令牌可用于应用程序许可。并且您应该按以下方式调用api:graph.microsoft.com/v1.0/users/{id | userPrincipalName} /联系人