Microsoft Graph 颁发无效令牌



我正在尝试获取Microsoft API的访问令牌,以便将Outlook联系人放入我的ionic/Angular Webapp中。首先,我使用隐式流通过对授权终结点 (v2( 的 GET 请求获取令牌。

我通过将用户发送到以下页面来做到这一点,该页面在登录完成后重定向到指定的 url:

  "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?"
  +"client_id={CLIENT_ID_HERE}"
  +"&response_type=token&redirect_uri=http%3A%2F%2Flocalhost%3A8100%2F"
  +"&scope=offline_access openid contacts.read"
  +" contacts.read.shared user.read"
  +"&resource=https://graph.microsoft.com"
  +"&response_mode=fragment";

我收到响应,没有错误,登录并授予权限后,它会使用访问令牌作为 uri 参数重定向到我的 Web 应用程序。 我能够从那里提取它。

但是,我收到的令牌无效。这是我得到的网址:

http://localhost:8100/
#access_token=EwBgA8l6BAAUO9chh8cJscQLmU%2bLSWpbnr0vmwwAAUlVAGL4SbC2vv7LCtvlu22I81D1f/RF7ZgS/dyTW8rScVHwtOCYvhV/BinsEAymBYcZhdLbOk1eRWP250l3ExjK2lgCzg4Kib1IVkKgxUmJVU8lAvYjO1KNEPDrzVpdVArbjTTv/zxDRmsAhqQK/887jT8W0Tmg5kEwbjv/Gjlz3BOBr6XiI35cZSyJaLodYYetRUMc/PNiSm8jsy/8L0yl%2b0/P5x3BWLgAXuE7V1xFpc5/78XnTJFaOFDfG8JUpCGL08AJV1MIVz1uVfmeYVLTmU9URKqSNqX0GjUbFjKSjDIL/xV24xF2xd8sQ4XTpxrj%2bgs7rIHkDZQSe1ZcNTEDZgAACHPLh4wf/djAMAIvde8S7AhIjYALfbgwGzvfa%2bG/yqFI3ceSoiEaqFST01woiSUUf2ybVN53T6leLlzuLrmioOcSjXvhb38G04qn9zz8yfkH6deNpiomOD64YEyDJRGIrdrPwKof5bCAL8tBq/Y/0wqz2lvi5mUT7GnlgJ2zkbP%2bmsGpOzt%2bAtMU8JQDyOi3ad/nj5jriawEzmKMQmE3nFijnjGAyvoiVBUQraDuyeKJlJowcMkRWBZmcStc7paDN0npHj7Q%2bSRHRI6vYB2hJwSkIspn67rXjQ4ItvJnV7zxRpwJnmC54gcSYLdp%2b/Z6W5jXVucgvZ0IRdKHAa2HLCVFmv7q5RVdtJ2UrL5oi7vQG6fo96vpnbyLA%2bt3IGZW88Jka4AiajSRvRV4%2b19IYzp4AtzWqu9PJJxgYPwdKJjJEilSbnyDceVmndzWv/OSV4zsg6Q%2buc98PpwW47oZtgLvLvarkD%2bKwq7REadbb1yNx1XPzSO43djVtAOJLthvfvw2hXMO1koclFrMnqjVlCEU5ONEIKqwWOuiARxcpmTlqNFSVhhpzMXGCSjhE5pqWLkZqVrNpfZuKIMPW5/BT6GNITPB4vBB8r9nxJCYFzSuENS2SKjnTKQwWQcec/iJblvsXlWJPMWzwFPwV93dO0SehJEisW/ap6XefRokjwuLErYDPXwmCMP45eeZSvad21WhJi4bRKvBCBqfn8jrlKqpyLMweu/bfpR04q4B1ye5X8Z29fbq4nC6Y3oC
&token_type=bearer
&expires_in=3600
&scope=openid%20https://graph.microsoft.com/Contacts.Read%20https://graph.microsoft.com/User.Read

(为便于阅读而添加了换行符(

问题是收到的令牌不是有效的令牌,我不确定为什么会得到这个。

我还尝试在授权端点上使用 GET 来获取代码,然后在令牌端点上使用 POST 来获取令牌,我得到了类似的响应。(我禁用了 Web 安全性以从我的 ionic 应用程序发出 post 请求,不确定这是否相关(。

有谁知道如何解决这个问题?

PS 我也尝试使用 msal,但我没有设置路由,而且组件太多,所以我想尽可能避免设置路由。

你正在合并 AAD 的 v1 和 v2 OAuth 终结点。不应在请求scope (v2( 的同时请求resource (v1(。

正确的调用原型是:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize
?client_id=[APPLICATION ID]
&response_type=token
&redirect_uri=[REDIRECT URI]
&scope=[SCOPE]
&response_mode=[MODE]

因此,您的实际代码应如下所示:

"https://login.microsoftonline.com/common/oauth2/v2.0/authorize?"
    + "client_id={CLIENT_ID_HERE}"
    + "&response_type=token"
    + "&redirect_uri=http%3A%2F%2Flocalhost%3A8100%2F"
    + "&scope=offline_access openid contacts.read contacts.read.shared user.read"
    + "&&response_mode=fragment"

最新更新