トレーニング
認定資格
Microsoft Certified: Identity and Access Administrator Associate - Certifications
ID ソリューションの現代化、ハイブリッド ソリューションの実装、ID ガバナンスの実装を行う Microsoft Entra ID の機能を実証します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
Microsoft ID プラットフォームでは、OAuth 2.0 リソース所有者パスワード資格情報 (ROPC) の付与がサポートされています。これにより、アプリケーションは自分のパスワードを直接処理してユーザーにサインインできます。 この記事では、アプリケーション内のプロトコルに対して直接プログラムする方法について説明します。 可能な場合は、代わりにサポートされている Microsoft 認証ライブラリ (MSAL) を使用してトークンを取得し、セキュリティで保護された Web API 呼び出することをお勧めします。 また、MSAL を使用するサンプル アプリも参照してください。
警告
Microsoft は、ROPC フローを使用 "しない" ことをお勧めします。多要素認証 (MFA) と互換性がありません。 ほとんどのシナリオでは、より安全な代替手段が利用でき、推奨されます。 このフローでは、アプリケーションに非常に高い信頼が必要であり、他のフローに存在しないリスクが伴います。 このフローは、より安全なフローが実行できない場合にのみ使用してください。
重要
https://login.microsoftonline.com/{TenantId_or_Name}
) または organizations
エンドポイントを使用する必要があります。MFA の普及に合わせて、一部の Microsoft Web API は、MFA 要件に合格した場合にのみアクセス トークンを受け入れます。 ROPC に依存するアプリケーションとテスト リグはロックアウトされます。Microsoft Entra はトークンを発行しないか、リソースが要求を拒否します。
ROPC を使用して保護されたダウンストリーム API を呼び出すトークンを取得する場合は、セキュリティで保護されたトークン取得戦略に移行します。
エンド ユーザーがリソースにアクセスする必要がある場合、そのユーザーに代わって動作するクライアント アプリケーションは、対話型認証の形式を使用する必要があります。 エンド ユーザーは、ブラウザーでプロンプトが表示された場合にのみ MFA にチャレンジできます。
ユーザー コンテキストが関係しないシナリオの例を次に示しますが、これらに限定されません。
アプリケーション開発者は、サービス プリンシパル認証を使用する必要があります。これは、デーモンのサンプルに示されています。 MFA はサービス プリンシパルには適用されません。
サービス プリンシパルとして認証するには、複数の方法があります。
警告
ユーザー コンテキストが使用可能な場合は、サービス プリンシパル認証を使用しないでください。 アプリ専用アクセスは本質的に高い特権であり、多くの場合、テナント全体のアクセス権が付与され、悪いアクターが任意のユーザーの顧客データにアクセスできる可能性があります。
次の図は、ROPC フローを示しています。
を示す図
ROPC フローは 1 つの要求です。クライアント ID とユーザーの資格情報を ID プロバイダーに送信し、その代わりにトークンを受け取ります。 クライアントは、その前にユーザーの電子メール アドレス (UPN) とパスワードを要求する必要があります。 要求が成功した直後に、クライアントはユーザーの資格情報をメモリから安全に破棄する必要があります。 保存は決してしないでください。
// Line breaks and spaces are for legibility only. This is a public client, so no secret is required.
POST {tenant}/oauth2/v2.0/token
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=user.read%20openid%20profile%20offline_access
&username=MyUsername@myTenant.com
&password=SuperS3cret
&grant_type=password
パラメーター | 条件 | 説明 |
---|---|---|
tenant |
必須 | ユーザーをログインさせるディレクトリ テナント。 テナントは GUID またはフレンドリ名の形式で指定できます。 ただし、そのパラメーターを common または consumers に設定することはできませんが、organizations に設定できます。 |
client_id |
必須 | Microsoft Entra 管理センターのアプリ登録 ページで、あなたのアプリに割り当てられたアプリケーション (クライアント) ID。 |
grant_type |
必須 | password に設定する必要があります。 |
username |
必須 | ユーザーのメール アドレス。 |
password |
必須 | ユーザーのパスワード。 |
scope |
推奨 | アプリが必要とするスコープ、つまりアクセス許可をスペースで区切った一覧。 対話型フローでは、管理者またはユーザーは事前にこれらのスコープに同意する必要があります。 |
client_secret |
必要な場合がある | アプリがパブリック クライアントの場合、client_secret または client_assertion を含めることはできません。 アプリが機密クライアントの場合は、アプリを含む必要があります。 |
client_assertion |
必要な場合がある | 証明書を使用して生成された別の形式の client_secret 。 詳細については、「証明書資格情報 」を参照してください。 |
次の例は、成功したトークン応答を示しています。
{
"token_type": "Bearer",
"scope": "User.Read profile openid email",
"expires_in": 3599,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD..."
}
パラメーター | 形式 | 説明 |
---|---|---|
token_type |
糸 | 常に Bearer に設定します。 |
scope |
スペース区切り文字列 | アクセス トークンが返された場合、このパラメーターはアクセス トークンが有効なスコープを一覧表示します。 |
expires_in |
INT | 含まれているアクセス トークンが有効な秒数。 |
access_token |
不透明な文字列 | 要求されたスコープに対して発行されます。 |
id_token |
JWT | 元の scope パラメーターに openid スコープが含まれている場合に発行されます。 |
refresh_token |
不透明な文字列 | scope に元のパラメーター offline_access が含まれている場合、発行されます。 |
更新トークンを使用すると、OAuth コード フローのドキュメントで説明されているのと同じフローを使用して、新しいアクセス トークンと更新トークンを取得できます。
警告
この例のトークンをコードに含め、所有していない API のトークンの検証や読み取りを試みないでください。 Microsoft サービスのトークンでは、JWT として検証されない特殊な形式を使用できます。また、コンシューマー (Microsoft アカウント) ユーザー向けに暗号化することもできます。 トークンの読み取りは便利なデバッグおよび学習ツールですが、コード内でこれに依存したり、制御する API 用ではないトークンに関する詳細を想定したりしないでください。
ユーザーが正しいユーザー名またはパスワードを指定していない場合、またはクライアントが要求された同意を受け取っていない場合、認証は失敗します。
エラー | 説明 | クライアント アクション |
---|---|---|
invalid_grant |
認証に失敗しました | 資格情報が正しくないか、クライアントが要求されたスコープに対する同意を持っていません。 スコープが付与されていない場合は、consent_required エラーが返されます。 このエラーを解決するには、クライアントは Web ビューまたはブラウザーを使用してユーザーを対話型プロンプトに送信する必要があります。 |
invalid_request |
要求が不適切に構築されました | 許可の種類は、/common または /consumers 認証コンテキストではサポートされていません。 代わりに、/organizations またはテナント ID を使用してください。 |
ROPC フローの実装例については、GitHub の .NET コンソール アプリケーション コード サンプルを参照してください。
トレーニング
認定資格
Microsoft Certified: Identity and Access Administrator Associate - Certifications
ID ソリューションの現代化、ハイブリッド ソリューションの実装、ID ガバナンスの実装を行う Microsoft Entra ID の機能を実証します。
ドキュメント
Microsoft ID プラットフォームと OAuth 2.0 暗黙的な許可のフロー - Microsoft identity platform
Microsoft ID プラットフォームの暗黙的なフローを使用してシングルページ アプリをセキュリティで保護します。
Microsoft ID プラットフォームと OAuth2.0 On-Behalf-Of フロー - Microsoft identity platform
この記事では、HTTP メッセージを使用して、OAuth2.0 On-Behalf-Of フローを使用するサービス間の認証を実装する方法について説明します。
Microsoft ID プラットフォームと OAuth 2.0 認証コード フロー - Microsoft identity platform
OAuth 2.0 認可コード付与の Microsoft ID プラットフォームの実装に関するプロトコル リファレンス