2009-07-04 7 views
7

से विशेषताओं को प्राप्त नहीं किया जा सकता है, मैं यह पता लगाने की कोशिश कर रहा हूं कि खुली आईडी के माध्यम से सत्यापित करने के बाद उपयोगकर्ताओं की जानकारी कैसे प्राप्त करें। इससे कोई फर्क नहीं पड़ता अगर मैं एक ClaimsRequest या FetchRequest की आपूर्ति जब भी मैंDotNetOpenId प्रतिक्रिया

response.GetExtension<ClaimsResponse> 

//Or 

response.GetExtension<FetchResponse> 

//Or 

response.GetUntrustedExtension<ClaimsResponse> 

// OR 

response.GetUntrustedExtension<FetchResponse> 

फोन मैं हमेशा एक अशक्त संदर्भ मिलता है। मैं इस तरह के सभी उदाहरणों की तरह ही जानकारी जोड़ रहा हूं:

request.AddExtension(new ClaimsRequest{ Email = DemandLevel.Require }); 

// Or 

var fetch = new FetchRequest(); 
fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email); 
request.AddExtension(fetch); 

कोई विचार क्या मैं गलत कर रहा हूं?

अद्यतन

विन्यास जानकारी एंड्रयू ने सुझाव दिया जोड़ना मुझे वहां जिस तरह का हिस्सा मिला है। मुझे अंततः response.GetUntrustedExtension<ClaimsResponse> के साथ दावा दावा प्राप्त हो रहा है हालांकि response.GetExtension<ClaimsResponse> अभी भी शून्य लौटाता है। इसके अलावा दावों के रिस्पॉन्स में वास्तव में मेरे द्वारा अनुरोधित डेटा में से कोई भी शामिल नहीं है। यहाँ अनुरोध है:

var request = openId.CreateRequest(Request.Form["openid_identifier"]); 
request.AddExtension(new ClaimsRequest 
    { 
     BirthDate = DemandLevel.Request, 
     Country = DemandLevel.Request, 
     Email = DemandLevel.Require, 
     FullName = DemandLevel.Request, 
     Gender = DemandLevel.Request, 
     Language = DemandLevel.Request, 
     Nickname = DemandLevel.Request, 
     PostalCode = DemandLevel.Request, 
     TimeZone = DemandLevel.Request 
     }); 

     return request.RedirectingResponse.AsActionResult(); 

यहाँ मेरी विन्यास

<uri> 
    <idn enabled="All"/> 
    <iriParsing enabled="true"/> 
    </uri> 
    <dotNetOpenAuth> 
    <openid maxAuthenticationTime="0:05"> 
     <relyingParty> 
     <security 
        requireSsl="false" 
        minimumRequiredOpenIdVersion="V10" 
        minimumHashBitLength="160" 
        maximumHashBitLength="256" 
        requireDirectedIdentity="false" 
        requireAssociation="false" 
        rejectUnsolicitedAssertions="false" 
        rejectDelegatingIdentifiers="false" 
        ignoreUnsignedExtensions="false" 
        privateSecretMaximumAge="07:00:00" /> 
     <behaviors> 
      <add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" /> 
     </behaviors> 
     </relyingParty> 
    </openid> 
    <messaging> 
     <untrustedWebRequest> 
     <whitelistHosts> 
      <!-- since this is a sample, and will often be used with localhost --> 
      <add name="localhost" /> 
     </whitelistHosts> 
     </untrustedWebRequest> 
    </messaging> 

मैं v3.2.0.9177

+0

क्या आप शामिल कर सकते हैं कि आप किस ओपी के खिलाफ परीक्षण कर रहे हैं? –

+0

व्यवहार कॉन्फ़िगरेशन दावा करता है कि किसी भी मूल्य के बिना, हमेशा के रूप में दावा करने के लिए दावा करता है। ऐसा लगता है कि आपका कोड सही है, और चूंकि मायोपेनिड दोनों सर्ग और एक्स का समर्थन करता है, मुझे आश्चर्य है कि यह आपके लिए काम नहीं कर रहा है। मैं देखूंगा कि मैं कुछ और जांच कर सकता हूं या नहीं। –

+0

मैंने myopenid.com के खिलाफ विशेष रूप से मेरे उत्तर में परीक्षण के बारे में एक टिप्पणी जोड़ा क्योंकि मुझे लगता है कि आप इसके खिलाफ क्या चल रहे हैं। यह भी एक टिप है, जो सुरक्षा टैग जिसे आपने अपनी web.config फ़ाइल में जोड़ा है, यदि आप विकी पेज में थे, तो यह वर्बैटिम छोड़ दिया गया है। वे सभी डिफ़ॉल्ट मान हैं।यहां देखे जाने वाले एकमात्र महत्वपूर्ण परिवर्तन यह है कि आपने 'लोकलहोस्ट' को श्वेतसूची वाले होस्ट और जिस व्यवहार के बारे में बात की थी, के रूप में जोड़ा। –

उत्तर

10

चल रहा हूँ है यह बहुत अच्छी तरह हो सकता है कि प्रदाता आप कर रहे हैं परीक्षण इन एक्सटेंशन का समर्थन नहीं करता है। या, यदि यह Google है, तो यह केवल एक बार प्रश्न का उत्तर देता है (जब तक लॉगिन के दौरान आप पर सावधान रहें, मुझे याद रखें याद रखें)।

अब डॉटनेट ओपेनएथ v3.2 के साथ, एक्सटेंशन भेजने का सबसे अच्छा तरीका शायद नए विशेषता एक्सटेंशन 'व्यवहार' का उपयोग करना है। यदि प्रदाता इनमें से किसी भी एक्सटेंशन का समर्थन करता है तो यह उपयोगी परिणाम प्राप्त करने के आपके मौके को अधिकतम करने के लिए प्रदाता के आधार पर स्वचालित रूप से प्रदाता और/या एएक्स (तीन अलग-अलग एएक्स प्रारूपों में) का उपयोग करेगा।

इस वेब को अपनी web.config फ़ाइल में चिपकाएं, जहां full configuration wiki page में सुझाया गया था।

<behaviors> 
    <add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" /> 
</behaviors> 

फिर कुल्हाड़ी के बजाय 'FetchRequest ताकि व्यवहार अपना काम कर सकते हैं का उपयोग ClaimsRequest/ClaimsResponse (sreg)।

चूंकि आपने बताया है कि आप myopenid.com के खिलाफ परीक्षण कर रहे हैं, इसलिए मैं सिर को भी फेंक दूंगा कि ऐसा लगता है कि जब आप 'लोकलहोस्ट' पर एक आरपी का परीक्षण कर रहे हैं तो उन्होंने एक्सटेंशन समर्थन बंद कर दिया है। आपकी आरपी को स्पष्ट रूप से सम्मानित होने के लिए विशेषता अनुरोध के लिए सार्वजनिक होना चाहिए और यहां तक ​​कि खोजने योग्य (आरपी ​​खोज के लिए ओपनआईडी 2.0 नियमों के अनुसार) होना चाहिए। यह हो सकता है कि आप क्या चल रहे हैं।

+0

मैं शर्त लगाता हूं कि 'लोकलहोस्ट' समस्या समस्या है। मुझे अभी तक इसका परीक्षण करने का मौका नहीं मिला है, लेकिन मैं इसे दोपहर यहां पोस्ट करूंगा जब मुझे इसे देखने का मौका मिलेगा। – Micah

+0

मुझे यह सहायक पाया, क्योंकि मैं myopenid से स्थानीयहोस्ट से एक्सटेंशन प्राप्त करने में असमर्थ हूं। धन्यवाद एंड्रयू – eiu165

+0

यह मेरी समस्या हल हो गया, एंड्रयू धन्यवाद! जोड़ने के लिए एक बात यह है कि यह 'relyingParty' के तहत 'व्यवहार' है। –

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