Po utworzeniu szablonu tożsamości agenta następnym krokiem jest utworzenie co najmniej jednej tożsamości agenta reprezentującej agentów AI w dzierżawie testowej. Tworzenie tożsamości agenta jest zwykle wykonywane podczas aprowizacji nowego agenta sztucznej inteligencji.
Ten artykuł przeprowadzi Cię przez proces tworzenia prostej usługi internetowej, która tworzy tożsamości agentów za pośrednictwem interfejsów API programu Microsoft Graph.
Jeśli chcesz szybko tworzyć tożsamości agentów do celów testowych, rozważ użycie tego modułu programu PowerShell do tworzenia i używania tożsamości agentów.
Wymagania wstępne
Przed utworzeniem tożsamości agenta upewnij się, że masz:
-
Zrozum tożsamości agentów
- Skonfigurowana strategia tożsamości agenta (zobacz Tworzenie strategii agenta). Zarejestruj identyfikator aplikacji szablonu tożsamości agenta z procesu tworzenia
- Usługa internetowa lub aplikacja (uruchomiona lokalnie lub wdrożona na platformie Azure), która hostuje logikę tworzenia tożsamości agenta
Uzyskiwanie tokenu dostępu przy użyciu szablonu tożsamości agenta
Szablon tożsamości agenta służy do tworzenia każdej tożsamości agenta. Zażądaj tokenu dostępu od firmy Microsoft Entra przy użyciu strategii tożsamości agenta:
W przypadku korzystania z tożsamości zarządzanej jako poświadczenia należy najpierw uzyskać token dostępu przy użyciu tożsamości zarządzanej. Tokeny tożsamości zarządzanej można zażądać z lokalnego adresu IP uwidocznionego w środowisku obliczeniowym. Aby uzyskać szczegółowe informacje, zapoznaj się z dokumentacją tożsamości zarządzanej.
GET http://169.254.169.254/metadata/identity/oauth2/token?api-version=2019-08-01&resource=api://AzureADTokenExchange/.default
Metadata: True
Po uzyskaniu tokenu tożsamości zarządzanej zażądaj tokenu dla szablonu tożsamości agenta:
POST https://login.microsoftonline.com/<my-test-tenant>/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
client_id=<agent-blueprint-id>
scope=https://graph.microsoft.com/.default
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion=<msi-token>
grant_type=client_credentials
Parametr client_secret może być również używany zamiast client_assertion i client_assertion_type, gdy klucz tajny klienta jest używany w programowania lokalnego.
Aby zainstalować plik Microsoft.Identity.Web:
dotnet add package Microsoft.Identity.Web
Microsoft.Identity.Web zawiera interfejs, który automatycznie żąda tokenu dostępu i dołącza go do wychodzących żądań HTTP. W przypadku korzystania z witryny Microsoft.Identity.Web możesz przejść do następnego kroku.
Tworzenie tożsamości agenta
Korzystając z tokenu dostępu uzyskanego w poprzednim kroku, możesz teraz utworzyć tożsamości agentów w testowym tenancie. Tworzenie tożsamości agenta może wystąpić w odpowiedzi na wiele różnych zdarzeń lub wyzwalaczy, takich jak użytkownik wybierając przycisk w celu utworzenia nowego agenta.
Zalecamy utworzenie jednej tożsamości agenta dla każdego agenta, ale możesz wybrać inne podejście w zależności od potrzeb.
Zawsze dołączaj nagłówek OData-Version podczas korzystania z @odata.type.
POST https://graph.microsoft.com/beta/serviceprincipals/Microsoft.Graph.AgentIdentity
OData-Version: 4.0
Content-Type: application/json
Authorization: Bearer <token>
{
"displayName": "My Agent Identity",
"agentIdentityBlueprintId": "<my-agent-blueprint-id>",
"sponsors@odata.bind": [
"https://graph.microsoft.com/v1.0/users/<id>",
"https://graph.microsoft.com/v1.0/groups/<id>"
],
}
Aby użyć Microsoft.Identity.Web do wykonania żądania interfejsu Microsoft Graph API w celu utworzenia tożsamości agenta, dodaj następujący plik konfiguracji MISE:
Ostrzeżenie
Tajne klucze klienta nie powinny być używane jako poświadczenia klienta w środowiskach produkcyjnych dla szablonów tożsamości agenta ze względu na zagrożenia bezpieczeństwa. Zamiast tego należy użyć bezpieczniejszych metod uwierzytelniania, takich jak poświadczenia tożsamości federacyjnej (FIC) z tożsamościami zarządzanymi lub certyfikatami klienta. Te metody zapewniają zwiększone zabezpieczenia, eliminując konieczność przechowywania poufnych wpisów tajnych bezpośrednio w ramach konfiguracji aplikacji.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "<my-test-tenant>",
"ClientId": "<my-agent-blueprint-id>",
"Scopes": "access_agent",
"ClientCredentials": [
{
"SourceType": "ClientSecret",
"ClientSecret": "your-client-secret"
}
]
},
"DownstreamApis": {
"agent-identity": {
"BaseUrl": "https://graph.microsoft.com",
"RelativePath": "/beta/serviceprincipals/Microsoft.Graph.AgentIdentity",
"Scopes": ["00000003-0000-0000-c000-000000000000/.default"],
"RequestAppToken": true
}
}
}
Kod aplikacji ASP.NET Core (Program.cs) jest następującym przykładem:
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web.Resource;
using Microsoft.IdentityModel.S2S.Extensions.AspNetCore;
using MyAgent;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration)
.EnableTokenAcquisitionToCallDownstreamApi();
builder.Services.AddInMemoryTokenCaches();
var app = builder.Build();
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
public class AgentIdentity
{
[JsonPropertyName("@odata.type")]
public string @odata_type { get; set; } = "#Microsoft.Graph.AgentIdentity";
[JsonPropertyName("displayName")]
public string? displayName { get; set; }
[JsonPropertyName("agentIdentityBlueprintId")]
public string? agentIdentityBlueprintId { get; set; }
[JsonPropertyName("id")]
public string? id { get; set; }
[JsonPropertyName("sponsors@odata.bind")]
public string[]? sponsorsOdataBind { get; set; }
[JsonPropertyName("owners@odata.bind")]
public string[]? ownersOdataBind { get; set; }
}
// Create an Agent identity
app.MapGet("/create-agent-identity", async (HttpContext httpContext) =>
{
try
{
// Get the service to call the downstream API (preconfigured in the appsettings.json file)
IDownstreamApi downstreamApi = httpContext.RequestServices.GetRequiredService<IDownstreamApi>();
// Call the downstream API with a POST request to create an Agent Identity
var jsonResult = await downstreamApi.PostForAppAsync<AgentIdentity, AgentIdentity>(
"agent-identity",
new AgentIdentity {
displayName = "My agent identity",
agentIdentityBlueprintId = "<my-agent-blueprint-id>",
sponsorsOdataBind = new [] { "https://graph.microsoft.com/v1.0/users/<id>" }
}
);
return jsonResult?.id;
}
catch (Exception ex)
{
return ex.Message;
}
})
app.Run();
Usuwanie tożsamości agenta
Gdy agent zostaje oddelegowany lub zniszczony, usługa powinna również usunąć skojarzoną tożsamość agenta.
DELETE https://graph.microsoft.com/beta/serviceprincipals/<agent-identity-id>
OData-Version: 4.0
Content-Type: application/json
Authorization: Bearer <token>
// Delete an Agent identity
app.MapGet("/delete-agent-identity", async (HttpContext httpContext, string id) =>
{
// Get the service to call the downstream API (preconfigured in the appsettings.json file)
IDownstreamApi downstreamApi = httpContext.RequestServices.GetRequiredService<IDownstreamApi>();
// Call the downstream API with a DELETE request to remove an Agent Identity
var jsonResult = await downstreamApi.DeleteForAppAsync<string, string>(
"agent-identity",
null!,
options =>
{
options.RelativePath += $"/{id}"; // Specify the ID of the agent identity to delete
});
return jsonResult;
})