.NET daemon uygulamaları bir web API'si çağırabilir. .NET daemon uygulamaları önceden onaylanan birkaç web API'lerini de çağırabilir.
Microsoft.Identity.Web, MSAL.NET karmaşıklığını soyutlar. Koşullu Erişim hatalarını işleme, önbelleğe alma gibi MSAL.NET iç bileşenlerini işleyen daha üst düzey API'ler sağlar.
Aşağıda aşağı akış API'sini çağıran daemon uygulamasının Program.cs verilmiştir:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;
// In the Program.cs, acquire a token for your downstream API
var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
tokenAcquirerFactory.Services.AddDownstreamApi("MyApi",
tokenAcquirerFactory.Configuration.GetSection("MyWebApi"));
var sp = tokenAcquirerFactory.Build();
var api = sp.GetRequiredService<IDownstreamApi>();
var result = await api.GetForAppAsync<IEnumerable<TodoItem>>("MyApi");
Console.WriteLine($"result = {result?.Count()}");
Microsoft Graph'i çağıran bir daemon uygulamasının Program.cs aşağıdadır:
var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
tokenAcquirerFactory.Services.AddMicrosoftGraph();
var serviceProvider = tokenAcquirerFactory.Build();
try
{
GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
.GetAsync(r => r.Options.WithAppOnly());
Console.WriteLine($"{users.Count} users");
Console.ReadKey();
}
catch (Exception ex) { Console.WriteLine("We could not retrieve the user's list: " + $"{ex}"); }
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// Set the appropriate header fields in the request header.
conn.setRequestProperty("Authorization", "Bearer " + accessToken);
conn.setRequestProperty("Accept", "application/json");
String response = HttpClientHelper.getResponseStringFromConn(conn);
int responseCode = conn.getResponseCode();
if(responseCode != HttpURLConnection.HTTP_OK) {
throw new IOException(response);
}
JSONObject responseObject = HttpClientHelper.processResponse(responseCode, response);
endpoint = "url to the API"
http_headers = {'Authorization': 'Bearer ' + result['access_token'],
'Accept': 'application/json',
'Content-Type': 'application/json'}
data = requests.get(endpoint, headers=http_headers, stream=False).json()
MSAL.NET authenticationResult özellikleri
Belirteçleri alma yöntemleri döndürür AuthenticationResult
. Zaman uyumsuz yöntemler için Task<AuthenticationResult>
döndürür.
MSAL.NET'da şunları AuthenticationResult
kullanıma sunar:
AccessToken
web API'sinin kaynaklara erişmesini sağlar. Bu parametre genellikle Base-64 kodlu JWT olan bir dizedir. İstemci hiçbir zaman erişim belirtecinin içine bakmamalıdır. Biçimin kararlı kalacağı garanti edilmez ve kaynak için şifrelenebilir. İstemcideki erişim belirteci içeriğine bağlı kod yazmak, en büyük hata ve istemci mantığı kesme kaynaklarından biridir. Daha fazla bilgi için bkz . Erişim belirteçleri.
IdToken
kullanıcı için. Bu parametre kodlanmış bir JWT'dir. Daha fazla bilgi için bkz . Kimlik belirteçleri.
ExpiresOn
belirtecin süresinin dolmasına ilişkin tarih ve saati bildirir.
TenantId
kullanıcının bulunduğu kiracıyı içerir. Microsoft Entra B2B senaryolarındaki konuk kullanıcılar için kiracı kimliği benzersiz kiracı değil konuk kiracıdır.
Belirteç bir kullanıcı için teslim edildiğinde, AuthenticationResult
bu kullanıcı hakkındaki bilgileri de içerir. Uygulama için kullanıcı olmadan belirteçlerin istendiği gizli istemci akışları için bu kullanıcı bilgileri null değeridir.
Scopes
Belirtecin verildiği.
- Kullanıcının benzersiz kimliği.
IAccount
MSAL.NET, arabirim aracılığıyla IAccount
bir hesabın tanımını tanımlar. Bu hataya neden olan değişiklik doğru semantiği sağlar. Aynı kullanıcının farklı Microsoft Entra dizinlerinde birkaç hesabı olabilir. Ayrıca MSAL.NET, ev hesabı bilgileri sağlandığından konuk senaryolarında daha iyi bilgiler sağlar.
Aşağıdaki diyagramda arabirimin yapısı gösterilmektedir IAccount
.
sınıfı, AccountId
belirli bir kiracıdaki bir hesabı aşağıdaki tabloda gösterilen özelliklerle tanımlar.
Özellik |
Açıklama |
TenantId |
Hesabın bulunduğu kiracının kimliği olan GUID için dize gösterimi. |
ObjectId |
Kiracıda hesabın sahibi olan kullanıcının kimliği olan GUID için dize gösterimi. |
Identifier |
Hesabın benzersiz tanımlayıcısı. Identifier virgülle ayrılmış ve TenantId öğesinin birleştirilmiş olmasıdırObjectId . Temel 64 kodlanmış değiller. |
Arabirim, IAccount
tek bir hesap hakkındaki bilgileri temsil eder. Aynı kullanıcı farklı kiracılarda mevcut olabilir; başka bir deyişle kullanıcının birden çok hesabı olabilir. Üyeleri aşağıdaki tabloda gösterilmiştir.
Özellik |
Açıklama |
Username |
UserPrincipalName (UPN) biçiminde görüntülenebilir değeri içeren bir dize, örneğin, john.doe@contoso.com. Bu dize, HomeAccountId ve HomeAccountId.Identifier'ın aksine null olabilir ve null olmaz. Bu özellik, önceki MSAL.NET sürümlerinde özelliğinin yerini alır DisplayableId IUser . |
Environment |
Bu hesabın kimlik sağlayıcısını içeren bir dize, örneğin, login.microsoftonline.com . Bu özellik, bulut ortamına IdentityProvider IUser ek olarak kiracıyla ilgili bilgilere sahip olması IdentityProvider dışında özelliğinin yerini alır. Burada değer yalnızca konaktır. |
HomeAccountId |
Kullanıcının giriş hesabının hesap kimliği. Bu özellik, kullanıcıyı Microsoft Entra kiracıları genelinde benzersiz olarak tanımlar. |
Korumalı API'yi çağırmak için belirteci kullanma
içinde MSAL result
tarafından döndürüldükten sonraAuthenticationResult
, korumalı web API'sine erişim çağrısında bulunmadan önce bunu HTTP yetkilendirme üst bilgisine ekleyin.
httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
// Call the web API.
HttpResponseMessage response = await _httpClient.GetAsync(apiUri);
...
Daemon uygulamaları için, çağırdığınız web API'lerinin önceden onaylanması gerekir. Daemon uygulamaları için artımlı onay yoktur. (Kullanıcı etkileşimi yoktur.) Kiracı yöneticisinin uygulama ve tüm API izinleri için önceden onay vermesi gerekir. Çeşitli API'leri çağırmak istiyorsanız, her çağırdığınızda AcquireTokenForClient
her kaynak için bir belirteç alın. MSAL, gereksiz hizmet çağrılarını önlemek için uygulama belirteci önbelleğini kullanır.