0

我有一个针对 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 通用运行时组件运行。

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

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

在我的测试中,我发现了两件我不完全理解并且我觉得很奇怪的事情(没有像我预期的那样表现)。

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

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

我的设置:

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

Azure 应用服务 > 设置 > 身份验证/授权 >

  • 应用服务身份验证设置为开,
  • 请求未通过身份验证时要执行的操作设置为使用 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 中提取数据。我希望我在某种程度上误解了这个概念,有人可以向我解释为什么会发生这种情况?或者如果我需要配置不同的东西?我需要确保未经授权的登录无法提取数据。

后台任务尝试按顺序推送和拉取数据,我可以看到它在推送任务期间由于身份验证无效而失败,但在拉取任务期间成功。我还可以验证这一点,因为拉取任务确实从 SQL Azure DB 获取更新的数据(我可以使用独立存储资源管理器和 SQLite 浏览器查看它),但它不会将更改的数据发送到 SQL Azure DB(在 SSMS 中查看)。

4

1 回答 1

1

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

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

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

于 2017-04-04T16:42:31.250 回答