2012-01-10 16 views
16

Web sunucumda vatansız bir güvenlik sağlamak için bunun create-session="stateless"'a dönüşmesinin sonunun olacağını umuyordum, ama öyle değil.create-session durum bilgisi olmayan kullanım

Bu değişiklikle, yay güvenliği çalışmadığı için (benim varsayımım) yay güvenliği oturumda hiçbir şey saklamıyor ve güvenli web isteklerine kimlik doğrulaması yapamıyor.

Bu durum bilgisi olmayan özelliğinden nasıl yararlanabilirim?

Henüz vatansız bir web uygulaması için durum bilgisi olmayan yaylı güvenliğin nasıl elde edileceğine ilişkin hiçbir örnek bulamıyorum.

Teşekkür ederiz!

cevap

18

Tamamen güvenliksiz bir güvenliği olan bir Spring tabanlı web sunucum var ve bu şekilde çalışmasını sağlamanın tek yolu oturum oluşturma işlemini tamamen devre dışı bırakmaktır (create-session="never" ile). Bu, her isteğiyle yeniden kimlik doğrulamayı zorlar. Bu nedenle, web sunucusunu, özellikle karmaşık bir anlaşma gerektirmeyen HTTP Tabip Auth veya Digest Auth (tabii ki HTTPS üzerinden) kullanacak şekilde yapılandırmak isteyeceksiniz. tabanlı oturum açma ve OAuth hem , bir oturum için kimlik doğrulaması bağlamında çok daha karmaşık bir işlem olduğundan, gerektirir. Bu, <security:http> öğenizin içinde <security:http-basic /> gibi bir öğe koymak istediğiniz anlamına gelir.

(Bu şekilde yapmanın avantajı, çerez/oturum yönetimi yapmak zorunda olmadıkları için son derece basit istemci kitaplıklarına olanak sağlamasıdır. Maliyet, bazı işleme yüküdür - kullanıcının ne gibi roller oynadığı Her talebe - ve kimlik doğrulama mekanizmalarının kullanabileceği bazı sınırlamalara - yeniden katılmanız gerekir.)

+1

Cevabınız için teşekkür ederiz. Daha önce temel ve sindirmeyi denedim, ancak web sunucumdan 'çıkış' yapamadığımdan ve tarayıcıyı yeniden başlatmadan yeni bir kimlik bilgisi girmekten çok rahatsız hissettim. Ayrıca, vatansız webapp/webservices için yatay olarak kolayca ölçeklendirilebilmenin performans maliyetini haklı çıkardığını düşünüyor musunuz? – bertie

+1

@Albert: Gerçekleri ölçmeden maliyetler hakkında çok şey söylemek zor. :-) Ancak, çıkış yapmak isterseniz, bazı istemci durumlarını korumak için _need_ ve bu, çerez işleme anlamına gelir; Müşterinin, HTTP'nin kendisi vatansız olduğu ve bu zor bir gereklilik olduğu için, hangi oturumun söz konusu olduğu konusunda bir çeşit bilgi vermesi gerekir. –

+0

Önerim, başlangıçta ölçeklendirmenin çok fazla endişelenmemesi; Kullanıcıları/müşterileri almak çok daha fazla sorun. Ölçekleme yaparken, gerçek anahtar, bir hizmeti çoğaltabileceğiniz veya tek bir örneğinizin olup olmadığıdır; Kural olarak, web sunucularının çoğaltılması genellikle nispeten kolaydır, ancak veritabanları değildir. –

24

Donal'ın cevabı temel olarak doğrudur ve muhtemelen bir tarayıcı için vatansız bir uygulamayı kullanmak istemezsiniz.

Referans için, create-session="stateless", RESTful istemcisi gibi durum bilgisi olmayan bir uygulamaya sahipseniz, daha iyi bir seçenektir. Bu seçenek Spring Security 3.1'de tanıtıldı. Spring Security'nin oturumu kullanan altyapısının (örneğin,, SessionManagementFilter, RequestCacheFilter) parçalarının eklenmesini engeller, böylece daha yalın bir kurulum elde edersiniz.

create-session="never" ile Spring Security hiçbir zaman bir oturum oluşturmayacaktır, ancak uygulamanızın yaptığı bir tanesini kullanacaktır. Pratikte, birçok kullanıcı oturum oluşturduğunun farkında değiller, bu yüzden gerçekten bir seans istemiyorsanız, o zaman stateless en iyi seçenektir.

+0

+1: Bu seçeneği bilmiyordum, ancak daha sonra 3.1'e fazla bir şey göndermedim. –

+1

+1 Sadece bu cevabın bana sadece bir dünyam zarar verdiğini söyleyeyim. Tomcat, RESTful istemcim tarafından çok sayıda oturum oluşturulduğundan, kullanıcılara erişimi reddediyordu. Teşekkür ederim! – thatidiotguy

İlgili konular