Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: Dzierżawcy siły roboczej Biały okrąg z szarym symbolem X. dzierżawcy zewnętrzni (White circle with a gray X symbol.dowiedz się więcej)
Po utworzeniu poufnej aplikacji klienckiej możesz uzyskać token dla aplikacji, wywołując AcquireTokenForClient
, przekazując zakres i opcjonalnie wymuszając odświeżenie tokenu.
Zakresy wymagane do żądania
Zakres dla żądania przepływu poświadczeń klienta to nazwa zasobu, po której 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 pochodzi z przykładu kodu demon konsolowy .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 MSAL żąda tokenu dostępu dla zasobu, który akceptuje token dostępu w wersji 1.0, Microsoft Entra ID analizuje docelową grupę z żądanego zakresu, przyjmując wszystko przed ostatnim ukośnikiem i używając tego 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 (dla 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 kreski). Zobacz również MSAL.NET issue #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. Możesz używać interfejsów API wyższego poziomu, tak jak pokazano w Wywoływaniu 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: Dostęp do żądania tokenu przy użyciu wspólnego sekretu
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 typu daemon są potrzebne!
Jeśli otrzymasz błąd niewystarczające uprawnienia do ukończenia operacji podczas wywoływania interfejsu API, administrator najemcy musi udzielić uprawnień aplikacji.
Jeśli nie udzielasz 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
Dla standardowego użytkownika Twojej dzierżawy poproś administratora aplikacji w chmurze o udzielenie zgody administracyjnej dla aplikacji. 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ą URI przekierowania. Możesz go zignorować.
Czy wywołujesz własny interfejs API?
Jeśli aplikacja demona wywołuje własny interfejs API sieci i nie możesz dodać uprawnienia aplikacji do rejestracji aplikacji demona, musisz dodać role aplikacji do rejestracji aplikacji interfejsu API sieci.
Następne kroki
Przejdź do następnego artykułu w tym scenariuszu Wywoływanie internetowego interfejsu API.