2011-03-11 16 views
7

पर कॉल करने के लिए एसटीएस से आवंटित टोकन का उपयोग करके मैं इस दिन पूरे दिन कोई फायदा नहीं उठा रहा हूं और मैं विचारों से बाहर हूं। आईपी-एसटीएस लॉगिन को संभालता है और फिर उसे आरपी-एसटीएस में भेज देता है जो दावों के साथ टोकन भरता है और फिर वेबसाइट पर जाता है। यह सही ढंग से काम करता है। मेरे पास आईपी-एसटीएस पर कुछ डब्ल्यूसीएफ फ़ंक्शन हैं जैसे पासवर्ड बदलें/रीसेट पासवर्ड और उन्हें एक्सेस करने की आवश्यकता है। मैं के आसपास पढ़ने के बाद उपयोगकर्ता को प्रमाणीकृत सुनिश्चित करने के लिए पहले ही डब्लूसीएफ के माध्यम से आवंटित टोकन भेजने में सक्षम होना चाहिए। जो मैं देख सकता हूं वह टोकन भेज रहा है लेकिन सही तरीके से नहीं है और जिस तरह से मुझे लगता है कि इस समय उपयोगकर्ता नाम की आवश्यकता नहीं है।एक डब्ल्यूसीएफ सेवा

आदर्श रूप से मैं चाहता हूं कि यह उपयोगकर्ता को असाइन किया गया टोकन लेना चाहें और फिर से अनुरोध या दोबारा तैयार न करें और निश्चित रूप से उपयोगकर्ता नाम/पासवर्ड की आवश्यकता न हो।

त्रुटि जो मैं वर्तमान में प्राप्त कर रहा हूं वह है: दूसरी पार्टी से एक असुरक्षित या गलत सुरक्षित गलती प्राप्त हुई थी। गलती कोड और विवरण के लिए आंतरिक FaultException देखें।

विवरण: संदेश संसाधित नहीं किया जा सका। यह सबसे अधिक संभावना है क्योंकि कार्रवाई 'http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue' गलत है या क्योंकि संदेश में एक अमान्य या कालबाह्य सुरक्षा संदर्भ टोकन है या क्योंकि कोई मेल नहीं है बाइंडिंग के बीच। अगर सेवा निष्क्रियता के कारण चैनल को निरस्त कर दिया गया तो सुरक्षा संदर्भ टोकन अमान्य होगा। निष्क्रिय सत्रों को रद्द करने से सेवा को रोकने के लिए सेवा अंतराल के बाध्यकारी पर समय-समय पर प्राप्त समय-सीमा को बढ़ाएं।

यहां मेरी वेब कॉन्फ़िगरेशन से प्रासंगिक बिट्स हैं।

ग्राहक के पक्ष web.config


<system.serviceModel> 
<bindings> 
    <customBinding> 
    <binding name="UsernameBinding">   <security authenticationMode="UserNameForCertificate"     requireSecurityContextCancellation ="false"     requireSignatureConfirmation="false"     messageProtectionOrder ="SignBeforeEncryptAndEncryptSignature"     requireDerivedKeys="true"> 
     </security> 
     <httpTransport/> 
    </binding> 
    </customBinding> 
    <wsFederationHttpBinding> 
    <binding name="HTTPEndpoint" closeTimeout="00:10:00" openTimeout="00:10:00" 
     receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" 
     transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
     maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" 
     textEncoding="utf-8" useDefaultWebProxy="true"> 
     <security mode="Message"> 
     <message issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" negotiateServiceCredential="false">    <claimTypeRequirements> 

      <add claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" isOptional="false" /> 
      </claimTypeRequirements> 

      <issuer address="http://localhost:13422/MembershipService" bindingConfiguration="UsernameBinding" binding="customBinding"> 
      <identity> 
       <certificateReference findValue="STSTestCert" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="TrustedPeople" /> 
      </identity> 
      </issuer> 
     </message> 

     </security> 
    </binding> 
    </wsFederationHttpBinding> 
</bindings> 

<behaviors> 
    <!-- Credentials configuration --> 
    <endpointBehaviors> 
    <behavior name="ServiceBehavior"> 
     <clientCredentials> 

     <clientCertificate findValue="STSTestCert" storeLocation="CurrentUser" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> 
     <serviceCertificate> 
      <defaultCertificate findValue="STSTestCert" storeLocation="CurrentUser" storeName="TrustedPeople" x509FindType="FindBySubjectName"/> 
      <authentication certificateValidationMode="PeerOrChainTrust" /> 
     </serviceCertificate> 

     </clientCredentials> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

<client> 
    <endpoint address="http://localhost:13422/MembershipService" 
    binding="wsFederationHttpBinding" bindingConfiguration="HTTPEndpoint" 
    contract="MembershipService.IAccountMembershipService" name="HTTPEndpoint" behaviorConfiguration="ServiceBehavior"> 
    <identity> 
     <dns value="localhost"/> 
    </identity> 
    </endpoint> 
</client> 


सेवा पक्ष:

<system.serviceModel> 

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"> 
    <serviceActivations> 
    <add relativeAddress="IAccountMembershipService.svc" service="AccountMembershipService" factory="System.ServiceModel.Activation.WebServiceHostFactory" /> 
    </serviceActivations> 
</serviceHostingEnvironment> 

<bindings> 
    <wsHttpBinding> 
    <binding name="federationBinding" receiveTimeout="00:10:00" sendTimeout="00:10:00" closeTimeout="00:10:00" openTimeout="00:10:00"> 

     <security mode="Message"> 
     <message negotiateServiceCredential="true" /> 
     </security> 
    </binding> 

    </wsHttpBinding> 
    <wsFederationHttpBinding> 
    <binding name="federationBinding" closeTimeout="00:10:00" openTimeout="00:10:00" 
     receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" 
     transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
     maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" 
     textEncoding="utf-8" useDefaultWebProxy="true"> 

     <security mode="Message"> 
     <message issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" negotiateServiceCredential="false"> 
      <claimTypeRequirements> 

      <add claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" isOptional="false" /> 
      </claimTypeRequirements> 

      <issuer address="http://localhost:13422/MembershipService" bindingConfiguration="UsernameBinding" binding="customBinding"> 
      <identity> 
       <certificateReference findValue="STSTestCert" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="TrustedPeople" /> 
      </identity> 
      </issuer> 
     </message> 
     </security> 
    </binding> 
    </wsFederationHttpBinding> 
</bindings> 


<behaviors> 
    <serviceBehaviors> 
    <behavior name="serviceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 

     <serviceCredentials> 
     <serviceCertificate findValue="CN=STSTestCert" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectDistinguishedName"/> 

     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

<extensions> 
    <behaviorExtensions> 
    <!-- This behavior extension will enable the service host to be Claims aware --> 
    <add name="federatedServiceHostConfiguration" type="Microsoft.IdentityModel.Configuration.ConfigureServiceHostBehaviorExtensionElement, Microsoft.IdentityModel, Version=0.6.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    </behaviorExtensions> 
</extensions> 

<services> 
    <service behaviorConfiguration="serviceBehavior" name="STS.IP.Models.AccountMembershipService"> 
    <endpoint binding="wsFederationHttpBinding" bindingConfiguration="federationBinding" name="HTTPEndpoint" contract="STS.IP.Infrastructure.IAccountMembershipService" > 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    <!-- <endpoint binding="wsHttpBinding" bindingConfiguration="" name="HTTPEndpoint" contract="Aurora.WCFIsAlive.IIsAlive" />--> 

    </service> 
</services> 

बड़े पेस्ट के लिए खेद है लेकिन उम्मीद है कि कोई मेरी त्रुटि को खोज सकता है! क्या मैं बस गलत तरीके से आ रहा हूं?

उत्तर

4

मुझे नहीं पता कि यह किसी भी मदद की है, लेकिन यह थोड़ा सा संबंधित हो सकता है ... आप एक जारी टोकन का पुन: उपयोग कर सकते हैं, यह कुछ ऐसा था जो मैंने पहले किया था। मैंने जो स्केनेरियो कहा था वह एक एएसपी.नेट साइट या डब्ल्यूसीएफ सेवा डब्ल्यूआईएफ सुरक्षित थी, लेकिन फिर एएसपी.नेट साइट या डब्ल्यूसीएफ सेवा को एक और सेवा कॉल करने की आवश्यकता थी जिसे एसएएमएल टोकन/डब्ल्यूआईएफ की आवश्यकता थी, और यदि आप टोकन का पुन: उपयोग कर सकते हैं bootstraping का उपयोग करने के लिए WIF सेट करें। जब तक दूसरी वेब सेवा एक ही एसटीएस पर भरोसा करती है।

<microsoft.IdentityModel><service><securityTokenHandlers>: 

यह मान:

http://msdn.microsoft.com/en-us/library/ee517256.aspx#_bootstrap

विन्यास के तहत स्थापित करने के लिए है

<securityTokenHandlerConfiguration saveBootstrapTokens="true" /> 
1

वेबसाइट (जो कि पार्टी जो अभी काम कर रही है) और आईपी-एसटीएस पर डब्ल्यूसीएफ एंडपॉइंट 2 अलग-अलग एप्लिकेशन हैं। आप एक ही टोकन का पुन: उपयोग नहीं कर सकते हैं। आपको आईपी-एसटीएस सेवाओं के लिए एक नया टोकन प्राप्त करना चाहिए (उदाहरण के लिए नवीनीकरण पासवर्ड, आदि)

इस मामले में आईपी-एसटीएस सेवाएं अवधारणात्मक रूप से केवल एक और भरोसेमंद पार्टी हैं (जो शायद खुद पर भरोसा करती हैं)।

+0

आपके उत्तर के लिए धन्यवाद! मैंने आरपी-एसटीएस तक पहुंचने के साथ भी इसी तरह की कोशिश की है और मुझे अभी भी बहुत ही समस्याएं हैं। कोई संकेतक? मैं वास्तव में इसके साथ अटक गया हूँ। – Henry

+0

क्षमा करें, मुझे 100% यकीन नहीं है कि मैं समझता हूं। आरपी-एसटीएस के साथ आप क्या समस्याएं कर रहे हैं? –

+0

आपने जो कहा है उसके बारे में सोचकर मैंने अपने तरीकों की गलती देखी है। आरपी-एसटीएस में ऐसी सेवाएं भी होती हैं जिन्हें एक्सेस करने की आवश्यकता होती है और क्योंकि यह आईपी पर निर्भर है, किसी भी अनुरोध को तुरंत आईपी पर वापस भेज दिया जाता है (जो स्पष्ट रूप से केवल HTML लौटाता है, और मुझे यह पता था)। वर्तमान में परियोजना को पहले से ही एक डोमेन प्रोजेक्ट में विभाजित किया गया है, इसलिए मुझे केवल एक नई वेब सेवा प्रोजेक्ट बनाना होगा जो आरपी पर निर्भर है और इस प्रकार टोकन मान्य होगा। या कम से कम, मैं जो काम कर सकता हूं उससे। * हालांकि * इनमें से कोई भी बताता है कि कार्ड की जगह हर समय क्यों चल रही थी! उम्मीद है कि फिर से नहीं होगा। – Henry

2

कार्ड स्पेस हर समय पॉप-अप कर रहा था ... client.ClientCredentials.SupportInteractive = false;

+1

यदि यह काम करता है तो मैं आपको समर्पण में एक मंदिर बनाउंगा। – Henry

+0

यदि इसका अच्छा उत्तर सिर्फ इसे सही के रूप में चिह्नित करता है, तो आपको मेरे लिए एक मंदिर बनाने की आवश्यकता नहीं है। लॉल –

+2

तो .... क्या यह सही था या नहीं? स्पष्ट रूप से ओपी पोस्टर ने छोड़ दिया और मर गया या कुछ – Sentinel

संबंधित मुद्दे