Haklısınız, bununla ilgili belgelerin hiç bir faydası yok.
Bu sınıfı kullandığım yol aşağıdaki gibidir.
- belirteçleri için kimlik doğrulaması
- gelen mesaj üzerinden kimlik doğrulama bilgilerini (örneğin, kullanıcı adı/şifre) çekerek ve IPrincipal nesne oluşturmak için kullanılmaktadır: kimlik doğrulaması() metodu için geçersiz kılar. Bu, servis işleminin başlatılması sırasında kullanılan müdür olacaktır. Bunu sadece bu noktada iplik ilkesini ayarlayamıyor
WCF işleme boru hattında daha sonra kullanılabilir böylece WCF tarafından sonradan değiştirilir olarak
message.Properties koleksiyonuna IPrincipal nesnesi ekleyin . kullanılarak public override ReadOnlyCollection<IAuthorizationPolicy> Authenticate(ReadOnlyCollection<IAuthorizationPolicy> authPolicy, Uri listenUri, ref Message message)
{
int tokenPosition = message.Headers.FindHeader("Token", "http://customnamespace.org");
string token = message.Headers.GetHeader<string>(tokenPosition);
IPrincipal user = new CustomPrincipal(token);
message.Properties["Principal"] = user;
return authPolicy;
}
Sonra
- mesajdan IPrincipal alır o özel yetkilendirme politikası eklemek (:
ServiceAuthenticationManager.Authenticate kod() yöntemleri şöyle görünecektir System.ServiceModel.EvaluationContext.Current.IncomingMessageProperties koleksiyonu).
- IAuthorizationPolicy kod() metodu gibi olacaktır
- IPrincipal.IsInRole göre iddia etmek EvaluationContext.Properties toplama() metodu
içine IPrincipal iter
public bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
IPrincipal user = OperationContext.Current.IncomingMessageProperties["Principal"] as IPrincipal;
evaluationContext.Properties["Principal"] = user;
evaluationContext.Properties["Identities"] = new List<IIdentity> { user.Identity };
IList<Claim> roleClaims = this.GetRoleClaims(user);
evaluationContext.AddClaimSet(this, new DefaultClaimSet(this.Issuer, roleClaims));
return true;
}
Hizmet davranışı yapılandırmasında, WCF'nin IPrincipal'i asıl hizmet işlemi çağrısı için yürütme iş parçacığı üzerinde asıl olarak ayarlaması için principalPermissionMode = "Özel" değerini ayarlamanız gerekir.
<serviceAuthorization principalPermissionMode="Custom"...
Bu garip, ama yine de ServiceAuthorizationManager için bilgi ve örneklerin bir sürü var orada görünüyor, ama ServiceAuthenticationManager – Cocowalla