我正在尝试获取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"