A .NET démonalkalmazások meghívhatnak egy webes API-t. A .NET démonalkalmazások több előre telepített webes API-t is meghívhatnak.
A Microsoft.Identity.Web elvonja a MSAL.NET összetettségét. Magasabb szintű API-kat biztosít, amelyek kezelik a MSAL.NET belső részeit, például feltételes hozzáférési hibák feldolgozását, gyorsítótárazást.
A következő Program.cs a démonalkalmazás, amely egy alsóbb rétegbeli API-t hív meg:
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()}");
A Microsoft Graphot meghívó démonalkalmazás Program.cs:
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);
Az Axioshoz hasonló HTTP-ügyfél használatával meghívhatja az API-végpont URI-t egy hozzáférési jogkivonattal engedélyezési tulajdonosként.
const axios = require('axios');
async function callApi(endpoint, accessToken) {
const options = {
headers: {
Authorization: `Bearer ${accessToken}`
}
};
console.log('request made to web API at: ' + new Date().toString());
try {
const response = await axios.default.get(endpoint, options);
return response.data;
} catch (error) {
console.log(error)
return error;
}
};
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()
AuthenticationResult tulajdonságok a MSAL.NET
A jogkivonatok beszerzésének módszerei adnak vissza AuthenticationResult
. Aszinkron metódusok Task<AuthenticationResult>
esetén a visszatérési érték.
A MSAL.NET AuthenticationResult
a következőt teszi elérhetővé:
AccessToken
a webes API számára az erőforrások eléréséhez. Ez a paraméter egy sztring, általában egy Base-64 kódolású JWT. Az ügyfélnek soha nem szabad belenéznie a hozzáférési jogkivonatba. A formátum nem garantáltan stabil marad, és titkosítható az erőforrás számára. Az ügyfél hozzáférési jogkivonat-tartalmától függő kód írása az egyik legnagyobb hibaforrás és ügyféllogika-törés. További információ: Access-jogkivonatok.
IdToken
a felhasználó számára. Ez a paraméter egy kódolt JWT. További információ: azonosító jogkivonatok.
ExpiresOn
a jogkivonat lejáratának dátumát és időpontját jelzi.
TenantId
tartalmazza azt a bérlőt, amelyben a felhasználó megtalálható. A Microsoft Entra B2B-forgatókönyvekben a vendégfelhasználók esetében a bérlőazonosító nem az egyedi bérlő, hanem a vendégbérlelő.
Amikor a jogkivonatot egy felhasználónak kézbesíti, AuthenticationResult
a felhasználóról is tartalmaz információkat. Az olyan bizalmas ügyfélfolyamatok esetében, amelyeknél a jogkivonatokat az alkalmazás felhasználója nélkül kérik le, ez a felhasználói információ null értékű.
- Az
Scopes
a jogkivonat, amelyhez a jogkivonatot kiadták.
- A felhasználó egyedi azonosítója.
IAccount
MSAL.NET határozza meg a fiók fogalmát a IAccount
felületen keresztül. Ez a kompatibilitástörő változás biztosítja a megfelelő szemantikát. Ugyanaz a felhasználó több fiókkal is rendelkezhet, különböző Microsoft Entra-címtárakban. Emellett a MSAL.NET a vendégforgatókönyvek esetében is jobb információkat nyújt, mivel az otthoni fiók adatai meg lesznek adva.
Az alábbi ábra a felület szerkezetét IAccount
mutatja be.
Az AccountId
osztály azonosít egy fiókot egy adott bérlőben az alábbi táblázatban látható tulajdonságokkal.
Tulajdonság |
Leírás |
TenantId |
A GUID sztring-ábrázolása, amely annak a bérlőnek az azonosítója, ahol a fiók található. |
ObjectId |
A GUID sztring-ábrázolása, amely annak a felhasználónak az azonosítója, aki a bérlőben lévő fiókot birtokolja. |
Identifier |
A fiók egyedi azonosítója. Identifier vesszővel elválasztott összefűzés ObjectId TenantId . Ezek nem base 64 kódolású. |
Az IAccount
interfész egyetlen fiók adatait jeleníti meg. Ugyanaz a felhasználó különböző bérlőkben is jelen lehet, ami azt jelenti, hogy egy felhasználó több fiókkal is rendelkezhet. A tagok az alábbi táblázatban láthatók.
Tulajdonság |
Leírás |
Username |
Olyan sztring, amely a megjeleníthető értéket tartalmazza UserPrincipalName (UPN) formátumban, például john.doe@contoso.com. Ez a sztring null értékű lehet, ellentétben a HomeAccountId és a HomeAccountId.Identifier értékkel, amely nem lesz null. Ez a tulajdonság a DisplayableId MSAL.NET korábbi verzióinak tulajdonságát IUser váltja fel. |
Environment |
Egy sztring, amely a fiók identitásszolgáltatója, például login.microsoftonline.com . Ez a tulajdonság a felhőkörnyezeten kívül a IdentityProvider IUser IdentityProvider bérlőre vonatkozó információkat is lecseréli. Itt az érték csak a gazdagép. |
HomeAccountId |
A felhasználó otthoni fiókjának fiókazonosítója. Ez a tulajdonság egyedileg azonosítja a felhasználót a Microsoft Entra-bérlők között. |
Védett API meghívása a jogkivonat használatával
Miután AuthenticationResult
az MSAL result
visszaadta a címet, adja hozzá a HTTP-engedélyezési fejléchez, mielőtt meghívja a védett webes API eléréséhez.
httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
// Call the web API.
HttpResponseMessage response = await _httpClient.GetAsync(apiUri);
...
Démonalkalmazások esetén a hívott webes API-kat előre kell alkalmazni. A démonalkalmazások esetében nincs növekményes hozzájárulás. (Nincs felhasználói beavatkozás.) A bérlői rendszergazdának előzetesen meg kell adnia a hozzájárulást az alkalmazáshoz és az összes API-engedélyhez. Ha több API-t szeretne meghívni, szerezze be az egyes erőforrásokhoz tartozó jogkivonatot minden híváskor AcquireTokenForClient
. Az MSAL az alkalmazásjogkivonat-gyorsítótár használatával kerüli el a szükségtelen szolgáltatáshívásokat.