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章中有詳細介紹。