0

我有一个针对Windows UWP的Xamarin Forms应用程序。我已成功设置脱机同步和身份验证通过以下Microsoft文档,如本文:https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-windows-store-dotnet-get-started-usersAzure应用程序服务身份验证 - 即使身份验证失败时也会提取数据

我也成功地设置了使用Windows通用运行时组件运行的后台(进程外)任务。

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

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

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

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

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

我的设置:

Azure的应用服务>易表(Node.js的后端)的 “唯一认证访问” 设置为所有权限。

天青应用服务>设置>认证/授权>

  • 应用服务认证被设定为开,
  • 时动作没有被认证请求被设定为天青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获取更新的数据(我可以使用独立存储资源管理器和SQLite浏览器查看它),但它不会将已更改的数据发送到SQL Azure数据库(在SSMS中查看)。

+0

添加“token”的含义。具体来说,你使用客户端身份验证?你在哪里得到令牌?当您引用每个令牌时,您的意思是哪个令牌(auth provider或ZUMO令牌)?您正在处理两个令牌 - 一个来自身份验证提供程序,另一个来自ZUMO。 –

+0

我通过使用下面的代码获取身份验证令牌: – Stacy

+0

对不起,我习惯于按Enter,而不是SHIFT + Enter。 我使用下面的代码获取令牌: 'MobileServiceUser user = await TodoDataManager.DefaultManager.CurrentClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory,new Dictionary (){{“response_type”,“code id_token”} });” 然后我将令牌保存到设置(我正在使用Xam.Plugin.Settings NuGet): 'Settings.AuthToken = user.MobileServiceAuthenticationToken; 我认为我正在保存的令牌来自auth提供者,但我想我不确定。我不拉动X-ZUMO-AUTH标题。 – Stacy

回答

1

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

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

认证在我的书 - http://aka.ms/zumobook的第2章中有详细介绍。