0

我閱讀了這兩篇文章1. here和2. here,以瞭解在服務器上的API使用基於聲明的自定義授權時,如何對Azure移動應用程序執行身份驗證的最佳方式以及Xamarin客戶端調用它是使用MobileServiceClient框架。我無法確定這些鏈接中的哪兩個例子是更好的方法。使用Xamarin的Azure移動應用程序身份驗證

在第一個鏈接中,似乎沒有像第二個鏈接那樣依賴特定於平臺的代碼,這意味着我不需要在Driod或IOS或Windows項目中編寫任何代碼,並且可以(我是否在這裏?) 另外,第一個鏈接似乎不需要像第二個鏈接那樣的提供者,因爲我正在調用對Url的直接服務調用。另一方面,第二個環節似乎只支持Facebook, Twitter, MicrosoftAccount, Google and WindowsAzureActiveDirectory。強制MobileServiceAuthenticationProvider參數似乎沒有針對基於用戶表的SQL Server提供自定義驗證。我不確定這部分,並且找不到其他文檔。

如果LoginAsync不提供自定義驗證,那麼它明確表示我需要遵循InvokeApiAsync路線。如果它提供了它,那麼問題是:我應該像第二個鏈接那樣在每個目標項目中編寫特定於平臺的(Droid/IOS/windows)代碼,還是應該處理類庫中的所有服務調用示例顯示在第一個鏈接?換句話說,我應該去LoginAsyncInvokeApiAsync?哪兩個是推薦的方式?

回答

2

第一篇文章展示了自定義驗證,如您所示。第二篇文章展示了具有已知列表的App Service身份驗證。如果你需要做一個自定義的用戶名/密碼,然後去與前者。如果您需要使用社交授權或企業授權,請與後者聯繫。

我的一般建議是不要求用戶創建另一個用戶名,除非必須 - 這意味着消費者應用的社會認證和企業應用的AAD的企業認證。

我的其他建議是始終使用客戶端SDK做認證部分。這使您可以按照安全,刷新令牌和其他身份驗證要求的提供者(Facebook,Twitter等)的最新做法。一旦擁有提供者令牌,通過將LoginAsync()與令牌一起使用,可以輕鬆將其交換爲Azure移動令牌。有關這方面的信息,請參見Azure Documentation

在所有情況下,您將需要特定於平臺的代碼 - 這意味着使用DependencyService(如第二個示例中)執行您的登錄代碼。我通常創建一個將MobileServiceClient包裝在PCL中的單例類。然後創建一個ILoginProvider接口,該接口中有LoginAsync/LogoutAsync代碼來處理平臺依賴代碼。然後,我的單例類調用DependencyService來獲取代碼。您可以在我的GitHub Repository中找到涵蓋iOS,Android和UWP的示例。

+0

你能推薦覆蓋兩種登錄類型的任何模式嗎?我目前正在嘗試將所有身份驗證抽象到單獨的類庫,但遇到麻煩,因爲我需要在基本的可移植庫類中定義一個'Auth'接口,該接口從每個目標項目中抽取該接口的設備特定實現.Droid/.IOS /等)現在我的自定義身份驗證單獨存放在該類庫中,而其他Azure提供程序相關的登錄代碼則分佈在解決方案的其餘部分。 – user20358

+0

我不得不放棄用於驗證的類庫,並將該代碼放入基本的可移植項目本身。我不確定這是否是好設計。 – user20358

+0

我將我的ILoginProvider接口(它是平臺特定的代碼實現的基接口)放在基類中 - 不需要單獨的PCL。幾乎所有我寫的代碼都在PCL中。 –

相關問題