自律エージェントは、ユーザーの代理人として機能するのではなく、独自の ID を使用して操作を実行します。 安全に動作するには、自律エージェントがMicrosoft Entra IDで認証し、アクセス トークンを取得し、適切なアクセス許可を付与する必要があります。 この記事では、エンド ツー エンドのフローについて説明します。
- クライアント資格情報を構成します。
- エージェント ID ブループリントのトークンを要求します。
- エージェント ID トークンを要求します。
- アプリケーションのアクセス許可を付与する (管理者の同意)。
- (省略可能)ユーザー ID を必要とするリソースに対して、エージェントのユーザー アカウントとして作成および認証します。
注
この記事では、独自の ID で動作する自律エージェントについて説明します。 エージェントがサインインしているユーザーの代わりに動作する必要がある場合は、「 ユーザーの認証と対話型エージェントのトークンの取得」を参照してください。
前提条件
エージェント トークン認証を実装する前に、次のことを確認してください。
- エージェント ID ブループリント。
- エージェント ID。 エージェントアイデンティティクライアントIDが必要です。
- Microsoft Entra エージェント ID における OAuth プロトコル の理解。
管理者の承認には、次のものが必要です。
- Microsoft Entra ID テナントにおけるユーザーの管理者権限。
- エージェントに必要な特定のアクセス許可を理解する。
エージェントのユーザー アカウント認証には、次のものが必要です。
- Microsoft Entra エージェント IDにおけるエージェントのユーザーアカウントに関する理解。
クライアント資格情報を構成する
クライアント資格情報の詳細を取得します。 これは、クライアントシークレット、証明書、またはフェデレート ID 資格情報として使用している管理された ID かもしれません。
Warnung
セキュリティ リスクのために、エージェント ID ブループリントの運用環境では、クライアント シークレットをクライアント資格情報として使用しないでください。 代わりに、マネージド ID またはクライアント証明書を使用 するフェデレーション ID 資格情報 (FIC) などのより安全な認証方法を使用してください。 これらの方法により、アプリケーション構成内に機密性の高いシークレットを直接格納する必要がなくなり、セキュリティが強化されます。
エージェントアイデンティティブループリントで構成したクレデンシャルを集めます。 次のいずれかが必要です。
- 管理 ID (推奨): マネージド ID クライアント ID と、Azure インスタンス メタデータ サービス (IMDS) からのトークン。
- 証明書: 証明書の拇印または PFX ファイル。
- クライアント シークレット (開発のみ): シークレット値。
エージェント ID ブループリントのトークンを要求する
エージェント ID ブループリントのトークンを要求する場合は、 fmi_path (フェデレーション マネージド ID パス) パラメーターにエージェント ID のクライアント ID を指定します。 このパラメーターはMicrosoft Entra IDブループリントがどのエージェント ID に代わって動作するかを示します。
ローカル開発中にクライアント シークレットを使用する場合は、 client_secret パラメーターを指定します。 証明書とマネージド ID の場合は、代わりに client_assertion と client_assertion_type を使用します。
POST https://login.microsoftonline.com/<my-test-tenant>/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
client_id=<agent-blueprint-client-id>
&scope=api://AzureADTokenExchange/.default
&grant_type=client_credentials
&client_secret=<client-secret>
&fmi_path=<agent-identity-client-id>
エージェント ID トークンを要求する
エージェント ID ブループリント トークン (T1) を取得したら、それを使用してエージェント ID トークンを要求します。
POST https://login.microsoftonline.com/<my-test-tenant>/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
client_id=<agent-identity-client-id>
&scope=https://graph.microsoft.com/.default
&grant_type=client_credentials
&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
&client_assertion=<agent-blueprint-token-T1>
アプリケーションのアクセス許可を付与する
エージェントは、多くの場合、Microsoft Entra ID アプリケーションのアクセス許可 (アプリ ロールとして表されます) を必要とするMicrosoft Graphやその他の Web サービスでアクションを実行する必要があります。 自律エージェントは、Microsoft Entra ID管理者にこれらのアクセス許可を要求する必要があります。
自律エージェントにアプリケーションのアクセス許可を付与するには、次の 2 つの方法があります。
- 管理者は、Microsoft Graph API または PowerShell を使用して、appRoleAssignment を作成できます。
- エージェントは、管理者の同意 URL を使用して、管理者を同意ページに誘導できます。
API を使用してアプリ ロールの割り当てを作成する
アプリ ロールの割り当てを取得するには、次の手順を使用します。
アプリケーションのアクセス許可と
Application.Read.Allを使用してAppRoleAssignment.ReadWrite.Allします。アクセスしようとしているリソース サービス プリンシパルのオブジェクト ID を取得します。 たとえば、Microsoft Graph サービス プリンシパル オブジェクト ID を検索するには、次のようにします。
- Microsoft Entra 管理センターに移動します。
- Entra ID -->Enterprise Applications に移動します
- アプリケーションの種類が Microsoft アプリケーションのときにフィルターをかける
- Microsoft Graph を検索します。
割り当てるアプリ ロールの一意の ID を取得します。
アプリ ロールの割り当てを作成します。
POST https://graph.microsoft.com/v1.0/servicePrincipals/<agent-identity-id>/appRoleAssignments Authorization: Bearer <token> Content-Type: application/json { "principalId": "<agent-identity-id>", "resourceId": "<microsoft-graph-sp-object-id>", "appRoleId": "<app-role-id>" }
テナント管理者に承認を要求する
委任されたアクセス許可を付与するには、管理者に確認を求めるために使用する承認 URL を作成します。 ロール パラメーターは、要求されたアプリケーションのアクセス許可を指定するために使用されます。
次の要求では、必ずエージェント ID クライアント ID を使用してください。
https://login.microsoftonline.com/contoso.onmicrosoft.com/v2.0/adminconsent
?client_id=<agent-identity-client-id>
&role=User.Read.All
&redirect_uri=https://entra.microsoft.com/TokenAuthorize
&state=xyz123
エージェントの実装では、チャット ウィンドウで管理者に送信されたメッセージに含めるなど、さまざまな方法で管理者をこの URL にリダイレクトする場合があります。 管理者がこの URL にリダイレクトされると、サインインし、スコープ パラメーターで指定されたアクセス許可に同意するように求められます。 現時点では、一覧表示されているリダイレクト URI を使用する必要があります。この URI を使用すると、管理者は同意を与えてから空白のページに移動します。
アプリケーションに必要なアクセス許可を付与したら、アクセス許可を有効にするために新しいエージェント アクセス トークンを要求します。
エージェントのユーザー アカウントとして認証する
自律エージェントは、アプリ専用トークンを使用して操作するだけでなく、エージェントのユーザー アカウントとして認証できます。 エージェントのユーザー アカウントは、エージェントで使用するために専用に構築Microsoft Entra特殊な種類のユーザー アカウントです。 最も一般的に使用されるのは、メールボックス、Teams チャネル、その他のユーザー固有のリソースなど、ユーザー アカウントの存在を必要とするシステムにエージェントが接続する必要がある場合です。
各エージェント ID に関連付けられるエージェントのユーザー アカウントは 1 つだけであり、各エージェントのユーザー アカウントは 1 つのエージェント ID にのみ関連付けることができます。
エージェントのユーザー アカウントを作成するための承認を取得する
エージェントのユーザー アカウントを作成するには、エージェント ID ブループリントに、テナント内の AgentIdUser.ReadWrite.IdentityParentedBy アプリケーションのアクセス許可を付与する必要があります。 承認は、次の 2 つの方法のいずれかで取得できます。
-
エージェントの承認を要求します。 エージェント ID ではなく、エージェント ID ブループリントを
client_idとして必ず使用してください。 - テナントで appRoleAssignment を手動で作成します。 エージェント ID ブループリントのサービス プリンシパル オブジェクト ID を、アプリケーション (クライアント) ID ではなく、
principalId値として使用します。
エージェント ID ブループリントではなく別のクライアントを使用してエージェントのユーザー アカウントを作成する場合、そのクライアントは代わりに委任された AgentIdUser.ReadWrite.All またはアプリケーションのアクセス許可を取得する必要があります。
エージェントのユーザー アカウントを作成する
エージェント ID ブループリントまたはその他の承認済みクライアントを使用して、エージェントのユーザー アカウントを作成します。 エージェントのユーザー アカウントを作成する推奨される方法は、エージェント ID ブループリントを使用することです。 エージェントのユーザー アカウントを作成するには 、アクセス トークンが必要 です。
必要なアクセス許可を持つアクセス トークンを取得したら、次の要求を行います。
POST https://graph.microsoft.com/beta/users
OData-Version: 4.0
Content-Type: application/json
Authorization: Bearer <token>
{
"@odata.type": "microsoft.graph.agentUser",
"displayName": "New Agent User",
"userPrincipalName": "agentuserupn@tenant.onmicrosoft.com",
"identityParentId": "{agent-identity-id}",
"mailNickname": "agentuserupn",
"accountEnabled": true
}
エージェントのユーザー アカウントを作成したら、他に何も構成する必要はありません。 これらのアカウントには資格情報がないため、次のセクションで説明するプロトコルを使用してのみ認証できます。
エージェント ID に同意を付与する
エージェントのユーザー アカウントは、他のユーザー アカウントと同様に動作します。 エージェントのユーザー アカウントを使用してトークンを要求するには、エージェント ID がエージェントの代わりに動作することを承認する必要があります。 エージェント ID は、admin authorization を使用して承認するか、Microsoft Graph または Microsoft Graph PowerShell を使用して oAuth2PermissionGrant を手動で作成できます。
Microsoft Graphの場合、要求は次のスニペットに示されています。
POST https://graph.microsoft.com/v1.0/oauth2PermissionGrants
Authorization: Bearer {token}
Content-Type: application/json
{
"clientId": "{agent-identity-id}",
"consentType": "Principal",
"principalId": "{agent-id-user-object-id}",
"resourceId": "{ms-graph-service-principal-object-id}",
"scope": "Mail.Read"
}
Microsoft Graph PowerShell の場合は、次のスクリプトを使用します。
Connect-MgGraph -Scopes "DelegatedPermissionGrant.ReadWrite.All" -TenantId <your-test-tenant>
# Get the service principal for Microsoft Graph
$graphSp = Get-MgServicePrincipal -Filter "appId eq '00000003-0000-0000-c000-000000000000'"
# Get the service principal for your client app
$clientSp = Get-MgServicePrincipal -Filter "appId eq '{agent-identity-id}'"
# Create the delegated permission grant
New-MgOauth2PermissionGrant -BodyParameter @{
clientId = $clientSp.Id
consentType = "Principal"
principalId = "{agent-id-user-object-id}"
resourceId = $graphSp.Id
scope = "Mail.Read"
}
エージェントのユーザー アカウント トークンを要求する
エージェントのユーザー アカウントを認証するには、次の 3 つの手順に従う必要があります。
- エージェント ID ブループリントとしてトークンを取得します。
- そのトークンを使用して、エージェント ID として別のトークンを取得します。
- エージェントのユーザー アカウントとして別のトークンを取得するには、前の両方のトークンを使用します。
最初に、「エージェント ID ブループリントのトークンを要求する」の説明に従って、 エージェント ID ブループリントとしてトークンを要求します。 エージェント アプリ トークンを取得したら、それを使用して、エージェント ID のフェデレーション ID 資格情報 (FIC) を要求します。
POST https://login.microsoftonline.com/<my-test-tenant>/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
client_id=<agent-identity-id>
&scope=api://AzureADTokenExchange/.default
&grant_type=client_credentials
&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
&client_assertion=<agent-blueprint-token>
これにより、エージェント ID の交換トークン (T2) が返されます。 次の要求でそれを使用して、エージェントのユーザー アカウントの委任されたトークンを取得します。
POST https://login.microsoftonline.com/<my-test-tenant>/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
client_id=<agent-identity-id>
&scope=https://graph.microsoft.com/.default
&grant_type=user_fic
&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
&client_assertion=<agent-blueprint-token>
&user_id=<agent-user-object-id>
&user_federated_identity_credential=<agent-identity-token>
これにより、エージェントのユーザー アカウントとしてMicrosoft Graphを呼び出すために使用できる委任されたアクセス トークンが提供されます。 ユーザー識別子にuser_id=<user-object-id>する代わりに、username=<UPN>を使用できます。