Microsoft图形发布无效令牌

时间:2019-11-21 20:35:28

标签: angular typescript oauth-2.0 azure-active-directory 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参数重定向到我的webapp。我能够从那里提取它。

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

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获取令牌,并且得到类似的响应。 (我禁用了网络安全功能,无法从我的Ionic应用发出发布请求,不确定是否相关)。

有人知道如何解决吗?

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

1 个答案:

答案 0 :(得分:0)

您正在混合AAD的v1和v2 OAuth端点。您不应在请求resource(v2)的同时请求scope(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"