Uwierzytelnianie

Jest to funkcja umożliwiająca ochronę danego strumienia, która wymaga od użytkownika przejścia specjalnej procedury. Przy pomocy tego mechanizmu można tworzyć usługi płatnego odsłuchu lub zdefiniować pewne kryteria dotyczące filtrowania użytkowników. Ten rozdział opisuje podstawy konfiguracji i wykorzystania funkcjonalności uwierzytelniania.

Aby zdefiniować uwierzytelnianie dla danego strumienia, w sekcji <mount> należy zdefiniować szereg dodatkowych parametrów. Oznacza to, że autentyfikację można stosować dla dowolnego strumienia, którego źródłem jest program nadawczy lub inny strumień dostarczony z odrębnego serwera.

W procesie uwierzytelniania mogą zostać wykorzystane następujące metody:

  • HTPASSWD – plik tekstowy z nazwami użytkowników i hasłami
  • URL – zapytanie do skryptu (np. PHP)

Uwierzytelnianie dla określonego w konfiguracji strumienia może zostać zastosowane zarówno do standardowego strumienia nadawanego prosto ze źródła, strumienia pochodzącego z innego serwera jak też do statycznego pliku zdefiniowanego jako mountpoint. Ustawienia mają również zastosowanie do plików wprowadzających (intro file) i strumieni zapasowych.

Uwierzytelnianie metodą HTPASSWD

W celu uaktywnienia, należy zdefiniować potrzebne parametry. Należy więc dopisać nową sekcję <mount> w pliku konfiguracyjnym. Poniżej przykład:

<mount>
   <mount-name>/example.ogg</mount-name>
   <authentication type="htpasswd">
      <option name="filename" value="myauth"/>
      <option name="allow_duplicate_users" value="0"/>
   </authentication>
</mount>

Aby włączyć uwierzytelnianie, należy zdefiniować przynajmniej dwa parametry: <mount-name> i <authentication>. Parametr mount-name definiuje nazwę strumienia używaną przez klienta źródłowego. Każda metoda autentyfikacji posiada pewną liczbę wymaganych parametrów. W metodzie HTTPASSWD należy zdefiniować dodatkową opcję filename, precyzującą nazwę pliku w którym mają być przechowywane nazwy użytkowników i hasła. Plik nie musi istnieć (i prawdopodobnie nie będzie, jeśli miałby być użyty po raz pierwszy) – w razie potrzeby zostanie utworzony. Icecast posiada zaimplementowaną obsługę zarządzania danymi użytkowników poprzez sieciowy interfejs administracyjny. Jeśli dla drugiej opcji, allow_duplicate_users, zostanie zdefiniowana wartość 0, serwer będzie odrzucać połączenie, jeśli odbiorca poda dane, których użył inny odbiorca. Ustawiając wartość 1, umożliwimy wielokrotne (jednoczesne) podłączanie do danego strumienia przy pomocy jednej nazwy użytkownika i hasła. Nie ma możliwości ustawienia maksymalnej liczby połączeń dla jednego użytkownika.

Można zdefiniować uwierzytelnianie dla poszczególnych strumieni przy jednoczesnej rezygnacji z tego mechanizmu dla innych. Tylko strumienie wyszczególnione w pliku konfiguracyjnym mogą zostać przystosowane do obsługi autentyfikacji.

Wprowadzanie danych użytkowników i haseł

Po wprowadzeniu odpowiednich wpisów do pliku konfiguracyjnego należy przyłączyć klienta źródłowego przy użyciu odpowiedniej nazwy strumienia. W celu zdefiniowania użytkowników dla strumienia, należy użyć sieciowego interfejsu administracyjnego. Aby rozpocząć, należy wywołać zasób http://[adres]:[port]/admin/stats.xsl – jeśli wszystko zostało poprawnie skonfigurowane, powinna pojawić się strona podobna do tej:

icecast_auth_main.jpg

Każda sekcja skonfigurowana do uwierzytelniania zostanie oznaczona specjalnym symbolem (w starszych wersjach będzie to czerwony klucz, w najnowszej po prostu zmienia się kolor kłódki – przyp. tłum.). Należy zauważyć, iż powyższa strona wyświetli tylko podłączone źródła nie zdefiniowane jako ukryte.

Aby dodać lub usunąć użytkownika, należy kliknąć link Manage Authentication. Pojawi się strona podobna do poniższej:

icecast_auth_managing.jpg

Strona wyświetla listę użytkowników, którzy są uprawnieni do odbioru danego strumienia. Aby dodać użytkownika, należy w odpowiednie pola wpisać nazwę użytkownika i hasło, następnie kliknąć link Add New User. Nazwy użytkowników nie mogą się powtarzać w obrębie tego samego strumienia, jednak nie ma ograniczeń przy stosowaniu haseł. Użytkownika można usunąć poprzez kliknięcie odpowiedniego linku Delete.(do różnych strumieni można przypisać ten sam plik z hasłami, można w ten sposób trzymać te dany w jednym miejscu; należy pamiętać, że w przypadku zdefiniowania wartości 0 dla parametru <allow_duplicate_users /> jeden odbiorca i tak będzie mógł podłączyć się do dwóch różnych strumieni, ale nie do tego samego – przyp. tłum.)

Podsumowanie

Po dodaniu uprawnionych odbiorców i poprawnym skonfigurowaniu serwera, w celu odsłuchu/odbioru danego strumienia należy się zalogować – na przykład poprzez przygotowany formularz (http://[adres]:[port]/auth.xsl).

icecast_auth_prompt.jpg

Po poprawnym zalogowaniu skrypt zwróci odpowiednio przygotowany plik playlisty – to powinno wystarczyć do prawidłowego otwarcia domyślnego odtwarzacza i rozpoczęcia odtwarzania.

Uwierzytelnianie poprzez wywołanie adresu

Ten sposób wymusza, aby serwer Icecast wysyłał określone zapytanie gdy użytkownik próbuje się podłączyć po czym sprawdza nagłówki z odpowiedzią. Jeśli odesłany zostanie odpowiedni nagłówek zwrotny, użytkownikowi zostaje przyznany dostęp do odbioru. Jeśli nagłówek się nie zgadza, zostaje zwrócony komunikat błędu.

Zdefiniowane adresy powinny wywoływać pewne skrypty (np. PHP). Wszystko co skrypty muszą wykonać, to przyjęcie informacji w trybie POST i wysłanie nagłówków zwrotnych. Do obsługi tych zapytań użyta jest biblioteka libcurl, można więc używać szyfrowanych połączeń HTTPS.

Zmienna zazwyczaj reprezentująca przeglądarkę (useragent) jest zamieniana w każdym zapytaniu curl na wersję serwera Icecast. Zawartość nagłówków zwrotnych powinna zależeć od tego, czy odbiorca ma być uprawiony do odbioru strumienia. W przypadku odrzucenia, nagłówek:

icecast-auth-message: reason

…powinien zostać umieszczony w pliku dziennika (log).

Aby używać tego trybu uwierzytelniania, należy dopisać odpowiedni parametr w sekcji <mount />. Poniższy przykład przedstawia dostępne opcje:

<mount>
   <mount-name>/example.ogg</mount-name>
   <authentication type="url">
      <option name="mount_add" value="http://myauthserver.com/stream_start.php"/>
      <option name="mount_remove" value="http://myauthserver.com/stream_end.php"/>
      <option name="listener_add" value="http://myauthserver.com/listener_joined.php"/>
      <option name="listener_remove" value="http://myauthserver.com/listener_left.php"/>
      <option name="username" value="user"/>
      <option name="password" value="pass"/>
      <option name="auth_header" value="icecast-auth-user: 1"/>
      <option name="timelimit_header" value="icecast-auth-timelimit:"/>
   </authentication>
</mount>

Parametry zostały bardziej szczegółowo opisane poniżej. Nie każdy musi być użyty – jeśli jednak zostanie zdefiniowany, każdy parametr przesyłany metodą POST będzie zaszyfrowany.


mount_add

To zapytanie informuje serwer uwierzytelniający, że transmisja poprzez określony strumień została rozpoczęta. Nie są przekazywane żadne informacje o użytkownikach, ale może to być użyte do zdefiniowania pewnych szczegółów, które serwer może przechowywać.

Szczegóły zapytania POST:

action=mount_add&mount=/live&server=myserver.com&port=8000

Uwzględniana jest nazwa serwera (<hostname>) i mountpoint, przez który rozpoczęła się transmisja.


mount_remove

To zapytanie informuje serwer uwierzytelniający, że transmisja została zakończona. Tutaj również nie są przekazywane żadne dane nt. użytkowników.

Szczegóły zapytania POST:

action=mount_remove&mount=/live&server=myserver.com&port=8000

Tak jak w poprzednim zapytaniu, przekazywane są informacje nt. nazwy (adresu) hosta i odpowiedniego strumienia.


listener_add

Zazwyczaj najczęściej używane zapytanie. Przy próbie podłączenia się odbiorcy, zanim cokolwiek zostanie odesłane, przetwarzane jest to zapytanie. Domyślną akcją jest odrzucanie użytkownika, dopóki skrypt nie odeśle nagłówka zwrotnego, zdefiniowanego parametrem header.

Szczegóły zapytania POST:

action=listener_add&server=myserver.com&port=8000&client=1&mount=/live&user=&pass=&ip=127.0.0.1&agent="My%20player"

W tym zapytaniu przekazywanych jest więcej parametrów. client to unikalny identyfikator dla danego klienta; parametry user i pass mogą być puste, jednak jeśli użytkownik zastosował uwierzytelnianie HTTP to są definiowane poprzez ten mechanizm; ip to adres IP odbiorcy i agent to zazwyczaj nazwa odtwarzacza odbiorcy.

Nazwa strumienia jest ustalana poprzez żądany URL wraz z dodatkowymi parametrami zapytania. Tak więc żądany zasób może wyglądać na przykład tak:

/stream.ogg&session=xyz

Należy pamiętać, że niektóre znaki są przetwarzane przez serwer (np. encje znakowe na ich odpowiedniki).


listener_remove

To zapytanie informuje o rozłączeniu odbiorcy.

Szczegóły zapytania POST:

action=listener_remove&server=myserver.com&port=8000&client=1&mount=/live&user=&pass=&duration=3600

Podobne do poprzedniego zapytania, z tą różnicą że dodany jest parametr informujący o czasie odbioru (podawanym w sekundach).


auth_header

Spodziewany nagłówek zwrotny który ma być przysłany przez skrypt uwierzytelniający po poprawnej weryfikacji. Domyślnie ustawiony na wartość:

icecast-auth-user: 1

…ale może to być cokolwiek, np.:

HTTP 200 OK

timelimit_header

Odbiorcy mogą być ograniczeni limitem czasu, który został im narzucony. Jeśli został wysłany niniejszy nagłówek, dany użytkownik zostanie rozłączony po upływie określonego tu czasu (podanego w sekundach).


Odtwarzacze a uwierzytelnianie

Nigdy nie była sporządzana lista odtwarzaczy obsługujących uwierzytelnianie. Wiele programów obsługuje podstawowe uwierzytelnianie HTTP. Najlepszymi przykładami są programy Winamp, Foobar2000 (Windows) i XMMS (Unix). Winamp/XMMS obsługuje również dodatkowe parametry w zapytaniach – inne odtwarzacze być może również.

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License