2016-09-30 19 views
6

Şu anda bir kullanıcının giriş yapıp yapmadığını kontrol etmek için Shiro Token sistemli bir Tomcat sunucu uygulamasında Bahar'ı çalıştıran bir sunucum var. Etki alanları arası isteklere izin verir. istemci üzerinde elimden başka etki alanında node.js adresinden gelen kimlik bilgileriyle tersine Proxy oturumu açma

...

http.get('https://<my_check_login_service>', {withCredentials: true})

çağrıyı (genellikle açısal kullanarak) ... ve sürece zaten oturum am olarak (belirteç aşımına uğramayacak) kullanıcı bilgilerini (isim, avatar vb.) döndür.

Ben kullanıcıyı almak için başka bir sistem şimdi bu düğüm sunucusunu çağırmak istiyorum kendisi için (aynı zamanda istemci tarafı için açısal kadar hizmet) bir düğüm sunucusudur ve yukarıdaki my_check_login_service üzerinde o vekil var oturum nesnesinde (ifade kullanarak) bilgi ayarlayın ve ardından kullanıcıyı istemciye döndürün. Ayrıca, oturum nesnesi aracılığıyla, bağlantılarına güvenmeme izin verin ve oturum açma hizmetinden dönen kullanıcının güvenlik düzeyine bağlı olarak daha fazla api araması yapmasına izin verin.

node.js yönlendirici ben vekil bunu yapabilirsiniz On

...

app.get('/checklogin', function(req, res) { 
    req.pipe(request.get("https://<my_check_login_service>").pipe(res); 
} 

... ama servise uygun kimlik bilgilerini iletmek bilmiyorum. Ben yaparsam benim login_service için kimlik bilgileri yerel sunucuya gönderilmez çünkü ...

http.get('checkLogin', {withCredentials: true})

... Bu, tabii ki, çalışmıyor. Bu işi yapmak için doğru kimlik bilgilerini nasıl geçebilirim?

Şerefe.

cevap

2

Kimlik Orijinal isteğin adresi ile (istek gelen ve yanıta ikisi) tüm başlıkları geçen HTTP başlıklarında büyük olasılıkla, o iş yapmak gerekir:

app.get('/checklogin', function(req, res) { 
    console.dir(req.headers) 
    //You can inspect the headers here and pass only required values 
    const options = { 
    url: 'https://<my_check_login_service>', 
    headers: Object.assign(
     //Tell the login service about address of original request 
     {'X-Forwarded-For': req.connection.remoteAddress} 
     req.headers) 
    } 
    req.pipe(request.get(options)) 
    .on('response', (response) => res.set(response.headers)) 
    .pipe(res) 
} 

Bu örnek tarafından orijinal adresi geçer X-Forwarded-For, login_service ayarlarının yapılması, yapılandırmaya bağlı olarak değişebilir veya olmayabilir.

+0

Evet! Teşekkür ederim! * Tamamen * eminim ki işe yarayacaktır çünkü şimdi benim için çalışmasını sağlamak için bir joker sertifikasına ihtiyacım olduğunu anlıyorum. Ancak bu değişiklikle artık "Hata: Ana Bilgisayar Adı/IP, sertifikanın alt adları ile eşleşmiyor: ..." Joker bir sertifikanın bunu düzelteceğini varsayalım. Bu kareyi aldığımda bunu günceller. – crowmagnumb

+0

'login_service' ayrıca istemci IP adresini kontrol eder, böylece proxy iletmelidir. Ben buna cevabını ekliyorum – DarkKnight

+0

Ne yazık ki işe yaramaz. Başlıkları en azından ekleyerek sunucunun bazı bilgileri bilmesini sağlayın, ancak oturum açmak için gereken güvenlik belirteçlerini geçmeyin. Bence yapmak istediğim şey imkansız ve sadece bir OAuth sistemi uygulamak zorundayım. Ödemenin süresi dolmadan başka bir cevap alamazsam kesin olarak sana vereceğim. Teşekkür ederim. :) – crowmagnumb

İlgili konular