Żądania HTTP zawierają nagłówki takie jak User-Agent lub Content-Type. Oprócz nagłówków dołączonych przez
przeglądarek, aplikacje na Androida mogą dodawać dodatkowe nagłówki, np. Cookie czy Referrer,
EXTRA_HEADERS
Zamiar dodatkowe. Ze względów bezpieczeństwa Chrome filtruje niektóre dodatkowe nagłówki
w zależności od sposobu i miejsca uruchomienia intencji.
Żądania między domenami wymagają dodatkowej warstwy zabezpieczeń, ponieważ klient i serwer nie należą do tej samej strony. W tym przewodniku omawiamy uruchamianie takich próśb w Chrome niestandardowe karty, czyli intencje uruchamiane z poziomu aplikacji, które otwierają adres URL na karcie przeglądarki. Do Chrome 83 programiści mogli dodawać dowolne nagłówki przy uruchamianiu karty niestandardowej. Chrome (od wersji 83) zaczęto filtrować wszystkie nagłówki z innych domen z wyjątkiem ApprovalList, ponieważ nagłówki, które nie zostały zatwierdzone, stwarza zagrożenie dla bezpieczeństwa. Od Chrome 86 można dołączać nagłówki spoza listy zatwierdzonych do żądań z innych domen, jeśli serwer i klient są powiązane za pomocą linku do zasobu cyfrowego. Podsumowanie tego zachowania znajdziesz w tej tabeli:
Wersja Chrome | Nagłówki CORS są dozwolone |
---|---|
przed Chrome 83 | lista zatwierdzonych, niezatwierdzona |
Od Chrome 83 do Chrome 85 | lista zatwierdzonych |
od Chrome 86 | znajduje się na liście zatwierdzonych i niezaakceptowanych, gdy skonfigurowano połączenie z zasobami cyfrowymi |
Tabela 1. Filtrowanie nagłówków CORS, które nie zostały zatwierdzone.
Z tego artykułu dowiesz się, jak skonfigurować zweryfikowane połączenie między serwerem a klientem i użyć tego wysyłanie nagłówków HTTP z listy zatwierdzonych oraz tych, które nie zostały zatwierdzone. Możesz przejść do Dodawanie dodatkowych nagłówków do intencji związanych z kartami niestandardowymi w kodzie.
Tło
zatwierdzone i niezatwierdzone nagłówki żądań CORS
Udostępnianie zasobów między pochodzeniem (CORS) umożliwia aplikacji internetowej z jednego źródła żądania w zasobach różnego pochodzenia. Lista nagłówków CORS-AcceptedList jest przechowywana w: Standardowy HTML. Przykładowe zatwierdzone nagłówki znajdziesz w następnej tabeli:
Header | Opis |
---|---|
accept-language | Reklamuje język naturalny, którym klient rozumie |
content-language | opisuje język przeznaczony dla obecnych odbiorców. |
content-type, | wskazuje typ mediów zasobu |
Tabela 2. Przykładowe zatwierdzone nagłówki CORS.
Nagłówki zatwierdzone na liście są uznawane za bezpieczne, ponieważ nie zawierają poufnych informacji informacje o użytkownikach, przez co jest mało prawdopodobne, aby powodowały one wykonywanie przez serwer potencjalnie szkodliwych operacji.
Przykłady nagłówków, które nie zostały zatwierdzone, znajdziesz w tej tabeli:
Header | Opis |
---|---|
bearer-token | uwierzytelnia klienta na serwerze |
pochodzenie | wskazuje źródło żądania |
ciastko | zawiera pliki cookie ustawione przez serwer |
Tabela 3. Przykładowe, niezatwierdzone nagłówki CORS.
Standard HTML i serwery odradzają dołączanie do żądań CORS nagłówków niezatwierdzonych przez zatwierdzenie zakłada, że żądania z innych domen zawierają tylko nagłówki z listy zatwierdzonych. Wysyłam nagłówki, które nie znajdują się na liście zatwierdzonych z domen z innych domen pozwalałoby złośliwym aplikacjom innych firm tworzyć nagłówki, które niewłaściwie wykorzystują pliki cookie, które Chrome (lub inna przeglądarka) zapisuje i dołącza do żądań. Pliki cookie mogą do uwierzytelniania złośliwych transakcji z serwerem, które w innym przypadku nie byłyby możliwe.
Dołączanie zatwierdzonych nagłówków CORS do żądań kart niestandardowych
Karty niestandardowe to specjalny sposób uruchamiania stron internetowych w spersonalizowanej karcie przeglądarki. Karta niestandardowa
intencje można tworzyć za pomocą funkcji CustomTabsIntent.Builder()
. Do tych plików możesz też dołączyć nagłówki,
za pomocą intencji Bundle
z flagą Browser.EXTRA_HEADERS
:
CustomTabsIntent intent = new CustomTabsIntent.Builder(session).build();
Bundle headers = new Bundle();
headers.putString("bearer-token", "Some token");
headers.putString("redirect-url", "Some redirect url");
intent.intent.putExtra(Browser.EXTRA_HEADERS, headers);
intent.launchUrl(Activity.this, Uri.parse("http://www.google.com"));
Zawsze możemy dołączać zatwierdzone nagłówki do żądań CORS kart niestandardowych. Filtry Chrome domyślne nagłówki, które nie zostały zatwierdzone. Chociaż inne przeglądarki mogą działać inaczej, deweloperzy powinni się spodziewać, że nagłówki, które nie zostały zatwierdzone, będą ogólnie blokowane.
Obsługiwanym sposobem umieszczania nagłówków, które nie znajdują się na liście zatwierdzonych, na kartach niestandardowych jest sprawdzenie między domenami za pomocą cyfrowego linku dostępu. W następnej sekcji dowiesz się, jak i uruchom intencję Tabele niestandardowe z wymaganymi nagłówkami.
Dodawanie dodatkowych nagłówków do intencji związanych z kartami niestandardowymi
Konfigurowanie linków do zasobów cyfrowych
Aby zezwolić na przekazywanie przez intencje karty niestandardowej nagłówków, które nie zostały zatwierdzone, musisz ustawić link do zasobu cyfrowego między Androidem a aplikacją internetową w celu potwierdzenia, że autor jest właścicielem obu aplikacji.
Aby skonfigurować link do zasobu cyfrowego, postępuj zgodnie z oficjalnym przewodnikiem. Dla relacji link użyj „delegate_permission/common.use_as_origin”, który wskazuje, że obie aplikacje należą do tej samej domeny .
Utwórz intencję niestandardową z dodatkowymi nagłówkami
Istnieje wiele sposobów tworzenia intencji dotyczących kart niestandardowych. Możesz użyć kreatora w AndroidX przez dodanie biblioteki do zależności kompilacji:
MULTI_LINE_CODE_PLACEHOLDER_1
Utwórz intencję i dodaj dodatkowe nagłówki:
MULTI_LINE_CODE_PLACEHOLDER_2
Skonfiguruj połączenie z kartami niestandardowymi, aby zweryfikować link do zasobu
Połączenie z kartami niestandardowymi jest używane do konfigurowania CustomTabsSession
między aplikacją a kartami
Chrome. Potrzebujemy sesji, aby sprawdzić, czy aplikacja i aplikacja internetowa należą do tego samego źródła.
Weryfikacja zakończy się prawidłowo tylko wtedy, gdy linki do zasobów cyfrowych zostały prawidłowo skonfigurowane.
Warto zadzwonić pod numer CustomTabsClient.warmup()
. Pozwala aplikacji przeglądarki
można wstępnie zainicjować w tle i przyspieszyć proces otwierania adresu URL.
MULTI_LINE_CODE_PLACEHOLDER_3
Skonfiguruj wywołanie zwrotne, które po weryfikacji uruchamia intencję
Element CustomTabsCallback
został przekazany do sesji. Skonfigurujemy
onRelationshipValidationResult()
, aby uruchomić wcześniej utworzony CustomTabsIntent
po pomyślnej weryfikacji punktu początkowego.
MULTI_LINE_CODE_PLACEHOLDER_4
Powiąż połączenie z usługą kart niestandardowych
Powiązanie usługi uruchamia usługę i onCustomTabsServiceConnected()
połączenia
który zostanie ostatecznie wywołany. Nie zapomnij prawidłowo usunąć powiązania usługi. Powiązanie i usunięcie powiązania
jest zwykle wykonywana w metodach cyklu życia aktywności onStart()
i onStop()
.
// Bind the custom tabs service connection.
// Call this in onStart()
CustomTabsClient.bindCustomTabsService(this,
CustomTabsClient.getPackageName(MainActivity.this, null), connection);
// …
// Unbind the custom tabs service.
// Call this in onStop().
unbindService(connection);
Kod aplikacji w wersji demonstracyjnej
Więcej informacji o usłudze kart niestandardowych znajdziesz tutaj. Zobacz android-browser-helper repozytorium GitHub na działającą przykładową aplikację.
Podsumowanie
W tym przewodniku pokazujemy, jak dodawać dowolne nagłówki do żądań CORS kart niestandardowych. nagłówki z listy zatwierdzonych można dołączać do każdego żądania CORS kart niestandardowych. Nagłówki, które nie zostały zatwierdzone: są ogólnie uznawane za niebezpieczne w żądaniach CORS, a Chrome domyślnie je odfiltrowuje. Załączam je dozwolone tylko w przypadku klientów i serwerów tego samego pochodzenia, zweryfikowanych za pomocą linku do zasobu cyfrowego.