Azure Active Directory B2C を使ってサンプル Node.js Web API で認証を構成する
[アーティクル]
この記事では、サンプル Node.js Web アプリケーションを構成してサンプル Node.js Web API を呼び出す方法について説明します。 Web API は、Azure AD B2C 自体で保護する必要があります。 この設定では、App ID: 1 などの Web アプリが、App ID: 2 などの Web API を呼び出します。 ユーザーは、アクセス トークンを取得するために Web アプリに対して認証を行います。アクセス トークンは保護された Web API の呼び出しに使用されます。
概要
トークンベースの認証によって、Web API への要求に、有効なアクセス トークンが確実に含まれるようにします。
Web アプリは、次のイベントを完了します。
Azure AD B2C を使用してユーザーを認証します。
Web API エンドポイントで必要とされるアクセス許可 (スコープ) を持つアクセス トークンを取得します。
HTTP 要求に応答します。 トークンが有効でない場合、Web API エンドポイントは 401 Unauthorized HTTP エラーで応答します。
アプリ登録の概要
アプリで Azure AD B2C を使用してサインインし、Web API を呼び出せるようにするには、Azure AD B2C ディレクトリに 2 つのアプリケーションを登録する必要があります。
Web アプリケーションの登録により、アプリでは Azure AD B2C を使用してサインインできるようになります。 登録時に、"リダイレクト URI" を指定します。 リダイレクト URI は、ユーザーが認証を行った後、Azure AD B2C によってリダイレクトされるエンドポイントです。 アプリの登録プロセスによって、アプリを一意に識別する "アプリケーション ID" ("クライアント ID" とも呼ばれます) が生成されます。 また、アプリの "クライアント シークレット" も生成します。 アプリでは、クライアント シークレットを使用して、アクセス トークンの承認コードを交換します。
Web API の登録により、アプリではセキュリティで保護された Web API を呼び出すことができます。 登録には、Web API の "スコープ" が含まれます。 スコープを使用することで、Web API などの保護されたリソースへのアクセス許可を管理できます。 Web アプリケーションのアクセス許可を Web API のスコープに付与します。 アクセス トークンが要求されたら、アプリで必要なアクセス許可を要求の scope パラメーターに指定します。
複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
Azure AD B2C を検索して選択します。
[アプリの登録] を選択し、 [新規登録] を選択します。
アプリケーションの [名前] を入力します (たとえば App ID: 1)。
[サポートされているアカウントの種類] で、 [Accounts in any identity provider or organizational directory (for authenticating users with user flows)]((ユーザー フローを使用してユーザーを認証するための) 任意の ID プロバイダーまたは組織のディレクトリのアカウント) を選択します。
SERVER_PORT=3000
#web apps client ID
APP_CLIENT_ID=<You app client ID here>
#session secret
SESSION_SECRET=sessionSecretHere
#web app client secret
APP_CLIENT_SECRET=<Your app client secret here>
#tenant name
TENANT_NAME=<your-tenant-name>
#B2C sign up and sign in user flow/policy name and authority
SIGN_UP_SIGN_IN_POLICY_AUTHORITY=https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<sign-in-sign-up-user-flow-name>
AUTHORITY_DOMAIN=https://<your-tenant-name>.b2clogin.com
#client redorect url
APP_REDIRECT_URI=http://localhost:3000/redirect
LOGOUT_ENDPOINT=https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<sign-in-sign-up-user-flow-name>/oauth2/v2.0/logout?post_logout_redirect_uri=http://localhost:3000
手順 4: Web API のサンプル コードを取得する
Web API を登録し、そのスコープを定義したので、Azure AD B2C テナントで動作するように Web API コードを構成します。
コンソール ウィンドウを開き、Node.js Web API サンプルが含まれるディレクトリに移動します。 次に例を示します。
cd active-directory-b2c-javascript-nodejs-webapi
次のコマンドを実行します。
npm install && npm update
手順 5: Web アプリおよび API を実行する
これで、Web アプリケーションの Web API へのスコープ付きアクセスをテストする準備ができました。 ローカル マシンで Node.js Web API とサンプル Web アプリケーションの両方を実行します。
ターミナルで、サンプル Web API に移動し、Node.js Web API サーバーを実行します。 たとえば、次のようにします。
cd active-directory-b2c-javascript-nodejs-webapi
node index.js
コンソール ウィンドウには、アプリケーションがホストされている場所のポート番号が表示されます。
Listening on port 5000...
別のターミナル インスタンスで、サンプル Web アプリに移動し、Node.js Web アプリ サーバーを実行します。 次に例を示します。
cd active-directory-b2c-msal-node-sign-in-sign-out-webapp/call-protected-api
node index.js
コンソール ウィンドウには、アプリケーションがホストされている場所のポート番号が表示されます。
Msal Node Auth Code Sample app listening on port !3000
ブラウザーで http://localhost:3000 に移動します。 2 つのボタン、[Sign in to call PROTECTED API] (サインインして保護済み API を呼び出す) と [Or call the ANONYMOUS API] (または匿名 API を呼び出す) が表示されたページが表示されます。
匿名 API を呼び出すには、[Or call the ANONYMOUS API] (または匿名 API を呼び出す) を選択します。 API は、次のような date キーを使用して JSON オブジェクトで応答します。
{"date":"2022-01-27T14:21:22.681Z"}
匿名 API は、Web API の保護されていないエンドポイントです。 アクセスするためにアクセス トークンは必要ありません。
保護された API エンドポイントを呼び出すには、[Sign in to call PROTECTED API] (サインインして保護済み API を呼び出す) ボタンを選択します。 サインインするように求められます。
サインイン資格情報 (メールアドレス、パスワードなど) を入力します。 アカウントをお持ちでない場合は、 [今すぐサインアップ] を選択してアカウントを作成します。 正常にサインインまたはサインアップすると、[Call the PROTECTED API] (保護済み API を呼び出す) ボタンが表示された次のページが表示されます。
保護された API を呼び出す場合は、[Call the PROTECTED API] (保護済み API を呼び出す) ボタンを選択します。 API は、name キーの値が次のようなアカウントの姓の値である JSON オブジェクトで応答します。