次の方法で共有


iOS アプリに認証を追加する

このチュートリアルでは、サポートされている ID プロバイダーを使用して 、iOS クイック スタート プロジェクトに認証を追加します。 このチュートリアルは、最初に完了する必要がある iOS クイック スタート チュートリアルに基づいています。

認証用にアプリを登録し、App Service を構成する

まず、ID プロバイダーのサイトでアプリを登録する必要があります。次に、Mobile Apps バックエンドでプロバイダーによって生成された資格情報を設定します。

  1. プロバイダー固有の手順に従って、優先 ID プロバイダーを構成します。

  2. アプリでサポートするプロバイダーごとに、前の手順を繰り返します。

許可された外部リダイレクト URL にアプリを追加する

セキュリティで保護された認証では、アプリの新しい URL スキームを定義する必要があります。 これにより、認証プロセスが完了すると、認証システムはアプリにリダイレクトし直すことができます。 このチュートリアルでは、URL スキーム の appname を使用します。 ただし、選択した任意の URL スキームを使用できます。 モバイル アプリケーションに固有である必要があります。 サーバー側でリダイレクトを有効にするには:

  1. Azure portal で、App Service を選択します。

  2. [ 認証/承認 ] メニュー オプションをクリックします。

  3. [認証プロバイダー] セクションの [Azure Active Directory] をクリックします。

  4. 管理モード[詳細設定] に設定します。

  5. [許可された外部リダイレクト URL] に、「appname://easyauth.callback」と入力します。 この文字列の appname は、モバイル アプリケーションの URL スキームです。 プロトコルの通常の URL 仕様に従う必要があります (文字と数字のみを使用し、文字で始めます)。 複数の場所で URL スキームを使用してモバイル アプリケーション コードを調整する必要がある場合は、選択した文字列を書き留める必要があります。

  6. [ OK] をクリックします

  7. [ 保存] をクリックします

認証されたユーザーにアクセス許可を制限する

既定では、Mobile Apps バックエンドの API は匿名で呼び出すことができます。 次に、認証されたクライアントのみにアクセスを制限する必要があります。

  • バックエンドNode.js (Azure portal 経由) :

    Mobile Apps の設定で、[簡単なテーブル] クリックし、テーブルを選択します。 [ アクセス許可の変更] をクリックし、すべての アクセス許可に対してのみ [認証済みアクセス ] を選択し、[ 保存] をクリックします。

  • .NET バックエンド (C#):

    サーバー プロジェクトで、Controllers>TodoItemController.cs に移動します。 次のように、 [Authorize] 属性を TodoItemController クラスに追加します。 特定のメソッドにのみアクセスを制限するには、クラスではなく、これらのメソッドにのみこの属性を適用することもできます。 サーバープロジェクトを再公開します。

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • バックエンドNode.js (Node.js コード経由)

    テーブル アクセスの認証を要求するには、Node.js サーバー スクリプトに次の行を追加します。

      table.access = 'authenticated';
    

    詳細については、「 方法: テーブルへのアクセスに認証を要求する」を参照してください。 サイトからクイック スタート コード プロジェクトをダウンロードする方法については、「 方法: Git を使用して Node.js バックエンド クイックスタート コード プロジェクトをダウンロードする」を参照してください。

Xcode で、[ 実行 ] を押してアプリを起動します。 アプリが認証されていないユーザーとしてバックエンドへのアクセスを試みるが、 TodoItem テーブルに認証が必要になったため、例外が発生します。

アプリに認証を追加する

Objective-C:

  1. Mac で Xcode で QSTodoListViewController.m を開き、次のメソッドを追加します。

    - (void)loginAndGetData
    {
        QSAppDelegate *appDelegate = (QSAppDelegate *)[UIApplication sharedApplication].delegate;
        appDelegate.qsTodoService = self.todoService;
    
        [self.todoService.client loginWithProvider:@"google" urlScheme:@"appname" controller:self animated:YES completion:^(MSUser * _Nullable user, NSError * _Nullable error) {
            if (error) {
                NSLog(@"Login failed with error: %@, %@", error, [error userInfo]);
            }
            else {
                self.todoService.client.currentUser = user;
                NSLog(@"User logged in: %@", user.userId);
    
                [self refresh];
            }
        }];
    }
    

    GOOGLE を ID プロバイダーとして使用していない場合は、google を microsoftaccounttwitterfacebook、または windowsazureactivedirectory に変更します。 Facebook を使用する場合は、アプリで Facebook ドメインの許可リストを作成する 必要があります。

    urlScheme をアプリケーションの一意の名前に置き換えます。 urlScheme は、Azure portal の [許可された外部リダイレクト URL] フィールドで指定した URL スキーム プロトコルと同じである必要があります。 urlScheme は、認証要求が完了した後にアプリケーションに切り替えるために、認証コールバックによって使用されます。

  2. QSTodoListViewController.mviewDidLoad[self refresh]を次のコードに置き換えます。

    [self loginAndGetData];
    
  3. QSAppDelegate.h ファイルを開き、次のコードを追加します。

    #import "QSTodoService.h"
    
    @property (strong, nonatomic) QSTodoService *qsTodoService;
    
  4. QSAppDelegate.m ファイルを開き、次のコードを追加します。

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
    {
        if ([[url.scheme lowercaseString] isEqualToString:@"appname"]) {
            // Resume login flow
            return [self.qsTodoService.client resumeWithURL:url];
        }
        else {
            return NO;
        }
    }
    

    #pragma mark - Core Data stackの直前にこのコードを追加します。 appname を、手順 1 で使用した urlScheme 値に置き換えます。

  5. AppName-Info.plist ファイルを開き (AppName をアプリの名前に置き換えて)、次のコードを追加します。

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.microsoft.azure.zumo</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>appname</string>
            </array>
        </dict>
    </array>
    

    このコードは、 <dict> 要素内に配置する必要があります。 (CFBundleURLSchemes の配列内の) appname 文字列を、手順 1 で選択したアプリ名に置き換えます。 plist エディターでこれらの変更を行うこともできます。XCode で AppName-Info.plist ファイルをクリックして、plist エディターを開きます。

    CFBundleURLNamecom.microsoft.azure.zumo文字列を Apple バンドル識別子に置き換えます。

  6. [実行] を押してアプリを起動し、ログインします。 ログインすると、Todo リストを表示して更新を行えるはずです。

Swift:

  1. Mac で Xcode で ToDoTableViewController.swift を開き、次のメソッドを追加します。

    func loginAndGetData() {
    
        guard let client = self.table?.client, client.currentUser == nil else {
            return
        }
    
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.todoTableViewController = self
    
        let loginBlock: MSClientLoginBlock = {(user, error) -> Void in
            if (error != nil) {
                print("Error: \(error?.localizedDescription)")
            }
            else {
                client.currentUser = user
                print("User logged in: \(user?.userId)")
            }
        }
    
        client.login(withProvider:"google", urlScheme: "appname", controller: self, animated: true, completion: loginBlock)
    
    }
    

    GOOGLE を ID プロバイダーとして使用していない場合は、google を microsoftaccounttwitterfacebook、または windowsazureactivedirectory に変更します。 Facebook を使用する場合は、アプリで Facebook ドメインをホワイトリストに登録する 必要があります。

    urlScheme をアプリケーションの一意の名前に置き換えます。 urlScheme は、Azure portal の [許可された外部リダイレクト URL] フィールドで指定した URL スキーム プロトコルと同じである必要があります。 urlScheme は、認証要求が完了した後にアプリケーションに切り替えるために、認証コールバックによって使用されます。

  2. ToDoTableViewController.swiftviewDidLoad()の末尾にある行self.refreshControl?.beginRefreshing()self.onRefresh(self.refreshControl)を削除します。 代わりに loginAndGetData() への呼び出しを追加します。

    loginAndGetData()
    
  3. AppDelegate.swift ファイルを開き、次の行を AppDelegate クラスに追加します。

    var todoTableViewController: ToDoTableViewController?
    
    func application(_ application: UIApplication, openURL url: NSURL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        if url.scheme?.lowercased() == "appname" {
            return (todoTableViewController!.table?.client.resume(with: url as URL))!
        }
        else {
            return false
        }
    }
    

    appname を、手順 1 で使用した urlScheme 値に置き換えます。

  4. AppName-Info.plist ファイルを開き (AppName をアプリの名前に置き換えて)、次のコードを追加します。

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.microsoft.azure.zumo</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>appname</string>
            </array>
        </dict>
    </array>
    

    このコードは、 <dict> 要素内に配置する必要があります。 (CFBundleURLSchemes の配列内の) appname 文字列を、手順 1 で選択したアプリ名に置き換えます。 plist エディターでこれらの変更を行うこともできます。XCode で AppName-Info.plist ファイルをクリックして、plist エディターを開きます。

    CFBundleURLNamecom.microsoft.azure.zumo文字列を Apple バンドル識別子に置き換えます。

  5. [実行] を押してアプリを起動し、ログインします。 ログインすると、Todo リストを表示して更新を行えるはずです。

App Service 認証では、Apples Inter-App Communication が使用されます。 このテーマの詳細については、Apple のドキュメントを参照してください。