Praca z tokenami OAuth w uwierzytelnianiu usługi aplikacja systemu Azure Service
W tym artykule pokazano, jak pracować z tokenami OAuth podczas korzystania z wbudowanego uwierzytelniania i autoryzacji w usłudze App Service.
Pobieranie tokenów w kodzie aplikacji
Z poziomu kodu serwera tokeny specyficzne dla dostawcy są wstrzykiwane do nagłówka żądania, dzięki czemu można łatwo uzyskać do nich dostęp. W poniższej tabeli przedstawiono możliwe nazwy nagłówków tokenu:
Dostawca | Nazwy nagłówków |
---|---|
Microsoft Entra | X-MS-TOKEN-AAD-ID-TOKEN X-MS-TOKEN-AAD-ACCESS-TOKEN X-MS-TOKEN-AAD-EXPIRES-ON X-MS-TOKEN-AAD-REFRESH-TOKEN |
Facebook Token | X-MS-TOKEN-FACEBOOK-ACCESS-TOKEN X-MS-TOKEN-FACEBOOK-EXPIRES-ON |
X-MS-TOKEN-GOOGLE-ID-TOKEN X-MS-TOKEN-GOOGLE-ACCESS-TOKEN X-MS-TOKEN-GOOGLE-EXPIRES-ON X-MS-TOKEN-GOOGLE-REFRESH-TOKEN |
|
X | X-MS-TOKEN-TWITTER-ACCESS-TOKEN X-MS-TOKEN-TWITTER-ACCESS-TOKEN-SECRET |
Uwaga
Różne struktury językowe mogą przedstawiać te nagłówki do kodu aplikacji w różnych formatach, takich jak małe litery lub wielkość tytułu.
Z poziomu kodu klienta (takiego jak aplikacja mobilna lub w przeglądarce JavaScript) wyślij żądanie HTTP GET
do /.auth/me
(magazyn tokenów musi być włączony). Zwrócony kod JSON zawiera tokeny specyficzne dla dostawcy.
Uwaga
Tokeny dostępu służą do uzyskiwania dostępu do zasobów dostawcy, dlatego są obecne tylko w przypadku skonfigurowania dostawcy przy użyciu wpisu tajnego klienta. Aby zobaczyć, jak uzyskać tokeny odświeżania, zobacz Odświeżanie tokenów dostępu.
Odświeżanie tokenów uwierzytelniania
Gdy token dostępu dostawcy (a nie token sesji) wygaśnie, musisz ponownie uwierzytelnić użytkownika przed ponownym użyciem tego tokenu. Możesz uniknąć wygaśnięcia tokenu, wykonując GET
wywołanie /.auth/refresh
punktu końcowego aplikacji. Po wywołaniu usługa App Service automatycznie odświeża tokeny dostępu w magazynie tokenów dla uwierzytelnioowanego użytkownika. Kolejne żądania dotyczące tokenów przez kod aplikacji pobierają odświeżone tokeny. Jednak aby odświeżanie tokenu działało, magazyn tokenów musi zawierać tokeny odświeżania dla dostawcy . Sposób uzyskiwania tokenów odświeżania jest udokumentowany przez każdego dostawcę, ale poniższa lista to krótkie podsumowanie:
Google: dołącz
access_type=offline
parametr ciągu zapytania do wywołania/.auth/login/google
interfejsu API. Aby uzyskać więcej informacji, zobacz Tokeny odświeżania Google.Facebook: nie udostępnia tokenów odświeżania. Długotrwałe tokeny wygasają za 60 dni (zobacz Wygaśnięcie i rozszerzenie tokenów dostępu w serwisie Facebook).
X: Tokeny dostępu nie wygasają (zobacz często zadawane pytania dotyczące protokołu OAuth).
Microsoft: W https://resources.azure.comprogramie wykonaj następujące czynności:
W górnej części strony wybierz pozycję Odczyt/Zapis.
W lewej przeglądarce przejdź do pozycji subskrypcje<>subscription_name>>resourceGroups><resource_group_name>>dostawców>Microsoft.Web>app_name><>>config>authsettingsV2.
Kliknij przycisk Edytuj.
Zmodyfikuj następującą właściwość.
"identityProviders": { "azureActiveDirectory": { "login": { "loginParameters": ["scope=openid profile email offline_access"] } } }
Kliknij pozycję Umieść.
Uwaga
Zakres, który daje token odświeżania, jest offline_access. Zobacz, jak jest on używany w artykule Samouczek: uwierzytelnianie i autoryzowanie użytkowników końcowych w usłudze aplikacja systemu Azure. Pozostałe zakresy są domyślnie żądane przez usługę App Service. Aby uzyskać informacje na temat tych zakresów domyślnych, zobacz OpenID Connect Scopes (Zakresy połączeń OpenID Connect).
Po skonfigurowaniu dostawcy można znaleźć token odświeżania i czas wygaśnięcia tokenu dostępu w magazynie tokenów.
Aby odświeżyć token dostępu w dowolnym momencie, wystarczy wywołać /.auth/refresh
metodę w dowolnym języku. Poniższy fragment kodu używa trybu jQuery do odświeżania tokenów dostępu z klienta JavaScript.
function refreshTokens() {
let refreshUrl = "/.auth/refresh";
$.ajax(refreshUrl) .done(function() {
console.log("Token refresh completed successfully.");
}) .fail(function() {
console.log("Token refresh failed. See application logs for details.");
});
}
Jeśli użytkownik odwoła uprawnienia przyznane aplikacji, wywołanie metody /.auth/me
może zakończyć się niepowodzeniem z odpowiedzią 403 Forbidden
. Aby zdiagnozować błędy, sprawdź dzienniki aplikacji, aby uzyskać szczegółowe informacje.
Przedłużanie okresu prolongaty wygaśnięcia tokenu sesji
Uwierzytelniona sesja wygasa po 8 godzinach. Po wygaśnięciu uwierzytelnionej sesji okres prolongaty wynosi domyślnie 72-godzinny. W tym okresie prolongaty możesz odświeżyć token sesji za pomocą usługi App Service bez ponownego uwierzytelnienia użytkownika. Możesz po prostu wywołać /.auth/refresh
, gdy token sesji stanie się nieprawidłowy i nie musisz samodzielnie śledzić wygaśnięcia tokenu. Po upływie 72-godzinnego okresu prolongaty użytkownik musi zalogować się ponownie, aby uzyskać prawidłowy token sesji.
Jeśli 72 godziny nie jest wystarczająco dużo czasu, możesz przedłużyć to okno wygasania. Przedłużenie wygaśnięcia w długim okresie może mieć znaczące konsekwencje dla bezpieczeństwa (na przykład w przypadku wycieku lub kradzieży tokenu uwierzytelniania). Dlatego należy pozostawić go na wartość domyślną 72 godziny lub ustawić okres rozszerzenia na najmniejszą wartość.
Aby rozszerzyć domyślne okno wygasania, uruchom następujące polecenie w usłudze Cloud Shell.
az webapp auth update --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>
Uwaga
Okres prolongaty dotyczy tylko sesji uwierzytelnionej w usłudze App Service, a nie tokenów od dostawców tożsamości. Nie ma okresu prolongaty dla wygasłych tokenów dostawcy.