Azure应用服务身份验证 - 即使身份验证失败,也会提取数据

时间:2017-04-03 14:18:50

标签: authentication xamarin.forms azure-mobile-services azure-app-service-envrmnt mobileserviceclient

我有一个针对Windows UWP的Xamarin Forms应用程序。我已按照本文中的Microsoft文档成功设置了脱机同步和身份验证:https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-windows-store-dotnet-get-started-users

我还成功设置了一个后台(进程外)任务,以便使用Windows Universal Runtime Component运行。

流程如下: 1)用户首次运行应用程序,他们必须登录并验证Active Directory。然后,应用程序缓存其令牌并注册后台任务。

2)后台任务在Timer上启动。在测试期间,我没有刷新令牌,因为我想测试1小时令牌到期和刷新过程。

在我的测试中,我发现了两件我不完全理解的东西,我发现它很奇怪(不符合我的预期)。

1)当我检查用户首次登录时收到的令牌的到期日期时,将来的有效期限设置为30天。我以为它应该在1小时后过期。为什么它显示30天到期日? (这并不是一个太大的问题,因为我确认它确实在一小时后停止允许访问,这只是我观察到的一种奇怪现象。)

2)这是我关心的问题。即使后台任务在1小时后无法进行身份验证,它仍然能够将数据从Azure提取到设备。推送数据同步失败,因为身份验证失败,但拉取数据同步成功。这是令人担忧的,因为我不希望未经授权的尝试能够提取数据。 还有其他人遇到过此吗?这是一个错误吗?我是否以某种方式错误地配置了身份验证?

我的设置:

Azure App Service> Easy Tables(Node.js后端)将所有权限设置为"仅经过身份验证的访问"。

Azure App Service>设置>认证/授权>

  • App Service Authentication设置为On,
  • 请求未经过身份验证时要执行的操作设置为使用Azure Active Directory登录
  • 身份验证提供程序已设置为Azure Active Directory配置。

移动应用代码:

MobileServiceClient client;
IMobileServiceSyncTable<TableToPull> tableToPullDataFrom;
IMobileServiceSyncTable<TableToPush> tableToPushDataTo;
this.client = new MobileServiceClient(Constants.ApplicationURL);
this.client.CurrentUser = new MobileServiceUser(Settings.UserId);
this.client.CurrentUser.MobileServiceAuthenticationToken = Settings.AuthToken;
store.DefineTable<TableToPull>();
store.DefineTable<TableToPush>();

推送异步代码(当验证失败时失败,如预期的那样):

await this.client.SyncContext.PushAsync();

拉异步代码,如果验证失败但是没有(这是我关心的话)应该会失败:

await this.tableToPullDataFrom.PullAsync("tableQuery",this.tableToPullDataFrom.CreateQuery());

我担心即使身份验证失败,后台任务也能从Azure中提取数据。我希望我以某种方式误解这个概念,有人可以向我解释为什么会发生这种情况?或者,如果我需要以不同的方式配置?我需要确保未经授权的登录无法提取数据。

后台任务尝试按顺序推送和拉取数据,我可以看到它由于推送任务期间的无效身份验证而失败,但在拉取任务期间成功。我也可以验证这一点,因为pull任务确实从SQL Azure DB中获取更新的数据(我可以使用Isolated Storage Explorer和SQLite Browser查看它),但它不会将更改的数据发送到SQL Azure DB(在SSMS中查看) )。

1 个答案:

答案 0 :(得分:1)

“身份验证失败时要采取的措施”是错误的。您需要将其设置为“无操作”。这样可以通过代码处理身份验证。

如果您使用的是Easy Table,请将表格上的权限调整为“Authenticated”。如果您使用的是ASP.NET,请将[Authorize]属性添加到您的班级。

我的书中深入介绍了身份验证 - http://aka.ms/zumobook的第2章。