我有一个针对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中查看)。
添加“token”的含义。具体来说,你使用客户端身份验证?你在哪里得到令牌?当您引用每个令牌时,您的意思是哪个令牌(auth provider或ZUMO令牌)?您正在处理两个令牌 - 一个来自身份验证提供程序,另一个来自ZUMO。 –
我通过使用下面的代码获取身份验证令牌: – Stacy
对不起,我习惯于按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