Użyj niejawnego przepływu w protokole OAuth 2.0 w portalu

Uwaga

12 października 2022 r. funkcja Portale usługi Power Apps została przekształcona w usługę Power Pages. Więcej informacji: Usługa Microsoft Power Pages jest teraz ogólnie dostępna (blog)
Wkrótce zmigrujemy i scalimy dokumentację funkcji Portale usługi Power Apps z dokumentacją usługi Power Pages.

Ta funkcja umożliwia klientowi wykonanie wywołań klienta do zewnętrznych interfejsów API i zabezpieczenie ich przy użyciu niejawnego przepływu w protokole OAuth. Zapewnia punkt końcowy do uzyskiwania bezpiecznych tokenów dostępu. Te tokeny bezpiecznego dostępu, zawierające informacje o tożsamości użytkownika, które mają być używane przez zewnętrzne API do autoryzacji po niejawnym przepływie w protokole OAuth 2.0. Informacje o tożsamości zalogowanego użytkownika są przekazywane w zabezpieczony sposób do zewnętrznych wywołań AJAX, co pomaga programistom w przekazywaniu kontekstu uwierzytelniania, a także pomoże użytkownikom zabezpieczyć ich API.

Niejawny przepływ w protokole 2.0 OAuth obsługuje tokeny punktów końcowych, które klient może wywoływać, aby uzyskać token identyfikatora.

Certyfikaty niestandardowe

Używanie certyfikatu domyślnego dla przepływu niejawnego udziałania OAuth 2.0 jest przestarzałe. Podczas korzystania z punktu końcowego OAuth 2.0 należy używać niestandardowego certyfikatu. Użyj centrum administracyjnego Power Platform, aby wgrać certyfikat niestandardowy. Po załadowaniu własnego certyfikatu musisz zaktualizować ustawienia witryny, jak poniżej:

  1. Przejdź do  ustawienia portalu  i wybierz  Ustawienia witryny.

  2. Aby utworzyć nowe ustawienie: wybierz  Nowy.

  3. Aby edytować istniejące ustawienie wybierz ustawienie witryny wymienione w siatce.

  4. Określ wartość:

    • Nazwa: CustomCertificates/ImplicitGrantflow
    • Witryna sieci Web: Skojarzona witryna sieci Web
    • Wartość: Skopiuj odcisk palca przesłanego certyfikatu niestandardowego z ekranu Zarządzaj certyfikatem niestandardowym i wklej tutaj. Wartość wskaże, który certyfikat zostanie użyty do niejawnego przepływu dotacji.
  5. Zaznacz  Zapisz i zamknij. Menu ogólne ustawień nowej witryny z podanymi wartościami.

Szczegóły punktu końcowego tokenu

Token można także uzyskać, tworząc prośbę postowania do punktu końcowego /token. Adres URL punktu końcowego tokenu to: <portal_url>/_services/auth/token. Punkt końcowy tokenu obsługuje następujące parametry:

Parametr Wymagany? Opis
client_id Nie Ciąg, który jest przekazywany, podczas wykonywania wywołania punktu końcowego Autoryzuj. Należy się upewnić, że identyfikator klienta zarejestrowano w portalu. W przeciwnym razie zostanie wyświetlony komunikat o błędzie. Identyfikator klienta jest dodawany w oświadczeniach w tokenie jako aud oraz parametr appid i może być używany przez klientów do sprawdzania, czy zwracany token dotyczy ich aplikacji.
Maksymalna długość wynosi 36 znaków. Obsługiwane są tylko znaki alfanumeryczne oraz myślnik.
redirect_uri Nie Adres URL portalu, gdzie odpowiedzi uwierzytelniania mogą być wysłane i odbierane. Muszą być zarejestrowane dla konkretnego client_id używanego w wywołaniu i mieć dokładnie taką samą wartość jak zarejestrowano.
stan Nie Wartość zawarta w żądaniu, która została również zwrócona w odpowiedzi tokenu. Może to być ciąg dowolnej zawartości, która ma być używana. Zazwyczaj losowo wygenerowana, unikatowa wartość jest używana, żeby zapobiec atakom fałszowania żądań między witrynami.
Maksymalna długość wynosi 20 znaków.
nonce Nie Wartość ciągu wysyłana przez klienta, znajdująca się w tokenie identyfikatora jako oświadczenie. Klient może zweryfikować tę wartość, aby wyeliminować ataki ponownego odtwarzania tokenu. Maksymalna długość wynosi 20 znaków.
response_type Nie Ten parametr obsługuje tylko token jako wartość, dzięki temu Twoja aplikacja natychmiast otrzymuje token dostępu z punktu końcowego Autoryzuj, bez wprowadzania drugiego żądania do punktu końcowego Autoryzuj.

Uwaga

Mimo że parametry client_id, redirect_uri, state, i nonce są opcjonalne, zaleca się używać ich w celu upewnienia się, że integracje są bezpieczne.

Odpowiedź pomyślna

Punkt końcowy token zwraca stan i expires_in jako nagłówki odpowiedzi i token w treści formularza.

Odpowiedź błędna

Błąd w punkcie końcowym tokenu jest zwracany jako dokument JSON z następującymi wartościami:

  • Identyfikator błędu: Unikatowy identyfikator błędu.
  • Komunikat o błędzie: Określony komunikat o błędzie, który umożliwia zidentyfikowanie głównej przyczyny błędu uwierzytelniania.
  • Identyfikator skojarzenia: Identyfikator GUID, który jest używany do debugowania. Jeśli zostało włączone rejestrowanie diagnostyczne, identyfikator skojarzenia będzie się znajdował w dziennikach błędów serwera.
  • Sygnatura czasowa: Data i godzina wygenerowania błędu.

Komunikat o błędzie jest wyświetlany w języku domyślnym zalogowanego użytkownika. Jeśli użytkownik nie jest zalogowany, strona logowania jest wyświetlana, aby użytkownik się zalogował. Na przykład komunikat o błędzie wygląda następująco:

{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }

Szczegóły punktu końcowego Autoryzuj

Uwaga

Punkt końcowy Autoryzuj jest wycofany. Użyj żądania POST z punktu końcowego Token, aby uzyskać token ID].

Adres URL punktu końcowego Autoryzuj to: <portal_url>/_services/auth/authorize. Punkt końcowy Autoryzuj obsługuje następujące parametry:

Parametr Wymagany? Opis
client_id Tak Ciąg, który jest przekazywany, podczas wykonywania wywołania punktu końcowego Autoryzuj. Należy się upewnić, że identyfikator klienta zarejestrowano w portalu. W przeciwnym razie zostanie wyświetlony komunikat o błędzie. Identyfikator klienta jest dodawany w oświadczeniach w tokenie jako aud oraz parametr appid i może być używany przez klientów do sprawdzania, czy zwracany token dotyczy ich aplikacji.
Maksymalna długość wynosi 36 znaków. Obsługiwane są tylko znaki alfanumeryczne oraz myślniki.
redirect_uri Tak Adres URL portalu, gdzie odpowiedzi uwierzytelniania mogą być wysłane i odbierane. Muszą być zarejestrowane dla konkretnego client_id używanego w wywołaniu i mieć dokładnie taką samą wartość jak zarejestrowano.
stan Nie Wartość zawarta w żądaniu, która została również zwrócona w odpowiedzi tokenu. Może to być ciąg dowolnej zawartości, która ma być używana. Zazwyczaj losowo wygenerowana, unikatowa wartość jest używana, żeby zapobiec atakom fałszowania żądań między witrynami.
Maksymalna długość wynosi 20 znaków.
nonce Nie Wartość ciągu wysyłana przez klienta, znajdująca się w tokenie identyfikatora jako oświadczenie. Klient może zweryfikować tę wartość, aby wyeliminować ataki ponownego odtwarzania tokenu. Maksymalna długość wynosi 20 znaków.
response_type Nie Ten parametr obsługuje tylko token jako wartość, dzięki temu Twoja aplikacja natychmiast otrzymuje token dostępu z punktu końcowego Autoryzuj, bez wprowadzania drugiego żądania do punktu końcowego Autoryzuj.

Odpowiedź pomyślna

Punkt końcowy Autoryzuj zwraca następujące wartości w adresie URL odpowiedzi jako fragment:

  • token: Token jest zwracany jako token sieci Web JSON (JWT) podpisany cyfrowo przez klucz prywatny portalu.
  • stan: Jeśli parametr stanu znajduje się w żądaniu, ta sama wartość powinna zostać wyświetlona w odpowiedzi. Aplikacja powinna sprawdzić, czy wartości stanu w żądaniu i odpowiedzi są takie same.
  • expires_in: Czas, przez który token dostępu jest ważny (w sekundach).

Na przykład pomyślna odpowiedź wygląda następująco:

GET https://aadb2cplayground.azurewebsites.net/#token=eyJ0eXAiOiJKV1QiLCJhbGciOI1NisIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q&expires_in=3599&state=arbitrary_data_you_sent_earlier

Odpowiedź błędna

Błąd punkcie końcowym Autoryzuj jest zwracany jako dokument JSON z następującymi wartościami:

  • Identyfikator błędu: Unikatowy identyfikator błędu.
  • Komunikat o błędzie: Określony komunikat o błędzie, który umożliwia zidentyfikowanie głównej przyczyny błędu uwierzytelniania.
  • Identyfikator skojarzenia: Identyfikator GUID, który jest używany do debugowania. Jeśli zostało włączone rejestrowanie diagnostyczne, identyfikator skojarzenia będzie się znajdował w dziennikach błędów serwera.
  • Sygnatura czasowa: Data i godzina wygenerowania błędu.

Komunikat o błędzie jest wyświetlany w języku domyślnym zalogowanego użytkownika. Jeśli użytkownik nie jest zalogowany, strona logowania jest wyświetlana, aby użytkownik się zalogował. Na przykład komunikat o błędzie wygląda następująco:

{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }

Sprawdź poprawność tokenu identyfikatora

Samo pobranie tokenu identyfikator nie wystarcza do uwierzytelnienia użytkownika; należy również sprawdzić poprawność podpisu tokenu i sprawdzić oświadczenia w tokenie w oparciu o potrzeby aplikacji. Punkt końcowy tekenu publicznego zawiera klucz publiczny portalu, który może służyć do sprawdzania poprawności podpisu tokenu zapewnianego przez portal. Adres URL punktu końcowego tokenu publicznego to: <portal_url>/_services/auth/publickey.

Włączanie lub wyłączanie niejawnego przepływu udzielania uprawnień

Domyślnie niejawny przepływ udzielanie uprawnień jest włączony. Jeśli chcesz wyłączyć niejawny przepływ udzielenia uprawnień, ustaw wartość witryny Connector/ImplicitGrantFlowEnabled na Fałsz.

Jeśli to ustawienie witryny nie jest dostępne w Twoim portalu, musisz utworzyć nowe ustawienie witryny z odpowiednią wartością.

Konfigurowanie ważności tokenu

Domyślnie token jest ważny przez 15 minut. Jeśli chcesz zmienić ważność tokenu, ustaw wartość witryny ImplicitGrantFlow/TokenExpirationTime na żądaną wartość. Wartość musi być określona w sekundach. Maksymalną wartością może być 1 godzina, wartość minimalna to 1 minuta. Jeśli została określona nieprawidłowa wartość (na przykład znaki alfanumeryczne), zostanie użyta wartość domyślna wynosząca 15 minut. Jeśli określono wartość większą niż wartość maksymalna lub mniejszą niż wartość minimalna, domyślnie będą używane odpowiednio wartości minimalna i maksymalna.

Na przykład, aby ustawić ważności tokenu na 30 minut, ustaw wartość witryny ImplicitGrantFlow/TokenExpirationTime na 1800. Aby ustawić ważności tokenu na 1 godzinę, ustaw wartość witryny ImplicitGrantFlow/TokenExpirationTime na 3600.

Zarejestruj identyfikator klienta dla niejawnego przepływu udzielania uprawnień

Należy zarejestrować identyfikator klienta z portalem, dla którego przepływ jest dozwolony. Aby można było zarejestrować identyfikator klienta, należy utworzyć następujące ustawienia witryny:

Ustawienie witryny Value
ImplicitGrantFlow/RegisteredClientId Ważna wartości identyfikatora klienta, które są dozwolone dla tego portalu. Wartości należy oddzielać średnikami i mogą one zawierać znaki alfanumeryczne oraz łączniki. Maksymalna długość wynosi 36 znaków.
ImplicitGrantFlow/{ClientId}/RedirectUri Prawidłowe identyfikatory URI przekierowania dozwolone dla identyfikatora klienta. Wartości muszą być oddzielone średnikami. Podany adres URL musi być prawidłową stroną sieci Web portalu.

Przykładowy kod

Poniższego przykładowego kodu można użyć w celu rozpoczęcia korzystania z niejawnego przepływu w protokole OAuth 2.0 z interfejsami API portali Power Apps.

Używanie tokenu Portal OAuth z zewnętrznym interfejsem API sieci Web

Ten przykład jest projektem opartym o ASP.NET i służy do sprawdzania poprawności tokenu ID wydawanego przez portale Power Apps. Cały przykład można znaleźć tutaj: Używanie tokenu Portal OAuth z zewnętrznym interfejsem API sieci Web.

Przykład punktu końcowego Token

W tym przykładzie pokazano, jak użyć funkcji getAuthenticationToken w celu pobrania tokenu identyfikatora przy użyciu punktu końcowego tokenu w portalach Power Apps. Ten przykład można znaleźć tutaj: Przykład punktu końcowego Token

Uwaga

Czy możesz poinformować nas o preferencjach dotyczących języka dokumentacji? Wypełnij krótką ankietę. (zauważ, że ta ankieta jest po angielsku)

Ankieta zajmie około siedmiu minut. Nie są zbierane żadne dane osobowe (oświadczenie o ochronie prywatności).