Microsoft Graph获取用户照片

时间:2019-03-13 13:29:21

标签: vba microsoft-graph

我尝试从组织中的某些用户那里下载个人资料图片。我正在获取access_token,但在下一步中获取错误消息:

  

令牌不包含任何权限,或者权限不可以   了解。

我认为我的应用具有所有必需的permissions2

这是我使用的代码:

Sub Test_GetToken()
    Dim xml As New MSXML2.XMLHTTP60
    Dim url As String
    Dim Json As Object

    url = "https://login.microsoftonline.com/tenant_id/oauth2/v2.0/token"

    xml.Open "POST", url, False
    xml.setRequestHeader "application", "x-www-form-urlencoded"
    xml.Send ("client_id=1234678&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret=12345678&grant_type=client_credentials")

    Set Json = JsonConverter.ParseJson(xml.responseText)

    access_token = Json("access_token")
    token_type = Json("token_type")
    expires_in = Json("expires_in")
    ext_expires_in = Json("ext_expires_in")


    ' trying to get the photo
    url = "https://graph.microsoft.com/v1.0/users/user1@OUTLOOK.DE/photo/$value"

    xml.Open "GET", url, False
    xml.setRequestHeader "application", "x-www-form-urlencoded"
    xml.setRequestHeader "Content-Type", "text/json"
    xml.setRequestHeader "Authorization", token_type & " " & access_token

    xml.Send ("")

    'Debug.Print token_type & " " & access_token
    'Debug.Print xml.getAllResponseHeaders
    Debug.Print xml.responseText

    Set xml = Nothing
End Sub

有人知道错误在哪里吗?

2 个答案:

答案 0 :(得分:3)

这里有几处错误:

  1. HTTP中没有application标头
  2. x-www-form-urlencoded是不完整的Content-Type(应为application / x-www-form-urlencoded)。
  3. 您的Content-Type应该是application/json
  4. 您不能使用“客户端证书OAuth”授予来访问Microsoft帐户(即个人@Outlook地址)。客户端凭据只能访问您租户内用户的数据。为了访问个人帐户数据,您需要使用授权代码或隐式OAuth授予来使用户进行身份验证。

答案 1 :(得分:0)

我获得了管理员同意,现在可以使用了。感谢Marc改进了我的代码并获得了解决方案。