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:
- İstemci bir
SecurityTokenProvider
- Client kullanarak
SecurityToken
yaratan bir SecurityTokenSerializer
- Server kullanan
SecurityToken
kullanılarak SecurityToken
deserializes serileştirir Bir SecurityTokenSerializer
- Sunucu,
SecurityTokenAuthenticator
kullanarak
IAuthorizationPolicy
s oluşturur.
- Sunucu oluşturur
AuthorizationContext
IAuthorizationPolicy
s'den
- 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
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