我有一个针对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>设置>认证/授权>
移动应用代码:
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中查看) )。
答案 0 :(得分:1)
“身份验证失败时要采取的措施”是错误的。您需要将其设置为“无操作”。这样可以通过代码处理身份验证。
如果您使用的是Easy Table,请将表格上的权限调整为“Authenticated”。如果您使用的是ASP.NET,请将[Authorize]
属性添加到您的班级。
我的书中深入介绍了身份验证 - http://aka.ms/zumobook的第2章。