【发布时间】:2016-06-29 17:33:24
【问题描述】:
我为 ios/android 构建了一个 VS2015 Cordova 应用程序。该应用程序使用与此 Microsoft Azure tutorial 之后的 Azure Active Directory 绑定的 Azure 移动服务。这很好用。当我尝试进行目录搜索时,Azure 会提示我使用我的租户凭据进行身份验证。
后续步骤:
- 我创建了一个 Azure Web API,它在 Azure SQL 数据库上执行一些 C.R.U.D。 API 工作正常,我通过导航到 https://[MyUniqueApi].azurewebsites.net/api/values 从中获取数据(虽然不安全)。
然后,我使用下面的屏幕截图在 Azure 中启用了 Web API 的身份验证。 启用后,我现在会收到一个 Microsoft 登录页面,要求我对 Web API 进行身份验证,这很好,也是我期望的结果。
现在我希望我的 Cordova 应用程序能够无缝(被动)对 Azure Active Directory 进行身份验证(已经实现),并允许我访问我的 Web API 并返回数据。 关注此@987654323 @,在经典 Azure 管理门户中,我将 Cordova Native 客户端应用程序配置为对我的 Web API 具有权限。 同样按照教程,我更新了 Web API 清单,将 oauth2AllowImplicitFlow 设置为 true 并为 Web API 创建了一个密钥。
一旦用户使用 ADAL Cordova 库进行了身份验证(工作正常,我收到了返回的令牌),我想对我的 Web API 执行 GET 请求并返回数据。
这是我遇到问题的地方,并且不确定如何构造对 API 的请求,因此它传递令牌/凭据以从 API 返回数据,而无需进一步登录。这是我成功通过 Azure Active Directory 身份验证后的内容:
我尝试将 ADAL 返回的不记名令牌传递给 jQuery GET 请求的标头,但这不起作用。 jQuery done 回调(来自上面的屏幕截图)中的 data 变量在返回时包含 HTML。检查 HTML 时,它是 Microsoft Azure 登录页面,这意味着我没有获得被动身份验证流程。
任何帮助将不胜感激!我假设我没有正确构建 jQuery,或者没有正确传递令牌或凭据,但找不到如何完成的示例这个用javascript。我认为我的 Azure 设置很好,但可以添加帮助诊断问题所需的任何进一步信息的示例。
@vibronet 我非常希望你能回答我的问题。谢谢你这样做!我确实遵循了您指出的科尔多瓦样本。这是我出发点的基础。根据您的建议,我更改了我的 Azure Web API 清单并将隐式流设置回我最初设置为 true 的 false。如何使用/共享相同的 accessToken 查询图形 api 和我的 web api?在 index.js 文件(来自 github 示例)中,app.requestData 函数使用来自 authResult 的 accessToken。此 authResult 来自获取资源“https://graph.windows.net”的令牌。我现在想使用相同的 accessToken 从位于“https://mywebapi.azurewebsites.net”的 Web API 获取数据。我无法做到这一点并在 xhr 响应中接收 HTML。
我在google docs 中有这个例子。这将起作用并从图形 api 获取数据,但不会从 webApiResourceUri 的资源中获取数据。如果我单独验证 Web API 和图形 API 并获得单独的 accessTokens,它可以工作,但会显示两个登录屏幕。这就是为什么jsFiddle在两个不同的函数中有authenticateGraphApi和authenticateWebApi的原因,因为我不明白如何组合和使用同一个令牌。
提前感谢您的帮助!
【问题讨论】:
标签: cordova azure authentication asp.net-web-api adal