モバイル アプリを対象とした Azure App Service での認証および承認

この記事では、App Service のバックエンドでネイティブ モバイル アプリを開発するときの認証と承認のしくみについて説明します。 App Service では統合認証および承認を利用できます。このため、App Service のコードを変更しなくても、お使いのモバイル アプリでユーザーをサインインさせることができます。 これにより、アプリケーションの保護が容易になり、またユーザーごとのデータにも対応できるようになります。

警告

この記事では、Azure Mobile Apps クライアント SDK の v4.2.0 について説明します。 現在のリリースでは、新しい認証メカニズムが使用されており、Azure アプリサービス認証と承認は同じようにはサポートされていません。

App Service での認証と承認のしくみについては、「Azure App Service での認証および承認」を参照してください。

プロバイダー SDK を使用した認証

App Service ですべてを構成したら、App Service にサインインできるようにモバイル クライアントを変更できます。 これには 2 つの方法はあります。

  • 特定の ID プロバイダーが発行する SDK を使用して、ID を確立し、App Service にアクセスできるようにします。
  • 1 行のコードを使用して、Mobile Apps クライアント SDK でユーザーがサインインできるようにします。

ヒント

ほとんどのアプリケーションで、ユーザーのサインイン時に一貫性のあるエクスペリエンスを実現し、トークン更新サポートを使用して、プロバイダーが指定する他の利点を得るために、プロバイダー SDK を使用する必要があります。

プロバイダー SDK を使用すると、ユーザーは、アプリが実行しているオペレーティング システムとより緊密に統合するエクスペリエンスにサインインできます。 この方法により、プロバイダーのトークンとクライアント上のユーザー情報の一部が得られるので、グラフ API の使用やユーザー エクスペリエンスのカスタマイズが容易になります。 この方法は、クライアントのコードでユーザーをサインインさせるため、"クライアント フロー" または "クライアント主導のフロー" と呼ばれます。

プロバイダーのトークンが取得されたら、App Service に送信して検証する必要があります。 Azure App Service によってトークンが検証されます。 その後、サービスによってクライアント用の新しいトークンが作成されます。 Mobile Apps クライアント SDK には、この交換を管理してアプリケーション バックエンドへのすべての要求にトークンを自動的に添付するヘルパー メソッドがあります。 プロバイダー トークンへの参照を保持することもできます。

Note

Windows (WPF) などの一部のプラットフォームは、クライアント主導のフローでのみ動作します。 その他はサーバーとクライアントの両方のフローで同じように適切に動作します。 プラットフォームがクライアント主導のフローでのみ動作する場合は、クイックスタート ガイドにこれが示されます。

認証フローの詳細については、App Service の認証フローに関する記事をご覧ください。

プロバイダー SDK を使用しない認証

プロバイダー SDK を設定しない場合は、Azure App Service で自動的にサインインを処理することができます。 Azure Mobile Apps クライアント SDK では、選択されたプロバイダーの Web ビューを開き、ユーザーをサインインさせます。 この方法は、ユーザーをサインインさせるプロセスをサーバーで管理するため、"サーバー フロー" または "サーバー主導のフロー" と呼ばれます。 クライアント SDK でプロバイダー トークンを受け取ることはありません。

クライアント主導のフローからのトークンの送信

クライアント主導のフローを使用する場合は、まず Azure App Service でトークンを検証するために必要な関連情報を取得します。 ほとんどの場合、そのトークンがアクセス トークンになります。 詳細については、Azure App Service のドキュメントを参照してください

その後、適切な JSON オブジェクトを作成できます。 たとえば、WPF アプリケーションで .NET に対してクライアント主導のフローを実行するために MSAL を使う場合は、次のコードを使用できます。

var requestBody = new JObject(new JProperty("access_token", authResult.AccessToken));
var userInfo = await mobileClient.login("aad", requestBody);

要求本文は、このドキュメントに記載されている予測内容と一致している必要があります。