Jogkivonatok beszerzése webes API-k démonalkalmazással való meghívásához
Miután létrehozott egy bizalmas ügyfélalkalmazást, jogkivonatot szerezhet be az alkalmazáshoz a hívással AcquireTokenForClient
, a hatókör átadásával és opcionálisan a jogkivonat frissítésének kényszerítésével.
Kérendő hatókörök
Az ügyfél hitelesítő adatainak lekérésére szolgáló hatókör az erőforrás neve, amelyet a következő követ /.default
: . Ez a jelölés arra utasítja a Microsoft Entra-azonosítót, hogy az alkalmazásregisztráció során statikusan deklarált alkalmazásszintű engedélyeket használja. Ezeket az API-engedélyeket egy bérlői rendszergazdának kell megadnia.
Íme egy példa a webes API hatóköreinek meghatározására egy appsettings.json fájl konfigurációjának részeként. Ez a példa a GitHubon található .NET-konzol démonkódmintájából származik.
{
"AzureAd": {
// Same AzureAd section as before.
},
"MyWebApi": {
"BaseUrl": "https://localhost:44372/",
"RelativePath": "api/TodoList",
"RequestAppToken": true,
"Scopes": [ "[Enter here the scopes for your web API]" ]
}
}
Azure AD-erőforrások (1.0-s verzió)
Az ügyfél hitelesítő adataihoz használt hatókörnek mindig az erőforrás-azonosítónak kell lennie, amelyet a rendszer követ /.default
.
Fontos
Amikor az MSAL hozzáférési jogkivonatot kér egy olyan erőforráshoz, amely elfogadja az 1.0-s verziójú hozzáférési jogkivonatot, a Microsoft Entra ID elemzi a kívánt célközönséget a kért hatókörből úgy, hogy az utolsó perjel előtt mindent figyelembe vesz, és erőforrás-azonosítóként használja.
Ha tehát az Azure SQL Database-hez (https://database.windows.net
) hasonlóan az erőforrás perjellel végződő célközönséget vár (az Azure SQL Database esetében), https://database.windows.net/
akkor egy hatókört kell kérnie https://database.windows.net//.default
. (Jegyezze fel a kettős perjelet.) Lásd még MSAL.NET 747 Resource url's trailing slash is omitted, which caused sql auth failure
.
AcquireTokenForClient API
Az alkalmazás jogkivonatának beszerzéséhez használja AcquireTokenForClient
vagy annak megfelelőjét a platformtól függően.
A Microsoft.Identity.Web használatával nem kell jogkivonatot beszereznie. Magasabb szintű API-kat is használhat, ahogy a webes API-k démonalkalmazásból való meghívása című témakörben látható. Ha azonban egy jogkivonatot igénylő SDK-t használ, az alábbi kódrészlet bemutatja, hogyan szerezheti be ezt a jogkivonatot.
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();
ITokenAcquirer acquirer = tokenAcquirerFactory.GetTokenAcquirer();
AcquireTokenResult tokenResult = await acquirer.GetTokenForUserAsync(new[] { "https://graph.microsoft.com/.default" });
string accessToken = tokenResult.AccessToken;
Protokoll
Ha még nem rendelkezik a választott nyelvhez tartozó kódtárval, érdemes lehet közvetlenül használnia a protokollt:
Első eset: A jogkivonat-kérelem elérése megosztott titkos kód használatával
POST /{tenant}/oauth2/v2.0/token HTTP/1.1 //Line breaks for clarity.
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=A1b-C2d_E3f.H4i,J5k?L6m!N7o-P8q_R9s.T0u
&grant_type=client_credentials
Második eset: A jogkivonat-kérelem elérése tanúsítvány használatával
POST /{tenant}/oauth2/v2.0/token HTTP/1.1 // Line breaks for clarity.
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_id=11112222-bbbb-3333-cccc-4444dddd5555
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=aaaaaaaa-0b0b-...
&grant_type=client_credentials
További információt a protokoll dokumentációjában talál: Microsoft Identitásplatform és az OAuth 2.0 ügyfél hitelesítő adatainak folyamata.
Hibaelhárítás
Az resource/.default hatókört használta?
Ha hibaüzenet jelenik meg arról, hogy érvénytelen hatókört használt, valószínűleg nem használta a hatókört resource/.default
.
Elfelejtette megadni a rendszergazdai hozzájárulást? Démonalkalmazásokra van szükség!
Ha nem megfelelő jogosultságokkal rendelkezik a művelethiba végrehajtásához az API meghívásakor, a bérlői rendszergazdának engedélyeket kell adnia az alkalmazásnak.
Ha nem ad rendszergazdai hozzájárulást az alkalmazáshoz, a következő hibaüzenet jelenik meg:
Failed to call the web API: Forbidden
Content: {
"error": {
"code": "Authorization_RequestDenied",
"message": "Insufficient privileges to complete the operation.",
"innerError": {
"request-id": "<guid>",
"date": "<date>"
}
}
}
A szerepkörtől függően válasszon az alábbi lehetőségek közül.
Felhőalkalmazás-rendszergazda
Felhőalkalmazás-rendszergazdaként nyissa meg a Vállalati alkalmazásokat a Microsoft Entra Felügyeleti központban. Válassza ki az alkalmazásregisztrációt, majd a bal oldali panel Biztonság szakaszában válassza az Engedélyek lehetőséget. Ezután válassza ki a(z) {Tenant Name} rendszergazdai hozzájárulásának megadása (ahol a(z) {Tenant Name} a címtár neve).
Standard felhasználó
A bérlő egy szabványos felhasználójához kérje meg a felhőalkalmazás rendszergazdáját, hogy adjon rendszergazdai hozzájárulást az alkalmazáshoz. Ehhez adja meg a következő URL-címet a rendszergazdának:
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
Az URL-címben:
- Cserélje le
Enter_the_Tenant_Id_Here
a bérlőazonosítóra vagy a bérlő nevére (példáulcontoso.microsoft.com
). Enter_the_Application_Id_Here
A regisztrált alkalmazás (ügyfél) azonosítója.
A hiba AADSTS50011: No reply address is registered for the application
akkor jelenhet meg, ha az előző URL-cím használatával engedélyt ad az alkalmazásnak. Ez a hiba azért fordul elő, mert az alkalmazás és az URL-cím nem rendelkezik átirányítási URI-val. Ezt figyelmen kívül hagyhatja.
Saját API-t hív meg?
Ha a démonalkalmazás meghívja a saját webes API-t, és nem tudott alkalmazásengedélyt adni a démon alkalmazásregisztrációjához, alkalmazásszerepköröket kell hozzáadnia a webes API alkalmazásregisztrációjához.