Konfigurowanie przepływu poświadczeń klienta OAuth 2.0 w usłudze Azure Active Directory B2C
Przed rozpoczęciem użyj selektora Wybierz typ zasad, aby wybrać typ konfigurowanych zasad. Usługa Azure Active Directory B2C oferuje dwie metody definiowania sposobu interakcji użytkowników z aplikacjami: za pomocą wstępnie zdefiniowanych przepływów użytkowników lub w pełni konfigurowalnych zasad niestandardowych. Kroki wymagane w tym artykule są różne dla każdej metody.
Poświadczenia klienta protokołu OAuth 2.0 umożliwiają aplikacji (poufnemu klientowi) używanie własnych poświadczeń zamiast personifikacji użytkownika w celu uwierzytelniania podczas wywoływania zasobu internetowego, takiego jak interfejs API REST. Ten typ uprawnień jest często używany do interakcji między serwerami, które muszą działać w tle bez natychmiastowej interakcji z użytkownikiem. Takie typy aplikacji są często nazywane demonami lub kontami usług.
W przepływie poświadczeń klienta uprawnienia są przyznawane bezpośrednio do samej aplikacji przez administratora. Gdy aplikacja przedstawia token do zasobu, zasób wymusza, że sama aplikacja ma autoryzację do wykonania akcji, ponieważ nie ma żadnego użytkownika zaangażowanego w uwierzytelnianie. W tym artykule opisano kroki wymagane do autoryzowania aplikacji w celu wywołania interfejsu API oraz sposobu uzyskiwania tokenów wymaganych do wywołania tego interfejsu API.
Ta funkcja jest dostępna w publicznej wersji zapoznawczej.
Omówienie rejestracji aplikacji
Aby umożliwić aplikacji logowanie się przy użyciu poświadczeń klienta, a następnie wywołanie internetowego interfejsu API, należy zarejestrować dwie aplikacje w katalogu usługi Azure AD B2C.
Rejestracja aplikacji umożliwia aplikacji logowanie się za pomocą usługi Azure AD B2C. Proces rejestracji aplikacji generuje identyfikator aplikacji, znany również jako identyfikator klienta, który jednoznacznie identyfikuje twoją aplikację. Tworzysz również klucz tajny klienta, którego aplikacja używa do bezpiecznego uzyskiwania tokenów.
Rejestracja internetowego interfejsu API umożliwia aplikacji wywoływanie bezpiecznego internetowego interfejsu API. Rejestracja obejmuje zakresy internetowego interfejsu API. Zakresy umożliwiają zarządzanie uprawnieniami do chronionych zasobów, takich jak internetowy interfejs API. Następnie przyznasz aplikacji uprawnienia do zakresów internetowego interfejsu API. Po zażądaniu tokenu dostępu aplikacja określa
.default
parametr zakresu żądania. Usługa Azure AD B2C zwraca zakresy internetowego interfejsu API przyznane aplikacji.
Architektura i rejestracje aplikacji przedstawiono na poniższym diagramie:
Krok 1. Rejestrowanie aplikacji internetowego interfejsu API
W tym kroku zarejestrujesz internetowy interfejs API (App 2) z jego zakresami. Później przyznasz aplikacji (App 1) uprawnienie do tych zakresów. Jeśli masz już taką rejestrację aplikacji, pomiń ten krok, a następnie przejdź do następnego kroku, Krok 1.1 Definiowanie ról (zakresów) internetowego interfejsu API.
Aby utworzyć rejestrację aplikacji internetowego interfejsu API (identyfikator aplikacji: 2), wykonaj następujące kroki:
Zaloguj się w witrynie Azure Portal.
Upewnij się, że używasz katalogu zawierającego dzierżawę usługi Azure AD B2C. Wybierz ikonę Katalogi i subskrypcje na pasku narzędzi portalu.
W ustawieniach portalu | Strona Katalogi i subskrypcje , znajdź katalog usługi Azure AD B2C na liście Nazwa katalogu, a następnie wybierz pozycję Przełącz.
W witrynie Azure Portal wyszukaj i wybierz pozycję Azure AD B2C.
Wybierz pozycję Rejestracje aplikacji, a następnie wybierz pozycję Nowa rejestracja.
W polu Nazwa wprowadź nazwę aplikacji (na przykład my-api1). Pozostaw wartości domyślne dla identyfikatora URI przekierowania i obsługiwanych typów kont.
Wybierz opcję Zarejestruj.
Po zakończeniu rejestracji aplikacji wybierz pozycję Przegląd.
Zarejestruj wartość identyfikatora aplikacji (klienta) do późniejszego użycia podczas konfigurowania aplikacji internetowej.
Krok 1.1 Definiowanie ról internetowego interfejsu API (zakresów)
W tym kroku skonfigurujesz identyfikator URI identyfikatora aplikacji internetowego interfejsu API, a następnie zdefiniuj role aplikacji. Role aplikacji używane przez zakresy OAuth 2.0 i zdefiniowane podczas rejestracji aplikacji reprezentującej interfejs API. Aplikacja używa identyfikatora URI identyfikatora aplikacji z zakresem .default
. Aby zdefiniować role aplikacji, wykonaj następujące kroki:
Wybierz utworzony internetowy interfejs API, na przykład my-api1.
W obszarze Zarządzanie wybierz pozycję Uwidaczniaj interfejs API.
Obok pozycji Identyfikator URI identyfikatora aplikacji wybierz link Ustaw . Zastąp wartość domyślną (GUID) unikatową nazwą (na przykład interfejs API), a następnie wybierz pozycję Zapisz.
Skopiuj identyfikator URI identyfikatora aplikacji. Poniższy zrzut ekranu przedstawia sposób kopiowania identyfikatora URI identyfikatora aplikacji.
W obszarze Zarządzanie wybierz pozycję Manifest , aby otworzyć edytor manifestu aplikacji. W edytorze znajdź
appRoles
ustawienie i zdefiniuj role aplikacji, które są przeznaczone dla elementu .applications
Każda definicja roli aplikacji musi mieć unikatowy identyfikator globalny (GUID) dla swojejid
wartości. Wygeneruj nowy identyfikator GUID, uruchamiającnew-guid
polecenie w programie Microsoft PowerShell lub generatorze identyfikatora GUID online. Właściwośćvalue
każdej definicji roli aplikacji jest wyświetlana w zakresie oświadczeniascp
. Właściwośćvalue
nie może zawierać spacji. W poniższym przykładzie przedstawiono dwie role aplikacji: odczyt i zapis:"appRoles": [ { "allowedMemberTypes": ["Application"], "displayName": "Read", "id": "d6a15e20-f83c-4264-8e61-5082688e14c8", "isEnabled": true, "description": "Readers have the ability to read tasks.", "value": "app.read" }, { "allowedMemberTypes": ["Application"], "displayName": "Write", "id": "204dc4ab-51e1-439f-8c7f-31a1ebf3c7b9", "isEnabled": true, "description": "Writers have the ability to create tasks.", "value": "app.write" }],
W górnej części strony wybierz pozycję Zapisz , aby zapisać zmiany manifestu.
Krok 2. Rejestrowanie aplikacji
Aby umożliwić aplikacji logowanie się za pomocą usługi Azure AD B2C przy użyciu przepływu poświadczeń klienta, możesz użyć istniejącej aplikacji lub zarejestrować nową aplikację (App 1).
Jeśli używasz istniejącej aplikacji, upewnij się, że aplikacja accessTokenAcceptedVersion
jest ustawiona na wartość 2
:
- W witrynie Azure Portal wyszukaj i wybierz pozycję Azure AD B2C.
- Wybierz Rejestracje aplikacji, a następnie wybierz istniejącą aplikację z listy.
- W menu po lewej stronie w obszarze Zarządzaj wybierz pozycję Manifest , aby otworzyć edytor manifestu.
accessTokenAcceptedVersion
Znajdź element i ustaw jego wartość na2
.- W górnej części strony wybierz pozycję Zapisz , aby zapisać zmiany.
Aby utworzyć nową rejestrację aplikacji internetowej, wykonaj następujące kroki:
W witrynie Azure Portal wyszukaj i wybierz pozycję Azure AD B2C
Wybierz pozycję Rejestracje aplikacji, a następnie wybierz pozycję Nowa rejestracja.
Wprowadź nazwę aplikacji. Na przykład ClientCredentials_app.
Pozostaw pozostałe wartości w ich postaci, a następnie wybierz pozycję Zarejestruj.
Zarejestruj identyfikator aplikacji (klienta) do użycia w późniejszym kroku.
Krok 2.1. Tworzenie wpisu tajnego klienta
Utwórz klucz tajny klienta dla zarejestrowanej aplikacji. Aplikacja używa wpisu tajnego klienta, aby udowodnić swoją tożsamość, gdy żąda tokenów.
W obszarze Zarządzanie wybierz pozycję Wpisy tajne certyfikatów&.
Wybierz Nowy klucz tajny klienta.
W polu Opis wprowadź opis wpisu tajnego klienta (na przykład clientsecret1).
W obszarze Wygasa wybierz czas trwania, dla którego wpis tajny jest prawidłowy, a następnie wybierz pozycję Dodaj.
Zarejestruj wartość wpisu tajnego. Ta wartość jest używana do konfiguracji w późniejszym kroku.
Krok 2.2 Udzielanie uprawnień aplikacji dla internetowego interfejsu API
Aby udzielić aplikacji (App 1) uprawnień, wykonaj następujące kroki:
Wybierz Rejestracje aplikacji, a następnie wybierz utworzoną aplikację (App 1).
W obszarze Zarządzanie wybierz pozycję Uprawnienia interfejsu API.
W obszarze Skonfigurowane uprawnienia wybierz pozycję Dodaj uprawnienie.
Wybierz kartę Moje interfejsy API.
Wybierz interfejs API (aplikacja 2), do którego ma zostać udzielona aplikacja internetowa. Na przykład wprowadź ciąg my-api1.
Wybierz pozycję Uprawnienia aplikacji.
W obszarze Uprawnienie rozwiń węzeł aplikacja, a następnie wybierz zdefiniowane wcześniej zakresy (na przykład app.read i app.write).
Wybierz Przyznaj uprawnienia.
Wybierz pozycję Udziel zgody administratora dla< swojej nazwy> dzierżawy.
Wybierz opcję Tak.
Wybierz pozycję Odśwież, a następnie sprawdź, czy w obszarze Stan dla obu zakresów jest wyświetlana wartość Przyznane dla ... .
Krok 3. Uzyskiwanie tokenu dostępu
Nie ma żadnych konkretnych akcji umożliwiających włączenie poświadczeń klienta dla przepływów użytkownika lub zasad niestandardowych. Przepływy użytkowników usługi Azure AD B2C i zasady niestandardowe obsługują przepływ poświadczeń klienta. Jeśli jeszcze tego nie zrobiono, utwórz przepływ użytkownika lub zasady niestandardowe. Następnie użyj ulubionej aplikacji dewelopera interfejsu API, aby wygenerować żądanie autoryzacji. Skonstruuj wywołanie podobne do tego przykładu z następującymi informacjami jako treścią żądania POST:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy>/oauth2/v2.0/token
- Zastąp
<tenant-name>
ciąg nazwą dzierżawy usługi Azure AD B2C. Na przykładcontoso.b2clogin.com
. - Zastąp
<policy>
pełną nazwą przepływu użytkownika lub zasadami niestandardowymi. Należy pamiętać, że wszystkie typy przepływów użytkownika i niestandardowe zasady obsługują przepływ poświadczeń klienta. Możesz użyć dowolnego przepływu użytkownika lub zasad niestandardowych albo utworzyć nowe, takie jak rejestracja lub logowanie.
Key | Wartość |
---|---|
grant_type | client_credentials |
client_id | Identyfikator klienta z kroku 2. Rejestrowanie aplikacji. |
client_secret | Wartość Wpisu tajnego klienta z kroku 2.1 Utwórz klucz tajny klienta. |
zakres | Identyfikator URI aplikacji z kroku 1.1 Zdefiniuj role internetowego interfejsu API (zakresy) i .default . Na przykład https://contoso.onmicrosoft.com/api/.default , lub https://contoso.onmicrosoft.com/12345678-0000-0000-0000-000000000000/.default . |
Rzeczywiste żądanie POST wygląda podobnie do następującego przykładu:
Żądanie:
POST /<tenant-name>.onmicrosoft.com/B2C_1A_SUSI/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=33333333-0000-0000-0000-000000000000
&client_secret=FyX7Q~DuPJ...
&scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2F.default
Odpowiedź:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5OZDlnUkNWWUc2dUs...",
"token_type": "Bearer",
"not_before": 1645172292,
"expires_in": 3600,
"expires_on": 1645175892,
"resource": "33333333-0000-0000-0000-000000000000"
}
Dowiedz się więcej o oświadczeniach tokenu dostępu zwrotnego. W poniższej tabeli wymieniono oświadczenia powiązane z przepływem poświadczeń klienta.
Oświadczenie | Opis | Wartość |
---|---|---|
aud |
Identyfikuje zamierzonego adresata tokenu. | Identyfikator klienta interfejsu API. |
sub |
Jednostka usługi skojarzyła się z aplikacją, która zainicjowała żądanie. | Jest to jednostka client_id usługi żądania autoryzacji. |
azp |
Autoryzowana strona — strona, do której wystawiono token dostępu. | Identyfikator klienta aplikacji, która zainicjowała żądanie. Jest to ta sama wartość określona w client_id żądaniu autoryzacji. |
scp |
Zestaw zakresów uwidocznionych przez interfejs API aplikacji (ogranicznik spacji). | W przepływie poświadczeń klienta żądanie autoryzacji pyta o .default zakres, a token zawiera listę zakresów uwidocznionych (i wyrażonych przez administratora aplikacji) przez interfejs API. Na przykład app.read app.write . |
Krok 3.1 Uzyskiwanie tokenu dostępu za pomocą skryptu
Aby przetestować konfigurację, użyj następującego skryptu programu PowerShell:
$appId = "<client ID>"
$secret = "<client secret>"
$endpoint = "https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy>/oauth2/v2.0/token"
$scope = "<Your API id uri>/.default"
$body = "grant_type=client_credentials&scope=" + $scope + "&client_id=" + $appId + "&client_secret=" + $secret
$token = Invoke-RestMethod -Method Post -Uri $endpoint -Body $body
Aby przetestować konfigurację, użyj następującego skryptu cURL:
curl --location --request POST 'https://<your-tenant>.b2clogin.com/<your-tenant>.onmicrosoft.com/<policy>/oauth2/v2.0/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--form 'grant_type="client_credentials"' \
--form 'client_id="<client ID>"' \
--form 'client_secret="<client secret>"' \
--form 'scope="<Your API id uri>/.default"'
Krok 4. Dostosowywanie tokenu
Ta funkcja jest dostępna tylko dla zasad niestandardowych. Aby uzyskać instrukcje konfiguracji, wybierz pozycję Zasady niestandardowe w poprzednim selektorze.
Zasady niestandardowe umożliwiają rozszerzenie procesu wystawiania tokenów. Aby dostosować podróż użytkownika poświadczeń klienta OAuth 2.0, postępuj zgodnie ze wskazówkami dotyczącymi konfigurowania podróży użytkownika poświadczeń klienta. Następnie w JwtIssuer
profilu technicznym dodaj ClientCredentialsUserJourneyId
metadane z odwołaniem do utworzonej podróży użytkownika.
W poniższym przykładzie pokazano, jak dodać element ClientCredentialsUserJourneyId
do profilu technicznego wystawcy tokenu.
<TechnicalProfile Id="JwtIssuer">
<Metadata>
<Item Key="ClientCredentialsUserJourneyId">ClientCredentialsJourney</Item>
</Metadata>
</TechnicalProfile>
W poniższym przykładzie przedstawiono podróż użytkownika poświadczeń klienta. Wymagane są pierwsze i ostatnie kroki aranżacji.
<UserJourneys>
<UserJourney Id="ClientCredentialsJourney">
<OrchestrationSteps>
<!-- [Required] Do the client credentials -->
<OrchestrationStep Order="1" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="ClientCredSetupExchange" TechnicalProfileReferenceId="ClientCredentials_Setup" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- [Optional] Call a REST API or claims transformation -->
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="TokenAugmentation" TechnicalProfileReferenceId="TokenAugmentation" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- [Required] Issue the access token -->
<OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
</UserJourney>
</UserJourneys>
Następne kroki
Dowiedz się, jak skonfigurować przepływ poświadczeń hasła właściciela zasobu w usłudze Azure AD B2C