2012-10-30 15 views
17

Jestem dość nowym interfejsem API REST i zdaję sobie sprawę, że opublikowano już sporo pytań. Jednak ich zbadanie sprawiło, że bardziej nie wiedziałem, jak sobie z tym poradzić.Zabezpieczanie interfejsu REST API i Slim Framework

Utworzyłem interfejs REST API za pomocą Slim Framework, którego używam do przesyłania danych. Nie będę używać logowań użytkownika ani uwierzytelniania, więc uważam, że to zabezpieczyć. Potrzebuję tylko systemu, który używa klucza publicznego i klucza prywatnego, ale nie jestem pewien.

Jeśli ktoś ma wgląd w prawidłowy/najbezpieczniejszy sposób, aby to zrobić, lub wszelkie tutoriale/zasoby, które byłyby świetne. Każda pomoc jest doceniana.

+0

Wgląd na najbezpieczniejszy sposób ... zrobić * co *? Co próbujesz osiągnąć? Chcesz "to zabezpieczyć". Co to znaczy? Jaki jest cel? Czy chcesz zezwolić na dostęp tylko zaufanym użytkownikom? Czy chcesz szyfrować dane podczas przesyłania? Czy chcesz zezwolić na tylko jedno użycie na klienta? itp...Powiedziałeś, że chcesz "zabezpieczyć to", ale nie chcesz używać uwierzytelniania. Musisz być bardziej konkretny, co oznacza "zabezpieczyć to". – Cheeso

+1

Interfejs API będzie wywoływany z różnych witryn, ale użytkownik nie będzie miał pojęcia, że ​​istnieje, ponieważ jest po prostu używany do pobierania danych z zaplecza. Moim celem jest bezpieczne wywołanie tego api z kodu, a także szyfrowanie danych. – Drew

Odpowiedz

15

Możesz użyć protokołu SSL do szyfrowania danych podczas przesyłania.

Ale SSL to tylko szyfrowanie; po stronie serwera ssl nie uwierzytelnia klienta ani autoryzacji. Możesz zadzwonić na autoryzację jako odpowiedź na pytanie czy osoba dzwoniąca może zrobić to, o co prosi?. Uwierzytelnienie ustalanie tożsamości osoby dzwoniącej lub uwierzytelnianie jest zwykle koniecznym pierwszym krokiem do uzyskania autoryzacji. Czasami nie potrzebujesz "całej tożsamości" - musisz tylko ustalić konkretny aspekt. Na przykład automatyczna brama toaletowa nie musiałaby wiedzieć, kim jesteś, ale tylko jeśli byłeś mężczyzną lub kobietą w celu ustalenia tożsamości. W ten sam sposób niektóre usługi nie dbają o to, kim jesteś; Pozwalają na dostęp, jeśli dzwonisz z określonej sieci (biała lista adresów IP) lub jeśli masz przy sobie specjalny token.

aby serwer odróżnić autoryzowanych i nieautoryzowanych połączeń masz kilka opcji:

  • białej listy IP. Jeśli znasz adres IP aplikacji lub agenta, który zadzwoni do Twojej usługi, możesz to określić w implementacji usługi. Usługa może sprawdzić adres IP przychodzących żądań i odrzucić te, które nie znajdują się na białej liście. Jest to rodzaj "niejawnej" autoryzacji opartej na adresie dzwoniącego.

  • tajny token, który aplikacja zapewnia w każdym połączeniu. Powiedziałeś, że nie chcesz uwierzytelniania, ale jest to forma uwierzytelniania. Można to nazwać "tokenem okaziciela". Każdy, kto nosi ten token, uzyskuje autoryzację. Na swoim serwerze należy sprawdzić wartość tokenu i odrzucić wszystkie połączenia, które nie są zgodne z dobrze znaną wartością. Działa to podobnie do białej listy adresów IP, z wyjątkiem tego, że token jest jawnie przekazywany i nie ma żadnego związku z adresem sieciowym.

  • para tokenów + kluczy. Jest to jak nazwa użytkownika/hasło, ale można go użyć do uwierzytelnienia aplikacji. Użyj tego, aby podać tożsamość samej aplikacji. Sprawdź po stronie usługi jak powyżej.

  • nazwa użytkownika/hasło. Aby uwierzytelnić użytkownika aplikacji.

Można je łączyć w celu uzyskania pożądanego rozwiązania. Innymi słowy, żądanie klienta musi być z prawej strony, które adresuję i musi mieć token/klucz dla aplikacji oraz nazwę użytkownika/hasło dla użytkownika, aby mogło być uznane za "autoryzowane".

+0

Dzięki Cheeso za doskonałą odpowiedź. Zajmie mi to trochę czasu, aby wdrożyć wszystkie te elementy, ale to zdecydowanie zepchnęło mnie na drugą stronę. – Drew

+0

@Cheeso, ładne podsumowanie. Czy masz jakieś przykłady implementacji, pomysły na rozpoczęcie z własną implementacją, biorąc pod uwagę, że podstawowy interfejs REST API działa poprawnie ... –

Powiązane problemy