我一直试图解决这个问题超过一个星期,但没有任何进展。我在使用Cordova Azure Mobile App插件和.NET / C#后端进行身份验证时遇到问题。
我正在关注创建适用于Android / iOS的Cordova应用tutorial。我添加了Azure Active Directory作为我的身份验证提供程序,基于此tutorial。我从Azure Portal for Cordova和.NET / C#后端下载了快速启动项目。
我部署了Azure移动应用后端,并通过在allowedExternalRedirectUrls中添加URL来更新资源浏览器以允许https://localhost:4000和https:// {myazurewebsite} .azurewebsites.net。我还更新了CORS以允许那些相同的URL。我将我的单点登录回复网址添加为https:// {myazurewebsite} .azurewebsites.net / .auth / login / aad / callback。我确保我的Cordova应用程序安装了InAppBrowser和Azure Mobile Apps插件。我更新了Content-Security-Policy以指向https://login.windows.net和https:// {myazurewebsite} .azurewebsites.net。我将onDeviceReady()函数更新为:
function onDeviceReady() {
// Create a connection reference to our Azure Mobile Apps backend
client = new WindowsAzure.MobileServiceClient('https://{myazurewebsite}.azurewebsites.net');
// Login to the service
client.login('aad')
.then(function () {
// BEGINNING OF ORIGINAL CODE
// Create a table reference
todoItemTable = client.getTable('todoitem');
// Refresh the todoItems
refreshDisplay();
// Wire up the UI Event Handler for the Add Item
$('#add-item').submit(addItemHandler);
$('#refresh').on('click', refreshDisplay);
// END OF ORIGINAL CODE
}, handleError);
}
当我连接到 工作局域网时,我在Ripple 中执行Cordova应用程序时,应用程序会加载到Ripple,然后会打开第二个窗口,询问我的AAD凭据。我输入我的用户名,选项卡关闭,重定向开始发生,我已成功通过身份验证,并能够与教程中的ToDoItems进行交互。
当我连接到 公共网络时,在Ripple 中执行Cordova应用程序时,应用程序会加载到Ripple,然后会打开第二个窗口,询问我的AAD凭据。我输入了我的用户名,标签关闭,重定向开始发生,我会看到如下图所示的其他提示:
当我执行Cordova应用程序并将其连接到公共网络时将其发送到Android或iOS设备时,我会收到要求的Cordova WebView(InAppBrowser)我的凭据。我输入用户名,按密码文本框,重定向开始。然后它只是进入一个空白的白页并挂在那里。
我错过了什么吗?当连接到公共网络时,为什么我在Ripple中得到第二个提示?为什么Cordova WebView在尝试仅验证用户名后显示空白屏幕?
由 Express 设置Active Directory管理模式创建的Azure Active Directory WebApp
委托权限集是默认权限:登录并阅读用户个人资料
答案 0 :(得分:1)
看起来公共网络是在代理上设置的。然后,您正在代理代理,并且后端没有看到它期望的URL - 相反,它正在查看代理的URL。
我怀疑这是在“正常”移动情况下可以正常工作的事情之一。当你在公共网络上时,在真实设备上运行应用程序。
答案 1 :(得分:0)
问题是我的公司正在通过Azure向我们的本地ADFS服务器发送Azure AD身份验证请求。我们公司的基础设施小组需要在中间添加一个WAP(Web应用程序代理)服务器来拦截通信并允许此流程工作。
一旦他们添加了WAP服务器,就不再是问题了。