共用方式為


將驗證新增至 Xamarin.iOS 應用程式

概觀

本主題說明如何從用戶端應用程式驗證 App Service 行動應用程式的使用者。 在本教學課程中,您將使用 App Service 支援的身分識別提供者,將驗證新增至 Xamarin.iOS 快速入門專案。 由行動應用程式成功驗證並授權之後,就會顯示使用者識別碼值,而您也將可以存取受限制的資料庫資料。

您必須先完成 建立 Xamarin.iOS 應用程式教學課程。 如果您不要使用下載的快速入門伺服器專案,必須將驗證擴充套件新增至您的專案。 如需伺服器擴充套件的詳細資訊,請參閱使用 Azure Mobile Apps 的 .NET 後端伺服器 SDK

註冊應用程式進行驗證,並設定應用程式服務

首先,您必須在身分識別提供者網站中註冊您的應用程式,然後在 Mobile Apps 後端中設定提供者產生的認證。

  1. 依照提供者特定的指示設定您偏好的身分識別提供者:

  2. 針對您要在應用程式中支援的每個提供者重複上述步驟。

將您的應用程式新增至允許的外部重新導向 URL

安全的驗證會要求您為應用程式定義新的 URL 配置。 這讓驗證系統能夠在驗證程序完成之後,重新導向回到您的應用程式。 我們會在這整個教學課程中使用 URL 配置 appname。 不過,您可以使用任何您選擇的 URL 結構描述。 它對於您的行動應用程式而言應該是唯一的。 在伺服器端啟用重新導向:

  1. Azure 入口網站 中,選取您的 App Service。

  2. 按一下 [驗證/授權] 功能表選項。

  3. 在 [允許的外部重新導向 URL] 中,輸入 url_scheme_of_your_app://easyauth.callback。 此字串中的 url_scheme_of_your_app 是您行動應用程式的 URL 配置。 它必須遵循通訊協定的標準 URL 規格 (只使用字母和數字,並以字母為開頭)。 請記下您選擇的字串,因為您將需要在數個位置中使用該 URL 配置來調整您的行動應用程式程式碼。

  4. 按一下 [確定]。

  5. 按一下 [儲存]。

限制只有通過驗證的使用者具有權限

根據預設,可以匿名方式叫用 Mobile Apps 後端中的 API。 接下來,您必須限制只有經過驗證的用戶端才有存取權。

  • Node.js 後端 (透過 Azure 入口網站)

    在您的 Mobile Apps 設定中,按一下 [ 簡單資料表] ,然後選取您的資料表。 按一下 [變更權限],選取所有權限的 [僅驗證存取],然後按一下 [儲存]

  • .NET 後端 (C#)

    在伺服器專案中,流覽至控制器>TodoItemController .cs。 將 [Authorize] 屬性加入 TodoItemController 類別,如下所示。 若要限制只有特定方法才能存取,也可以將此屬性套用至這些方法,而不是類別。 發佈伺服器專案。

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js 後端 (透過 Node.js 程式碼)

    如需要求資料表存取驗證,請將下行加入 Node.js 伺服器指令碼:

      table.access = 'authenticated';
    

    如需詳細資訊,請參閱 做法:存取資料表所需的驗證。 若要了解如何從您的網站下載快速入門程式碼專案,請參閱 做法:使用 Git 下載 Node.js 後端快速入門程式碼專案

  • 在 Visual Studio 或 Xamarin Studio 中,在裝置或模擬器上執行用戶端專案。 確認在應用程式啟動後,發生狀態代碼 401 (未經授權) 的未處理例外狀況。 失敗都會記錄到偵錯工具主控台。 因此在 Visual Studio 中,您應該會在 [輸出] 視窗中看到失敗。

    應用程式嘗試以未經驗證的使用者身分存取您的行動應用程式後端,因此發生此未經授權的失敗。 TodoItem 資料表現在需要驗證。

接下來,您將會更新用戶端應用程式,利用已驗證的使用者身分來要求行動應用程式後端的資源。

將驗證新增至應用程式

在本節中您將修改應用程式,以先顯示登入畫面再顯示資料。 應用程式在啟動時將不會連線到您的 App Service,且不會顯示任何資料。 在使用者第一次執行重新整理動作後,登入畫面將會出現;在成功登入後,將會顯示 todo 項目清單。

  1. 在用戶端專案中開啟檔案 QSTodoService.cs,將下列 using 陳述式和具有存取子的 MobileServiceUser新增至 QSTodoService 類別:

    using UIKit;
    
    // Logged in user
    private MobileServiceUser user;
    public MobileServiceUser User { get { return user; } }
    
  2. 使用下列定義,將名為 Authenticate 的新方法新增至 QSTodoService

    public async Task Authenticate(UIViewController view)
    {
        try
        {
            AppDelegate.ResumeWithURL = url => url.Scheme == "{url_scheme_of_your_app}" && client.ResumeWithURL(url);
            user = await client.LoginAsync(view, MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}");
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine (@"ERROR - AUTHENTICATION FAILED {0}", ex.Message);
        }
    }
    

    注意

    如果您使用的身分識別提供者不是 Facebook,請將傳給上述 LoginAsync 的值變更為下列其中一個:MicrosoftAccount、Twitter、Google 或 WindowsAzureActiveDirectory

  3. 開啟 QSTodoListViewController.cs。 修改 ViewDidLoad 的方法定義,移除結尾附近的 RefreshAsync() 呼叫:

    public override async void ViewDidLoad ()
    {
        base.ViewDidLoad ();
    
        todoService = QSTodoService.DefaultService;
        await todoService.InitializeStoreAsync();
    
        RefreshControl.ValueChanged += async (sender, e) => {
            await RefreshAsync();
        }
    
        // Comment out the call to RefreshAsync
        // await RefreshAsync();
    }
    
  4. 修改方法 RefreshAsync,以驗證 User 屬性是否為 null。 在方法定義最上方新增下列程式碼:

    // start of RefreshAsync method
    if (todoService.User == null) {
        await QSTodoService.DefaultService.Authenticate(this);
        if (todoService.User == null) {
            Console.WriteLine("couldn't login!!");
            return;
        }
    }
    // rest of RefreshAsync method
    
  5. 開啟 AppDelegate.cs,新增下列方法:

    public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
    {
        if (client.ResumeWithURL(app, url, options))
            return true;
        return base.OpenUrl(app, url, options);
    }
    
  6. 開啟 Info.plist 檔案,瀏覽至 [進階] 區段中的 [URL 類型]。 立即設定 URL 類型的 [識別碼] 和 [URL 配置],然後按一下 [新增 URL 類型]。 [URL 配置] 應該與您的 {url_scheme_of_your_app} 相同。

  7. 在 Visual Studio 中,連接到 Mac 主機或 Visual Studio for Mac,執行以裝置或模擬器為目標的用戶端專案。 確認應用程式未顯示資料。

    將項目清單往下拉以執行重新整理動作,這會使登入畫面出現。 在您成功輸入有效認證後,應用程式將會顯示 todo 項目清單,且您可以對資料進行更新。