我正在尝试对'https://graph.windows.net/ {{tenantId}} / accounts?api-version = 1.6
进行API调用我首先使用client_credentials令牌调用来获取访问令牌。这是电话:
POST /{{tenantId}}/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
User-Agent: PostmanRuntime/7.19.0
Host: login.microsoftonline.com
grant_type=client_credentials&client_id={{client_id}}&client_secret={{client_secret}}&\
resource=https%3A%2F%2Fgraph.windows.net
这将返回JWT(我删除了与此问题无关的元素):
{
"aud": "https://graph.windows.net",
"iss": "https://sts.windows.net/e1642542-781d-481e-a194-1c271a68a5f1/"
"roles": [
"Application.ReadWrite.OwnedBy",
"Application.ReadWrite.All"
],
}
您可以看到aud设置为https://graph.windows.net,并且指示了适当的应用程序角色。
当我将帐户调用到graph.windows.net端点时,出现错误:
{
"odata.error": {
"code": "Authentication_MissingOrMalformed",
"message": {
"lang": "en",
"value": "Access Token missing or malformed."
}
}
}
对于/ accounts调用,我添加了一个Authorization标头,其值设置为Bearer:(访问令牌)。这是在jwt.io中完美解码的令牌,所以我知道令牌本身很好。
有什么想法吗?
答案 0 :(得分:0)
Azure已停止更新Azure AD Graph API。从this doc开始,建议使用Graph API代替Azure AD Graph API。
从数据有效负载中设置相应的范围参数。
答案 1 :(得分:0)
对于/ accounts调用,我添加了一个Authorization标头,其值设置为Bearer :(访问令牌)。
Bearer: ey....
不是正确的载体值,您不能在值中包含冒号。
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM