上下文:我有一个控制台应用程序,想要使用Graph API与AAD进行通信,以检查租户中是否存在特定的userId。
我一直在遵循以下准则:https://docs.microsoft.com/en-us/graph/auth-v2-service?view=graph-rest-1.0
我可以使用以下方式生成令牌:
https://login.microsoftonline.com/common/oauth2/v2.0/token
client_id=x
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=x
&grant_type=client_credentials
但是当我调用图形API时,出现此错误:
https://graph.microsoft.com/v1.0/users/12345678-73a6-4952-a53a-e9916737ff7f
{
"error": {
"code": "Authorization_RequestDenied",
"message": "Insufficient privileges to complete the operation.",
"innerError": {
"request-id": "x",
"date": "x"
}
}
}
我的AAD应用具有以下所有权限:
1. Microsoft Graph
2. Windows Azure Active Directory
我尝试将范围更改为
scope=https%3A%2F%2Fgraph.microsoft.com%2Fuser.read
但这是我生成令牌时得到的错误:
The provided value for the input parameter 'scope' is not valid. The scope https://graph.microsoft.com/user.read is not valid.
我尝试了“ User.Read”,“ User.Basic.Read”等组合,但是没有任何效果。
有人可以帮忙吗?
答案 0 :(得分:1)
此操作不起作用的最可能原因是,您的组织管理员实际上并未授予您已将应用程序注册配置为要求的权限
在您的代码中,您的应用程序仅作为应用程序进行身份验证。没有登录用户参与其中,它要求您的应用使用和保密用于认证的密钥(client_secret
参数)。
在这种情况下,请求范围https://graph.microsoft.com/.default
是正确的方法。您对Azure AD的意思是:“请为已授予此应用程序的所有应用程序权限提供访问令牌”。请求范围https://graph.microsoft.com/User.Read
是不正确的方法,因为没有具有该名称的 application 权限。
答案 1 :(得分:0)
您创建的应用是否具有该范围的委派权限或应用权限?
很可能是前者。委派的权限不适用于客户端凭据流。