モバイル アプリ用の Azure App Service での認証と承認
手記
この製品は提供終了です。 .NET 8 以降を使用するプロジェクトの代わりに、Community Toolkit Datasync ライブラリを参照してください。
この記事では、App Service バックエンドを使用してネイティブ モバイル アプリを開発するときの認証と承認のしくみについて説明します。 App Service には統合された認証と承認が用意されているため、モバイル アプリは App Service のコードを変更せずにユーザーをサインインさせることができます。 アプリケーションを保護し、ユーザーごとのデータを操作する簡単な方法が提供されます。
警告
この記事では、Azure Mobile Apps クライアント SDK の v4.2.0 について説明します。 現在のリリースでは、新しい認証メカニズムが使用されており、同じように Azure App Service 認証 & 承認はサポートされていません。
App Service での認証と承認のしくみについては、「Azure App Serviceでの認証と承認の
プロバイダー SDK を使用した認証
App Service ですべてが構成されたら、モバイル クライアントを変更して App Service でサインインできます。 ここには 2 つの方法があります。
- 特定の ID プロバイダーが発行する SDK を使用して ID を確立し、App Service にアクセスします。
- Mobile Apps クライアント SDK がユーザーをサインインできるように、1 行のコードを使用します。
先端
ほとんどのアプリケーションでは、プロバイダー SDK を使用して、ユーザーがサインインするときのエクスペリエンスをより一貫性のあるものにし、トークン更新のサポートを使用し、プロバイダーが指定するその他の利点を得る必要があります。
プロバイダー SDK を使用すると、ユーザーは、アプリが実行されているオペレーティング システムとより緊密に統合されたエクスペリエンスにサインインできます。 この方法では、プロバイダー トークンとクライアント上のユーザー情報も提供されるため、グラフ API の使用とユーザー エクスペリエンスのカスタマイズがはるかに簡単になります。 クライアント上のコードがユーザーをサインインさせるので、このメソッドは "クライアント フロー" または "クライアント向けフロー" と呼ばれます。
プロバイダー トークンが取得されたら、検証のために App Service に送信する必要があります。 Azure App Service によってトークンが検証されます。 その後、サービスはクライアントの新しいトークンを作成します。 Mobile Apps クライアント SDK には、この交換を管理し、アプリケーション バックエンドへのすべての要求にトークンを自動的にアタッチするためのヘルパー メソッドがあります。 プロバイダー トークンへの参照を保持することもできます。
手記
Windows (WPF) などの一部のプラットフォームは、クライアント向けフローでのみ動作します。 他のユーザーは、サーバーフローとクライアントフローの両方で同様に機能します。 プラットフォームがクライアント向けフローでのみ動作する場合は、クイック スタート ガイドでこれを示します。
認証フローの詳細については、「App Service 認証フローの
プロバイダー SDK を使用しない認証
プロバイダー SDK を設定しない場合は、Azure App Service でサインインの処理を許可できます。 Azure Mobile Apps クライアント SDK によって、選択したプロバイダーに Web ビューが開き、ユーザーがサインインします。 このメソッドは、サーバーがユーザーをサインインさせるプロセスを管理するため、"サーバー フロー" または "サーバー向けフロー" と呼ばれます。 クライアント SDK はプロバイダー トークンを受け取ることはありません。
クライアント向けフローからのトークンの送信
クライアント向けフローを使用する場合は、まず、Azure App Service がトークンを検証するために必要な関連情報を取得します。 ほとんどの場合、トークンはアクセス トークンになります。 詳細については、Azure App Service のドキュメントを参照してください。
その後、適切な JSON オブジェクトをビルドできます。 たとえば、MSAL を使用して WPF アプリケーションの .NET でクライアント向けのフローを実行する場合は、次のコードを使用できます。
var requestBody = new JObject(new JProperty("access_token", authResult.AccessToken));
var userInfo = await mobileClient.login("aad", requestBody);
要求本文は、ドキュメントのに記載