2009-03-14 20 views
13

TcpClient/TcpListener ve SslStream tabanlı basit bir istemci-sunucu uygulaması var. Müşteriler, bir X509Certificate kullanarak veya SslStream kurulduktan sonra bir kullanıcı adı ve şifre göndererek kendilerini sunucuya doğrulayabilirler. ilginç geliyor - keyfi uygulamalarda kullanılabilecekKendi istemci-sunucu uygulamasında System.IdentityModel nasıl kullanılır?

WCF kimlik doğrulama amacıyla System.IdentityModel ad kullanan

ama apparently. Bunun nasıl yapılacağına dair bilgiler seyrek olsa da (veya bugün Google foo'm zayıfsa).

Yani, sorum şu: System.IdentityModel'i uygulamamla tümleştirmek için ne yapmam gerekiyor? Tüm bu İstemci Makale maddelerine ihtiyacım olup olmadığından emin değilim, ancak kullanıcılar sadece Windows hesaplarını veya herhangi bir diğer kimlik doğrulama mekanizmasını kullanarak oturum açabilirlerse iyi olur. (Ne yazık ki sadece WCF'ye geçemiyorum, ancak gerekirse özel değişiklikler yapabilmem için özel protokolü kullanmak zorunda değilim.)

cevap

17

Google foo'm gerçekten zayıftı. Cevap, sorumun altındaki bağlantının hemen arkasında. Yani birileri de aynı soruna sahip olduğunda this blog için bir çift bağlantı vardır.

İlk olarak, "set şeyler iddia" anlamaya çalışmak olmalıdır:

iddia setleri nereden geldiğini

Sonra bilmeniz gerekir: bu bilgiyle

Silahlı, aslında oldukça basit hale gelir.

ben doğru anladıysam, temel iş akışı böyle bir şey olurdu:

  1. İstemci bir SecurityTokenProvider
  2. Client kullanarak SecurityToken yaratan bir SecurityTokenSerializer
  3. Server kullanan SecurityToken kullanılarak SecurityToken deserializes serileştirir Bir SecurityTokenSerializer
  4. Sunucu, SecurityTokenAuthenticator
  5. kullanarak IAuthorizationPolicy s oluşturur.
  6. Sunucu oluşturur AuthorizationContextIAuthorizationPolicy s'den
  7. yapılan

Örnek:

// Create the SecurityTokenProvider 
var p = new UserNameSecurityTokenProvider("username", "password"); 

// Get the SecurityToken from the SecurityTokenProvider 
var t = p.GetToken(TimeSpan.FromSeconds(1.0)) as UserNameSecurityToken; 

// ... transmit SecurityToken to server ... 

// Create the SecurityTokenAuthenticator 
var a = new CustomUserNameSecurityTokenAuthenticator(
    UserNamePasswordValidator.None); 

// Create IAuthorizationPolicies from SecurityToken 
var i = a.ValidateToken(t); 

// Create AuthorizationContext from IAuthorizationPolicies 
var c = AuthorizationContext.CreateDefaultAuthorizationContext(i); 
ShowClaims(c.ClaimSets); 

X509SecurityToken için s X509SecurityTokenProvider/Authenticator kullanın. WindowsSecurityToken için s bir WindowsSecurityTokenAuthenticator var ama bir sağlayıcı değil; Bu oldukça iyi çalışıyor

var t = new WindowsSecurityToken(WindowsIdentity.GetCurrent()); 

: Bunun yerine, WindowsSecurityToken Oluşturucu kullanın. Şimdiye kadar atladığım tek şey, token serileştirmesi. .NET çerçevesinde bir uygulama olan bir SecurityTokenSerializer sınıfı vardır: WCF ile birlikte gelen WSSecurityTokenSerializer sınıfı.

Dizgeleştirme UserNameSecurityToken ler ve bir cazibe gibi X509SecurityToken eserleri (deserialization denemedim), ancak WindowsSecurityToken s görünüşte serileştiriciye tarafından desteklenmemektedir. Bu zaten sahip olduğum iki kimlik doğrulama yöntemleri ile beni bırakır (sertifikalar ve kullanıcı adı/parola), ve ben zaten istemediğim gibi ben

+1

Herhangi biri ilgilenirse, SecurityToken'ın istemci tarafında oluşturulup bir sunucuya iletilmesi gerektiğinden emin değilim. X.509 güvenliği için sunucu ile bir SslStream başlatmak ve sunucu sertifikasından X509SecurityToken oluşturmak çok daha mantıklıdır; Windows güvenliği için, WindowsSecurityToken bir NegotiateStream kullanılıyorsa, negotiateStream.RemoteIdentity öğesinden oluşturulabilir. Kullanıcı adı/şifre güvenliği için elbette kullanıcı adı ve şifrenin iletilmesi gerekecektir. – dtb

7

Ben yok Mevcut çözümle ilgili bir yorum yayınlama konusundaki itibarı, ancak artık işe yaramayacakları için yeni URL'leri çözümde listelenen bloglara göndermek istiyorum. Birisi bunu bir yoruma değiştirebilirse çok fazla zorlanırdım.

+1

Sabit bağlantıları yansıtacak şekilde yukarıdaki @ dtb'nin cevabını düzenledim.Hakem değerlendirildikten sonra gösterilmelidir. Teşekkürler! –

+0

Eylül 2016’dan itibaren bazı bağlantılar bozuldu – JPK

İlgili konular