Share via


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 .

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.

Globális bérlői rendszergazda

Globális bérlői 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 globális Rendszergazda istratort, 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ául contoso.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.

Következő lépések

Lépjen tovább a következő cikkre ebben a forgatókönyvben: Webes API meghívása.