cordova - 如何从 Cordova Azure 验证应用程序查询 Azure Web API

标签 cordova azure authentication asp.net-web-api adal

我为 ios/android 构建了一个 VS2015 Cordova 应用程序。该应用程序使用与 Microsoft Azure tutorial 后面的 Azure Active Directory 绑定(bind)的 Azure 移动服务。这效果很好。当我尝试进行目录搜索时,Azure 提示我使用我的租户凭据进行身份验证。

后续步骤:

  1. 我创建了一个 Azure Web API,它在 Azure SQL 数据库上执行一些 C.R.U.D。该 API 工作正常,我通过导航到 https://[MyUniqueApi].azurewebsites.net/api/values 从中获取数据(虽然不安全)。
  2. 然后,我在 Azure 中启用了 Web API 的身份验证,如下图所示。 enter image description here 启用后,我现在会收到一个 Microsoft 登录页面,要求我对 Web API 进行身份验证,这很棒,也是我所期望的。

  3. 现在我希望我的 Cordova 应用程序能够无缝(被动)向 Azure Active Directory 进行身份验证(已经发生),并允许我访问我的 Web API 并返回数据。 遵循此 Microsoft Azure tutorial ,在经典 Azure 管理门户中,我将 Cordova Native 客户端应用程序配置为具有对我的 Web API 的权限。 enter image description here 另外,按照教程,我更新了 Web API list ,将 oauth2AllowImplicitFlow 设置为 true 并为 Web API 创建了 key 。 enter image description here

用户使用 ADAL Cordova 库进行身份验证后(工作正常并且我收到返回的 token ),我想对我的 Web API 执行 GET 请求并返回数据。

这就是我遇到麻烦的地方,并且不确定如何构造对 API 的请求,以便它传递 token /凭据以从 API 返回数据,而无需进一步登录。以下是成功向 Azure Active Directory 进行身份验证后得到的结果: enter image description here

我尝试将 ADAL 返回的不记名 token 传递到 jQuery GET 请求的 header ,但这不起作用。 jQuery 完成回调中的 data 变量(来自上面的屏幕截图)返回时包含 HTML。检查 HTML 时,它是 Microsoft Azure 登录页面,这意味着我没有获得被动身份验证流程。

任何帮助将不胜感激!我假设我没有正确构建 jQuery,或者没有正确传递 token 或信用,但找不到如何完成的示例这是用 JavaScript 实现的。我认为我的 Azure 设置很好,但可以添加帮助诊断问题所需的任何进一步信息的示例。

@vibronet 我非常希望您能回答我的问题。谢谢你这样做!我确实遵循了你指出的 Cordova 样本。这是我的出发点的基础。根据您的建议,我更改了 Azure Web API list ,并将隐式流设置回 false(我最初设置为 true)。如何使用/共享相同的 accessToken 查询图形 api 和我的 Web api?在index.js 文件(来自github 示例)中,app.requestData 函数使用来自authResult 的accessToken。此 authResult 来自获取资源“https://graph.windows.net ”的 token 。我现在想使用同一个 accessToken 从我的 Web API(位于“https://mywebapi.azurewebsites.net”)获取数据。但我无法做到这一点并在 xhr 响应中接收 HTML。

我的例子位于 google docs 。这将起作用并从图形 API 获取数据,但不会从 webApiResourceUri 的资源获取数据。如果我分别验证 Web API 和图形 API 并获取单独的 accessToken,它可以工作,但会显示两个登录屏幕。这就是为什么 jsFiddle 在两个不同的函数中有authenticateGraphApi 和authenticateWebApi,因为我不明白如何组合和使用相同的 token 。

预先感谢您的帮助!

最佳答案

Arthur,您不需要隐式流程,也不需要 key 来调用您的 Web API。请参阅 Azure AD cordova 示例 here ,特别是 https://github.com/Azure-Samples/active-directory-cordova-multitarget/blob/master/DirSearchClient/js/index.js

更新以解决问题的第二部分:您永远不会使用相同的访问 token 来访问两个不同的资源。获得第一个访问 token 后,ADAL 还会获得刷新 token - 可用于静默为您的应用声明为必需资源的其他资源获取新的访问 token 。您可以通过调用 AcquireTokenSilent 来避免第二个登录屏幕

关于cordova - 如何从 Cordova Azure 验证应用程序查询 Azure Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35991607/

相关文章:

AJAX POST 请求隐藏基本身份验证凭据

angularjs - 无法在 Google 地点中选择自动完成结果

CSS 位置 :fixed in Web OS apps

jquery - Dreamweaver CS5.5 中的 Phonegap

Azure 数据资源管理器自动摄取失败,但手动工作正常

azure - 如何以编程方式获取 Azure 存储终结点 URL?

python - Python 中的无服务器 Azure 函数返回参数失败

ios - 在iOS中使用Oauth从Fitbit获得授权

cordova - phonegap 上传应用程序时出错 :Your binary is not optimized for iPhone 5

android - 您可以在多大程度上自定义 Fabric's Digits 在 Android 上的流程、外观和感觉?