आप सही हैं, इस पर प्रलेखन कोई मदद नहीं है।
जिस तरह से मैंने इस वर्ग का उपयोग किया है, वैसे ही है।
- भेजे संदेश से बाहर
- प्रमाणीकरण टोकन (जैसे उपयोगकर्ता नाम/पासवर्ड) खींचो टोकन प्रमाणित करें और एक IPrincipal वस्तु बनाने के लिए उन्हें का उपयोग करें: प्रमाणित() विधि को ओवरराइड। यह प्रिंसिपल होगा जिसका उपयोग सेवा संचालन के आमंत्रण के दौरान किया जाता है।
- के रूप में यह WCF द्वारा बाद में बदल दिया गया है, तो यह WCF प्रसंस्करण पाइपलाइन
तुम सिर्फ इस बिंदु पर धागा प्रिंसिपल निर्धारित नहीं कर सकते में बाद में इस्तेमाल किया जा सकता message.Properties संग्रह करने के लिए IPrincipal वस्तु जोड़े ।
ServiceAuthenticationManager.Authenticate में कोड() पद्धतियों कुछ इस तरह दिखेगा:
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;
}
तो फिर तुम एक कस्टम प्राधिकरण नीति है कि
- संदेश से IPrincipal पुन: प्राप्त करता जोड़ने (का उपयोग करते हुए System.ServiceModel.EvaluationContext.Current.IncomingMessageProperties संग्रह)।
- EvaluationContext.Properties संग्रह
- IPrincipal.IsInRole के आधार पर दावे करती है() विधि
में IPrincipal धक्का IAuthorizationPolicy में कोड() विधि कैसा दिखेगा
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;
}
सेवा व्यवहार कॉन्फ़िगरेशन में, आपको डब्ल्यूसीएफ के लिए वास्तविक सेवा संचालन आमंत्रण के लिए निष्पादन थ्रेड पर प्रिंसिपल के रूप में प्रिंसिपल सेट करने के लिए प्रिंसिपलप्रमिशनमोड = "कस्टम" सेट करने की आवश्यकता है।
<serviceAuthorization principalPermissionMode="Custom"...
स्रोत
2010-10-01 13:43:37
यह अजीब है, लेकिन अभी भी वहाँ की जानकारी और ServiceAuthorizationManager के लिए नमूने का एक बहुत हो रहा है, लेकिन शायद ही के लिए ServiceAuthenticationManager – Cocowalla