Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
Werknemerstenants (meer informatie)
Een token verkrijgen voor een vertrouwelijke clienttoepassing
Daemon-toepassingen en andere vertrouwelijke client-apps die worden uitgevoerd zonder gebruikersinteractie, gebruiken de OAuth 2.0-clientreferentiestroom om alleen-app-toegangstokens te verkrijgen. In dit artikel wordt uitgelegd hoe u de vereiste bereiken configureert, de AcquireTokenForClient API (of het bijbehorende platformequivalent) aanroept om een token te verkrijgen en veelvoorkomende fouten op te lossen. Voordat u verdergaat, controleert u of u al een vertrouwelijke clienttoepassing hebt gemaakt.
Bereiken die moeten worden aangevraagd
Het bereik dat moet worden aangevraagd voor een client credentials flow is de naam van de resource gevolgd door /.default. De /.default notatie vertelt Microsoft Entra ID om de machtigingen op toepassingsniveau statisch te gebruiken die tijdens de registratie van de toepassing zijn gedeclareerd. Deze API-machtigingen moeten daarnaast worden verleend door een tenantbeheerder.
Hier is een voorbeeld van het definiëren van de scopes voor de web-API als onderdeel van de configuratie in een appsettings.json-bestand. Dit voorbeeld is afkomstig uit het codevoorbeeld van de .NET-console-daemon op GitHub.
{
"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 (v1.0)-resources
Het bereik dat wordt gebruikt voor client credentials moet altijd de resource ID zijn, gevolgd door /.default.
Belangrijk
Wanneer MSAL een toegangstoken aanvraagt voor een resource die een toegangstoken van versie 1.0 accepteert, parseert Microsoft Entra-id de gewenste doelgroep uit het aangevraagde bereik door alles vóór de laatste slash te nemen en te gebruiken als de resource-id.
Dus als de resource, zoals Azure SQL Database (https://database.windows.net), een doelgroep verwacht die eindigt op een slash (voor Azure SQL Database), https://database.windows.net/moet u een bereik van https://database.windows.net//.default. (Let op de dubbele slash.) Zie ook MSAL.NET-probleem #747: Resource url's trailing slash is omitted, which caused sql auth failure.
AcquireTokenForClient-API
Als u een token voor de app wilt verkrijgen, gebruikt AcquireTokenForClient of het equivalent ervan, afhankelijk van het platform.
Met Microsoft. Identity.Web, u hoeft geen token rechtstreeks te verkrijgen. U kunt API's op een hoger niveau gebruiken, zoals u ziet in het aanroepen van een web-API vanuit een daemon-toepassing. Als u echter een SDK gebruikt waarvoor een token is vereist, kunt u een app-token verkrijgen via de ITokenAcquirer abstractie, zoals wordt weergegeven in het volgende voorbeeld:
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;
protocol
Als u nog geen bibliotheek voor de gekozen taal hebt, wilt u het protocol mogelijk rechtstreeks gebruiken:
Eerste geval: toegang tot de tokenaanvraag met behulp van een gedeeld geheim
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
Tweede geval: toegang tot de tokenaanvraag met behulp van een certificaat
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
Zie de protocoldocumentatie: Microsoft Identity Platform en de OAuth 2.0-clientreferentiestroom voor meer informatie.
Probleemoplossing
Hebt u de resource/.default scope gebruikt?
Als u een foutbericht krijgt waarin wordt aangegeven dat u een ongeldig bereik hebt gebruikt, hebt u waarschijnlijk niet het bereik resource/.default gebruikt.
Bent u vergeten beheerderstoestemming te geven? Dit is vereist voor daemon-apps!
Als u de fout Onvoldoende bevoegdheden om de bewerking te voltooien krijgt, wanneer u de API aanroept, moet de tenantbeheerder machtigingen verlenen aan de toepassing.
Als u geen beheerderstoestemming voor uw toepassing verleent, retourneert de API een foutbericht dat vergelijkbaar is met het volgende voorbeeld:
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>"
}
}
}
Selecteer een van de volgende opties, afhankelijk van de rol.
Beheerder van de cloudtoepassing
Voor een cloudtoepassingsbeheerder gaat u naar Bedrijfstoepassingen in het Microsoft Entra-beheercentrum. Selecteer de app-registratie en selecteer Machtigingen in de sectie Beveiliging van het linkerdeelvenster. Selecteer vervolgens de grote knop met het label Beheerderstoestemming verlenen voor {Tenant Name} (waarbij {Tenant Name} de naam van de map is).
Standaardgebruiker
Voor een standaardgebruiker van uw tenant vraagt u een cloudtoepassingsbeheerder om beheerderstoestemming te verlenen aan de toepassing. Als u toestemming wilt aanvragen, stuurt u de beheerder naar de volgende EINDPUNT-URL voor beheerderstoestemming:
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
In de URL:
- Vervang
Enter_the_Tenant_Id_Heredoor de tenant-id of tenantnaam (bijvoorbeeldcontoso.microsoft.com). -
Enter_the_Application_Id_Hereis de toepassings-id (client) voor de geregistreerde toepassing.
De fout AADSTS50011: No reply address is registered for the application kan worden weergegeven nadat u toestemming voor de app hebt verleend met behulp van de voorgaande URL. De AADSTS50011 fout treedt op omdat de toepassing en de URL geen omleidings-URI hebben. U kunt deze fout veilig negeren.
Roept u uw eigen API aan?
Als uw daemon-app uw eigen web-API aanroept en u geen app-machtiging hebt toegevoegd aan de app-registratie van de daemon, moet u App-rollen toevoegen aan de app-registratie van de web-API.
Volgende stappen
Ga verder met het volgende artikel in dit scenario: Een web-API aanroepen.