【发布时间】:2017-09-07 05:19:21
【问题描述】:
我正在尝试使用 OAuth2 访问 Exchange 邮箱,但在使用 OAuth 协议时遇到了问题。我没有使用库,只是直接进行 http 调用(使用 libcurl)。我正在使用此处找到的文档:
我已经成功获取了授权码,现在我正在尝试使用它来获取访问令牌。返回的 json 中的响应是“invalid grant, Transmission data parser failure: Authorization Code is malformed or invalid.”。 HTTP 错误 400。下面是我生成的整个流程:
获取验证码:
用这个 url 启动 IE:
https://login.microsoftonline.com/common/oauth2/authorize?client_id=38f1da80-9f80-4ff6-84a8-27c83d7212d3&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&resource=https%3A%2F%2Foutlook.office.com%2F&response_type=code&scope=openid+Mail.ReadWrite
此时,用户将看到 Microsoft 登录屏幕。他输入他的凭据,然后被要求批准对所请求范围的访问。他这样做。接下来,在重定向 URL 处,我们收到数据:
https://login.microsoftonline.com/common/oauth2/nativeclient?code=AQABAAIAAAA9kTklhVy7SJTGAzR-p1BcUmXu0izUoOslqxHN85yR0vAVKicFVbtjs3IsKScxeBuTmxBsVy8qT3axn5YaDt_O6M4YVcAk--kpJ-dnNbKtnovjHIxGwtdRawo53UU9u19YP5ST5a8Ekffnxh0Z2gbBM_sKbmbhx2E-y_xs1spgV8gF6im39tLWo
获取令牌:
应用程序在“code=”之后提取数据,然后发布到这个url:
https://login.microsoftonline.com/common/oauth2/token
这个数据:
grant_type=authorization_code&client_id=38f1da80-9f80-4ff6-84a8-27c83d7212d3&code=AQABAAIAAAA9kTklhVy7SJTGAzR-p1BcUmXu0izUoOslqxHN85yR0vAVKicFVbtjs3IsKScxeBuTmxBsVy8qT3axn5YaDt_O6M4YVcAk--kpJ-dnNbKtnovjHIxGwtdRawo53UU9u19YP5ST5a8Ekffnxh0Z2gbBM_sKbmbhx2E-y_xs1spgV8gF6im39tLWo&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&resource=https%3A%2F%2Foutlook.office.com%2F
本帖导致http错误400,返回数据为:
{"error":"invalid_grant","error_description":"AADSTS70000: Transmission data parser failure:Authorization Code is malformed or invalid....}
任何人都可以看看我所做的并提出我哪里出错了吗?顺便说一句,我尝试运行 Shawn 建议的 Powershell 脚本 - 该脚本使用我现有的应用程序 ID 并使用 ADAL 获取身份验证代码和令牌。这似乎可行,所以我怀疑问题出在我的代码中,而不是 Azure 中的应用程序配置。
【问题讨论】:
标签: azure exchangewebservices azure-active-directory