दिया गया एक डब्ल्यूसीएफ आराम सेवा है जो एचटीपी क्लाइंट क्रेडेंशियल टाइप के साथ चलता है। विन्डोज़ और उपयोगकर्ता को केर्बेरोस के माध्यम से प्रमाणीकृत करने के लिए मजबूर करता है।डब्ल्यूसीएफ रेस्ट सेवा ब्राउज़र के माध्यम से विंडोज प्रमाणीकरण
private static void Main(string[] args)
{
Type serviceType = typeof (AuthService);
ServiceHost serviceHost = new ServiceHost(serviceType);
WebHttpBinding binding = new WebHttpBinding();
binding.Security.Mode = WebHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
ServiceEndpoint basicServiceEndPoint = serviceHost.AddServiceEndpoint(typeof(IAuthService), binding, "http://notebook50:87");
basicServiceEndPoint.Behaviors.Add(new WebHttpBehavior());
Console.WriteLine("wcf service started");
serviceHost.Open();
Console.ReadLine();
}
public class AuthService : IAuthService
{
public List<string> GetUserInformation()
{
List<string> userInfo = new List<string>();
userInfo.Add("Environment.User = " + Environment.UserName);
userInfo.Add("Environment.UserDomain = " + Environment.UserDomainName);
if (OperationContext.Current != null && OperationContext.Current.ServiceSecurityContext != null)
{
userInfo.Add("WindowsIdentity = " + OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name);
userInfo.Add("Auth protocol = " + OperationContext.Current.ServiceSecurityContext.WindowsIdentity.AuthenticationType);
}
else
{
userInfo.Add("WindowsIdentity = empty");
}
WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";
return userInfo;
}
}
[ServiceContract]
public interface IAuthService
{
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "test/")]
List<string> GetUserInformation();
}
जब मैं एक सांत्वना आवेदन के रूप में इस चलाने के लिए, और फिर एक और कंप्यूटर से इंटरनेट एक्सप्लोरर में वेबसाइट http://notebook50:87/test/
खोलते हैं, तो मैं एक 'बुरा अनुरोध की प्रतिक्रिया मिलता है। मैंने केर्बेरोस लॉगिंग को सक्षम किया, और यह मुझे KDC_ERR_PREAUTH_REQUIRED
मैं विंडोज़ सेवा बनाकर इस समस्या को हल कर सकता हूं और इसे 'स्थानीय सिस्टम खाते' के तहत चला सकता हूं। इस मामले में, एक ग्राहक प्रमाणीकृत करने में सक्षम है।
प्रश्न: स्थानीय सिस्टम के तहत एप्लिकेशन को विंडोज सेवा के रूप में चलाने के दौरान एक ही व्यवहार प्राप्त करने के लिए उपयोगकर्ता को कौन सी अनुमति/सेटिंग्स (जो इस डब्ल्यूसीएफ सेवा को चलाती है) की आवश्यकता होती है? क्या यह सेवा सिद्धांत नाम से संबंधित है?
क्या होता है यदि आप नोटबुक 50 पर साझा फ़ोल्डर बनाते हैं, और इसे अपने अन्य कंप्यूटर से एक्सेस करने का प्रयास करते हैं? क्या यह लॉगिन के लिए संकेत देता है? अगर आप लॉगिन फॉर्म के साथ लॉगिन करते हैं, और फिर http: // notebook50: 87/test/तक पहुंचने का प्रयास करते हैं तो क्या यह काम करता है? –
"क्या यह सेवा सिद्धांत नाम से संबंधित है" काफी संभवतः। मेरा पहला सवाल यह है कि आप केर्बेरोस का उपयोग क्यों कर रहे हैं, मैंने पिछले 2 दिनों में केर्बेरोस को बेकार कर दिया है (क्या आप वाकई एनटीएलएम का उपयोग नहीं कर सकते हैं)। दूसरा, केर्बेरोस को काम करने के लिए सही होने के लिए बड़ी संख्या में चीजों की आवश्यकता होती है, जिनमें से एक यह है कि क्लाइंट को सर्वर प्रमाणीकृत करने की आवश्यकता है ... एसपीएन यही है। एसपीएन को उस सर्वर प्रविष्टि से मेल खाना चाहिए जिसका उपयोग आप सर्वर तक पहुंचने के लिए करते हैं (इस मामले में नोटबुक 50, जो लगभग निश्चित रूप से नहीं करता है, डिफ़ॉल्ट रूप से, यदि यह भी हुआ, तो यह आपके सर्वर के FQDN पर सेट होगा)। – Aron
@ जादू-माउस क्षमा करें दोस्त। आपकी टिप्पणी सहायक नहीं है। यह स्पष्ट रूप से केर्बेरोज ऑथ के साथ एक मुद्दा है। – Aron