如何从Cordova Azure Authenticated应用程序查询Azure Web API

问题描述 投票:1回答:1

我为ios / android构建了一个VS2015 Cordova应用程序。该应用程序在此Microsoft Azure tutorial之后使用与Azure Active Directory绑定的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之后,在Classic Azure管理门户中,我将Cordova Native客户端应用程序配置为拥有对我的Web API的权限。 enter image description here在本教程之后,我更新了Web API清单,将oauth2AllowImplicitFlow设置为true,并为Web API创建了一个密钥.enter image description here

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

这是我遇到麻烦而不确定如何构造API请求的地方,因此它传递令牌/凭证以从API返回数据而无需进一步登录。以下是我成功验证Azure Active Directory后所拥有的内容:enter image description here

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

任何帮助将非常感激!我假设我没有正确构建jQuery,或者没有正确地传递令牌或信用,但是找不到如何使用javascript完成此操作的示例。我认为我的Azure设置很好,但可以添加帮助诊断问题所需的任何进一步信息的示例。

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

我在google docs有这个例子。这将工作并从图api获取数据,但不会从webApiResourceUri的资源获取数据。如果我单独验证Web API和图形API并获得单独的accessTokens,它可以工作,但会设置两个登录屏幕。这就是为什么jsFiddle在两个不同的函数中具有authenticateGraphApi和authenticateWebApi的原因,因为我不理解如何组合和使用相同的令牌。

在此先感谢您的帮助!

cordova azure authentication asp.net-web-api adal
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.