Pracuję nad systemem, który wykorzystuje oszczędności. Chciałbym, aby tożsamość klientów była sprawdzana, a operacje miały być ACLed. Czy Thrift zapewnia im wsparcie?Jak radzić sobie z uwierzytelnianiem i autoryzacją z oszczędzaniem?
Odpowiedz
Nie bezpośrednio. Jedynym sposobem, aby to zrobić, jest posiadanie metody uwierzytelniania, która tworzy (tymczasowy) klucz na serwerze, a następnie zmienia wszystkie metody tak, aby pierwszy argument był tym kluczem i wszystkie dodatkowo podnoszą nieuwierzytelniony błąd. Na przykład:
exception NotAuthorisedException {
1: string errorMessage,
}
exception AuthTimeoutException {
1: string errorMessage,
}
service MyAuthService {
string authenticate(1:string user, 2:string pass)
throws (1:NotAuthorisedException e),
string mymethod(1:string authstring, 2:string otherargs, ...)
throws (1:AuthTimeoutException e, ...),
}
Używamy tej metody i zapisać klucze do zabezpieczonej memcached przykład z timeout 30min klucze do utrzymać wszystko „żwawy”. Klienci, którzy otrzymają numer AuthTimeoutException
, mają ponownie wykonać autoryzację i ponowić próbę, a my mamy pewne reguły zapory, aby powstrzymać ataki typu brute force.
Zadania, takie jak autoryzacja i uprawnienia, nie są traktowane jako część środków zaradczych, głównie dlatego, że są one (zwykle) bardziej związane z logiką aplikacji niż z ogólną koncepcją RPC/serializacji. Jedyną rzeczą, którą Thrift wspiera teraz po wyjęciu z pudełka, jest TSASLTransport
. Nie mogę powiedzieć wiele na ten temat sam, po prostu dlatego, że nigdy nie czułem potrzeby korzystania z niego.
Inną opcją może być użycie THeaderTransport
, która niestety w momencie pisania jest realizowana tylko z C++. Dlatego jeśli planujesz używać go w innym języku, możesz zainwestować dodatkowe prace. Nie trzeba dodawać, że przyjmujemy składki ...
Trochę późno (chyba bardzo późno), ale kilka lat temu zmodyfikowałem kod źródłowy Thrift.
Właśnie przesłano zgłoszenie z poprawką do https://issues.apache.org/jira/browse/THRIFT-4221.
Spójrz na to. Zasadniczo propozycja polega na dodaniu haka "BeforeAction", który dokładnie to robi.
Przykład Golang generowane diff
+ // Called before any other action is called
+ BeforeAction(serviceName string, actionName string, args map[string]interface{}) (err error)
+ // Called if an action returned an error
+ ProcessError(err error) error
}
type MyServiceClient struct {
@@ -391,7 +395,12 @@ func (p *myServiceProcessorMyMethod) Process(seqId int32, iprot, oprot thrift.TP
result := MyServiceMyMethodResult{}
var retval string
var err2 error
- if retval, err2 = p.handler.MyMethod(args.AuthString, args.OtherArgs_); err2 != nil {
+ err2 = p.handler.BeforeAction("MyService", "MyMethod", map[string]interface{}{"AuthString": args.AuthString, "OtherArgs_": args.OtherArgs_})
+ if err2 == nil {
+ retval, err2 = p.handler.MyMethod(args.AuthString, args.OtherArgs_)
+ }
+ if err2 != nil {
+ err2 = p.handler.ProcessError(err2)
- 1. Jak radzić sobie z uwierzytelnianiem za pomocą HttpWebRequest.AllowAutoRedirect?
- 2. Jak radzić sobie z GooglePlayServicesRepairableException i GooglePlayServicesNotAvailableException
- 3. Jak radzić sobie z polimorfizmem z JSF2?
- 4. Jak radzić sobie z unique_ptr z SWIG
- 5. Jak radzić sobie z połączeniami z hgsubversion?
- 6. Jak radzić sobie z deserializacją z polimorfizmem?
- 7. Jak radzić sobie z podprojektami z autotoolami?
- 8. Jak radzić sobie z uwierzytelnianiem WCF dla aplikacji SilverLight 4 i WPF
- 9. Jak radzić sobie z Simultaneous javascript xmlhttpdquests?
- 10. Jak radzić sobie z org.apache.tomcat.util.threads.TaskQueue.take() hotspot?
- 11. Jak radzić sobie z Eclipse CDT + Cygwin?
- 12. Jak radzić sobie z przestrzenią nazw Haskell?
- 13. Jak radzić sobie z przepełnieniem w C
- 14. Jak radzić sobie z IOException w Iterable.forEach?
- 15. Jak radzić sobie z monstrualnymi działaniami Struts?
- 16. Jak radzić sobie z usługą RestClient :: ServerBrokeConnection
- 17. Jak radzić sobie z błędami pobierania JavaScript?
- 18. Jak radzić sobie z nieciągłością Git?
- 19. jak radzić sobie z unicode w mako?
- 20. Jak radzić sobie z danymi wynikowymi fetchxml?
- 21. Jak radzić sobie z StackOverflowError w Javie?
- 22. Jak radzić sobie z tym błędem git
- 23. Jak radzić sobie z IEnumerable w F #?
- 24. Jak radzić sobie z autorotacją w AVCaptureVideoPreviewLayer?
- 25. Jak radzić sobie z awarią AsyncTask
- 26. Jak radzić sobie z nieujemnymi modami?
- 27. Jak radzić sobie z błędem ETIMEDOUT?
- 28. Jak radzić sobie z wyjątkami REST?
- 29. swift - Jak radzić sobie z niezamkniętym wyjątkiem
- 30. gettext, jak radzić sobie z homonimami?
Wysyłasz haseł w postaci zwykłego tekstu na drucie? – JensG
@JensG Nie, chcesz wysłać hasło w zaszyfrowanym formacie i sprawdzić, czy zakodowany ciąg po stronie serwera. Bcrypt jest na to dobry, ponieważ ciąg wysyłany przez przewód może nie pasować dokładnie do zapisanego ciągu, ale gdy jest zaznaczony przy użyciu algorytmu bcrypt, może nadal być sprawdzany. –
W takim przypadku nie będziesz wysyłać czystych haseł tekstowych, ale jeśli atakujący będzie mógł odczytać zakodowane hasło, będzie mógł odtworzyć połączenie uwierzytelniające i uzyskać dostęp do twoich usług. – cjungel