Microsoft 認証ライブラリを使用してユーザーをサインインさせる
Microsoft Entra ID への Web アプリケーションの登録が済みました。 アプリケーションにユーザーをサインインさせるための認証コードを追加できるようになったので、あなたは認証の詳細を自動的に処理できる SDK を使用することにします。 このユニットでは、Java 用の Microsoft 認証ライブラリ (MSAL4J) と、それが認証にどのように役立つかについて学習します。
Java 用 Microsoft Authentication Library
アプリケーションで Java 用 Microsoft 認証ライブラリ (MSAL4J) を使用すると、Microsoft ID (Microsoft Entra ID、Microsoft アカウント、Azure Active Directory B2C アカウント) を持つユーザーまたはアプリをサインインさせ、Microsoft API または Microsoft Entra ID に登録された独自の API を呼び出すためのトークンを取得できます。 それは、業界標準の OAuth2 プロトコルと OpenID Connect プロトコルを使用して構築されています。
このライブラリで提供されている便利な API を使用すると、Microsoft Entra ID でさまざまな種類のアプリケーションについての認証を行うことができます。
- Web アプリケーション
- デーモン サービス
- コマンド ライン アプリケーション
- デスクトップ アプリケーション
MSAL オブジェクトを初期化する
MSAL を使い始めるには、アプリケーション コードで MSAL オブジェクトを初期化して構成する必要があります。
MSAL においてクライアント アプリケーションはパブリック クライアントまたは機密クライアントとして表され、どちらであるかは、承認サーバーで安全に認証を行い、クライアント資格情報の機密性を維持する、アプリケーションの機能によって区別されます。
機密クライアント アプリケーションは、サーバー上で実行されるアプリ (Web アプリ、Web API アプリ、さらにはサービス アプリやデーモン アプリ) です。 機密クライアントは、構成時のアプリケーション シークレットを保持できます。
機密クライアントのインスタンスは、次のようにして作成できます。
IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);
ConfidentialClientApplication app = ConfidentialClientApplication
.builder(CLIENT_ID, credential)
.authority(AUTHORITY)
.build();
- CLIENT_ID:クライアント ID は、アプリの登録時に Microsoft Entra ID によってアプリに割り当てられた一意のアプリケーション (クライアント) ID です。
- CLIENT_SECRET: アプリの登録時に作成される機密クライアント アプリ用のクライアント シークレット。
- AUTHORITY: 機関は、MSAL がトークンを要求できるディレクトリを示す URL です。 アプリの ID プロバイダー インスタンスとサインイン対象ユーザーで構成されます。
MSAL で認証トークンを取得する
MSAL には、認証フローを開始し、認証トークンが含まれる AuthenticationResult
を取得するための acquireToken
メソッドが用意されています。
ユーザーがサインインを完了すると、基本認証クレーム (ユーザー のプリンシパル名、メール アドレスなど) が含まれる認証結果で ID トークンが返されます。
MSAL を使用してトークンを取得する例を次に示します。
final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
.builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES))
.build();
final IAuthenticationResult result = app.acquireToken(authParams).get();
- REDIRECT_URI: リダイレクト URI は、ID プロバイダーがセキュリティ トークンを送り返す先の URI です。 Microsoft Entra でのアプリ登録のリダイレクト URI と一致している必要があります。
- SCOPES: スコープは、アプリケーションが要求したアクセス許可です。 通常、ユーザー サインイン用の ID トークン応答を受け取るには 3 つのスコープ
openid profile offline_access
で十分であり、これらは MSAL によって既定で設定されます。
ユーザーのサインイン フローを開始し、API を呼び出してデータにアクセスするときは、アプリケーションで acquireToken
メソッドを使用します。