2010-01-13 26 views
25

Form kimlik doğrulamasında asp.net yapısını kullanan aynı asp.net web sitesine işaret eden iki etki alanı, domain1.com ve domain2.com var. Sorun, alan adlarının aynı web sitesine işaret etse bile kullanıcının aynı anda yalnızca bir alan adı için doğrulanmış olmasıdır. Yani önce www.domain1.com adresini kullanır ve ardından www.domain2.com adresini ziyaret ederse, arkadaki aynı web sitesidir, ancak yalnızca www.domain1.com için doğrulanır. Aynı şey siteleri ziyaret ederken www ve www kullanmıyorsa olur.Asp.net form kimlik doğrulaması ve birden çok etki alanı

User.Identity.IsAuthenticated 

nasıl kullanıcı aynı web sitesine giden tüm alan adları için kimlik doğrulaması alır yapabilirsiniz:

FormsAuthentication.RedirectFromLoginPage(username, cookie.Checked); 

giriş kontrol etmek için:

Bu benim giriş için kullandığınız nedir?

+0

kimlik tanımlama bakmak olabilir. Bunu neden yapmak istersiniz? – Lazarus

+3

Bazen, birden fazla siteye sahip olduğunuz için, kullanıcının her birine ayrı ayrı giriş yapmak zorunda kalmadan sorunsuz bir şekilde kullanmasını istiyorsunuz. –

+0

Neden StackOverflow metodolojisini takip edin ve OpenID gibi bir harici kimlik doğrulama sağlayıcısı kullanın. – Lazarus

cevap

44

Hazırlığınız Tek Oturum Açma çözümdür.

  1. doğru çerezleri ayarlayın: ASP.NET kimlik doğrulaması olarak

    bakmak için iki şey vardır, 's özünde genellikle esaslı çerez.

  2. Kayıt sırasında kullanıcılarınızı alternatif alana geri döndürün. Doğru

    1. Ayar çerezler ziyade Sen ASP.NET kök etki alanına kimlik doğrulama bileti tanımlama bilgilerini yazıyor sağlamak için gereken

    ,: daha derinlemesine Bunlardan ikisi baktığımızda

açık alandan daha bu formlar elemanın domain özniteliği kullanılarak yapılır:

<forms 
    name="name" 
    loginUrl="URL" 
    defaultUrl="URL" 
    domain=".example.com"> 
</forms> 

Sen belirlesin senin etki alanı ".example.com" - önde gelen süreye dikkat edin - bu anahtardır. Bu şekilde example.com ve www.example.com'a gönderilen talepler, hem cookie'yi doğru okuyacak hem de kullanıcının kimliğini doğrulayacaktır. Üzerinde tek bir işareti kullanın birkaç sitede uygulayan Ne alternatifi etki

için

2. Sıçrama kullanıcıların gidiş-dönüş giriş sürecidir. Kullanıcı ilk etki alanında doğrular, giriş ayrıntılarını şifreleriz ve bunları ikinci alandaki bilinen bir sayfaya yönlendiririz, oraya giriş yapar ve sonra tekrar orijinal sunucuya yönlendiririz.

Bu istemci tarafı yönlendirmesi önemlidir - çerezler yalnızca istemciye bir yanıt geldiğinde yazılır ve tarayıcı çerezleri görmek için ikinci alanı ziyaret etmelidir.

Diğer ayrıntılar sette çekim bu tür göz önünde bulundurulması gereken:

    Muhtemelen şifreli oturum açma ayrıntılarına bir zaman aşımı istiyorum
  1. - tarayıcı geçmişinden bu URL'yi hatırlatarak otomatik değil ki kullanıcı oturum açın.
  2. Etki alanları farklı sunuculardaysa, makine anahtarlarının aynı şekilde yapılandırıldığından emin olmanız gerekir; böylece ayrıntıları doğru bir şekilde şifreleyebilir veya şifresini çözebilir veya başka bir paylaşılan anahtar kullanabilirsiniz.
  3. Muhtemelen, doğru sunucuya geri gönderebilmeniz için orijinal sunucudan kullanıcıları ReturnUrl çağırma mekanizmasına sahip olmak isteyeceksiniz.

Ayrıca çoğu kurabiye gibi, alanlar arası polen ve kimliğe bürünme önlemek için alana göre depolanır, "Forms Authentication Across Applications"

+0

Bu sorunun eski olduğunu biliyorum ama benzer bir durumla mücadele ediyorum. Bir mobil site oluşturuyorum ve ana siteyle (mevcut bir site) kimlik doğrulaması paylaşmak için ona ihtiyacım var. Sonunda bağladığınız makaledeki önerileri takip ettim ama yine de hayır şansı. "Domain =". Example.com "özniteliğini (ana sitenin alanıyla değiştirildi) eklemeyi denedim, ancak şimdi kimlik doğrulaması hiç çalışmıyor gibi görünüyor. (Günlüğe kaydetmenin bir etkisi yok, tarayıcıların çerezlerini bile temizledim.) Bana yardımcı olmak için biraz zaman harcayabiliyorsanız makul bir danışmanlık ücreti ödemeyi düşünürdüm. –

+0

Adım 2 biraz balık gibi görünüyor ... giriş bilgilerini şifreleyin ve ikinci alandaki bilinen bir sayfaya yönlendirin .... hmmm ... Bir bilgisayar korsanı, sunucu ve istemci arasındaki şifrelenmiş verileri arayabilir ve daha sonra oturum açabilir Bu şifrelenmiş verileri kullanarak 2. etki alanından kurbanın hesabı. Verileri şifrelemelerine bile gerek yoktu. İstemci tarafında javascript kodunu kullanırlar ve şifrelenmiş verileri kendi sisteminize enjekte ederler ve sonra da taviz verirler. Şifrelenmiş verilerin milisaniyeler içinde bitmesine rağmen, bilgisayar korsanı, yönlendirilen kullanıcıdan daha hızlı olabilir. –

+0

Merhaba İşareti - gerçekten - bunların hepsinin SSL üzerinden olması gerekir - bu endişelerin çoğunu azaltmalıdır - aslında ağ trafiği ve gecikme söz konusu olduğundan şifreli veriler milisaniyeden daha uzun yaşamalıdır. Javascript varsayımının nereden geldiğinden emin olmadığımızdan (daha spesifik olabilirdim), tarayıcıya bir sonraki sunucuya uygun istekte bulunmasını sağlayacak bir yanıt olarak '302' yönlendirmeleri yayınlıyorduk - ancak doğru bir şekilde hatırlıyorsam hala sorgu dizelerine güveniyordu - dolayısıyla SSL kullanımı. Daha sonra SSL uzlaşmalarıyla sınırlı kaldık. –

-4

MSDN'de Explained: Forms Authentication belgelerini okumalısınız. Alanlar Arası Kimlik Doğrulama'yı kapsamaktadır.

+4

@Filip, bu dokümanda, alan adı kimlik doğrulaması için başvuruda bulunuyor? Dokümanı taklit ettim ve alanlar arası kimlik doğrulamasını engelleyecek gibi görünen noktaların yanında hiçbir bilgi bulamadım. Açıkça farklı bir sorun alanı olan birden çok AD etki alanında kimlik doğrulaması hakkında konuşulan bir makalenin bir bağlantısı vardır. – Lazarus

3

cookieless="true" ayarını deneyebilirsiniz.

+0

Bu, etki alanı kimlik doğrulamasını nasıl çözeceğinden emin değilim? –

+1

Çerezler (tek alanla sınırlı olan) yerine, URL'de kimlik doğrulama bileti gönderir. –

+0

@Darin ancak URL'deki belirteç hala yetkili sunucu için kodlanmış değil mi? – Lazarus

İlgili konular