Uzyskiwanie tokenów w celu wywoływania internetowego interfejsu API przy użyciu aplikacji demona
Po utworzeniu poufnej aplikacji klienckiej możesz uzyskać token dla aplikacji, wywołując AcquireTokenForClient
metodę , przekazując zakres i opcjonalnie wymuszając odświeżenie tokenu.
Zakresy do żądania
Zakres żądania przepływu poświadczeń klienta to nazwa zasobu, po którym następuje /.default
. Ta notacja informuje identyfikator Entra firmy Microsoft o użyciu uprawnień na poziomie aplikacji zadeklarowanych statycznie podczas rejestracji aplikacji. Ponadto te uprawnienia interfejsu API muszą zostać przyznane przez administratora dzierżawy.
Oto przykład definiowania zakresów internetowego interfejsu API w ramach konfiguracji w pliku appsettings.json. Ten przykład jest pobierany z przykładu kodu demona konsoli platformy .NET w witrynie 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]" ]
}
}
Zasoby usługi Azure AD (wersja 1.0)
Zakres używany dla poświadczeń klienta powinien zawsze być identyfikatorem zasobu, po którym /.default
następuje .
Ważne
Gdy biblioteka MSAL żąda tokenu dostępu dla zasobu, który akceptuje token dostępu w wersji 1.0, identyfikator Entra firmy Microsoft analizuje żądanych odbiorców z żądanego zakresu, przyjmując wszystko przed ostatnim ukośnikiem i używając go jako identyfikatora zasobu.
Jeśli więc, podobnie jak usługa Azure SQL Database (https://database.windows.net
), zasób oczekuje odbiorców kończących się ukośnikiem (w przypadku usługi Azure SQL Database, https://database.windows.net/
), musisz zażądać zakresu https://database.windows.net//.default
. (Zwróć uwagę na podwójny ukośnik). Zobacz również MSAL.NET problem nr 747: Resource url's trailing slash is omitted, which caused sql auth failure
.
AcquireTokenForClient API
Aby uzyskać token dla aplikacji, użyj AcquireTokenForClient
lub jej odpowiednik, w zależności od platformy.
W przypadku aplikacji Microsoft.Identity.Web nie musisz uzyskiwać tokenu. Interfejsy API wyższego poziomu można używać, jak widać w temacie Wywoływanie internetowego interfejsu API z poziomu aplikacji demona. Jeśli jednak używasz zestawu SDK, który wymaga tokenu, poniższy fragment kodu pokazuje, jak uzyskać ten token.
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;
Protokół
Jeśli nie masz jeszcze biblioteki dla wybranego języka, możesz chcieć użyć protokołu bezpośrednio:
Pierwszy przypadek: uzyskiwanie dostępu do żądania tokenu przy użyciu udostępnionego wpisu tajnego
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
Drugi przypadek: Uzyskiwanie dostępu do żądania tokenu przy użyciu certyfikatu
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
Aby uzyskać więcej informacji, zobacz dokumentację protokołu: Platforma tożsamości Microsoft i przepływ poświadczeń klienta OAuth 2.0.
Rozwiązywanie problemów
Czy użyto zakresu resource/.default?
Jeśli zostanie wyświetlony komunikat o błędzie informujący o tym, że użyto nieprawidłowego zakresu, prawdopodobnie nie użyto resource/.default
zakresu.
Czy nie pamiętasz o udzieleniu zgody administratora? Aplikacje demona są potrzebne!
Jeśli podczas wywoływania interfejsu API otrzymasz niewystarczające uprawnienia do ukończenia operacji , administrator dzierżawy musi udzielić uprawnień aplikacji.
Jeśli nie udzielisz zgody administratora aplikacji, wystąpi następujący błąd:
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>"
}
}
}
Wybierz jedną z następujących opcji, w zależności od roli.
Administrator aplikacji w chmurze
W przypadku administratora aplikacji w chmurze przejdź do pozycji Aplikacje dla przedsiębiorstw w centrum administracyjnym firmy Microsoft Entra. Wybierz rejestrację aplikacji i wybierz pozycję Uprawnienia w sekcji Zabezpieczenia w okienku po lewej stronie. Następnie wybierz duży przycisk z etykietą Udziel zgody administratora dla {Nazwa dzierżawy} (gdzie {Nazwa dzierżawy} jest nazwą katalogu).
Użytkownik standardowy
W przypadku użytkownika standardowego dzierżawy poproś administratora aplikacji w chmurze o udzielenie zgody administratora aplikacji na aplikację. W tym celu podaj następujący adres URL administratorowi:
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
W adresie URL:
- Zastąp ciąg
Enter_the_Tenant_Id_Here
identyfikatorem dzierżawy lub nazwą dzierżawy (na przykładcontoso.microsoft.com
). Enter_the_Application_Id_Here
to identyfikator aplikacji (klienta) zarejestrowanej aplikacji.
Błąd AADSTS50011: No reply address is registered for the application
może być wyświetlany po udzieleniu zgody aplikacji przy użyciu poprzedniego adresu URL. Ten błąd występuje, ponieważ aplikacja i adres URL nie mają identyfikatora URI przekierowania. Możesz go zignorować.
Czy wywołujesz własny interfejs API?
Jeśli aplikacja demona wywołuje własny internetowy interfejs API i nie możesz dodać uprawnienia aplikacji do rejestracji aplikacji demona, musisz dodać role aplikacji do rejestracji aplikacji internetowego interfejsu API.
Następne kroki
Przejdź do następnego artykułu w tym scenariuszu Wywoływanie internetowego interfejsu API.