2017-04-13 13 views
7

मैं डायनेमिक्स सीआरएम ऑनलाइन 2016 और बिज़टॉक 2013 आर 2 के साथ सर्वर-टू-सर्वर एकीकरण को लागू करने की कोशिश कर रहा हूं। मैं WebHttpBinding उपयोग कर रहा हूँ सीआरएम वेब एपीआई, जो एक वाहक टोकन एक http हेडर के रूप में आपूर्ति की आवश्यकता है कॉल करने के लिए:सीआरएम ऑनलाइन मेरे परिदृश्य में 401 अनधिकृत क्यों लौटाता है?

Authorization: Bearer [base64string]

मैं एक ग्राहक संदेश निरीक्षक जो पहुंच टोकन प्राप्त करने के लिए ADAL का उपयोग कर Azure AD कॉल लिखा है ।

var token = context.AcquireTokenAsync(this.ResourceUri, assertionCert).Result;

  • ResourceUrihttps://[myorganisation].crm4.dynamics.com
  • assertionCert है एक ClientAssertionCertificate एप्लिकेशन पंजीकरण आवेदन आईडी का उपयोग करके बनाए और है: यह एक ग्राहक अभिकथन प्रमाण पत्र है, जो हमारे ई किरायेदार में पंजीकृत एप्लिकेशन को सौंपा गया है के साथ सुरक्षित है मशीन सर्टिफिकेट स्टोर में एक x509 प्रमाण पत्र जो कि ऐप में पंजीकृत है, जो कि KeyCredential

यह 'काम करता है' एक टोकन बदलता है और मैं दावों का निरीक्षण करने के लिए इस टोकन को डीकोड कर सकता हूं - उनमें से एक उचित संख्या है, मेरे पास यह बताने का कोई तरीका नहीं है कि यह उन दावों का सेट है जो सीआरएम की आवश्यकता है।

एडी ऐप पंजीकरण सीआरएम उदाहरण के लिए प्रतिनिधि अनुमतियों के साथ कॉन्फ़िगर किया गया है।

मैंने सीआरएम स्थानीय उपयोगकर्ता में ऐप पंजीकरण के लिए एप्लिकेशन आईडी सेट की है।

वेबएपीआई को कॉल करने और इस टोकन की आपूर्ति करने पर, सीआरएम 401 unauthorized के साथ प्रतिक्रिया करता है।

मैंने एक ही प्रक्रिया को पावरहेल स्क्रिप्ट और पोस्टमैन में दोहराया है, जिनमें से सभी एक ही व्यवहार दिखाते हैं।

सीआरएम को मेरे एक्सेस टोकन को स्वीकार करने के लिए मुझे और क्या करना चाहिए?

# 1 संपादित करें: - इस/बजाय/टोकन प्राधिकरण के साथ समाप्त होने को छोड़कर एक ही मूल्य कर रही है न कि जो गतिशील AuthenticationParameters के माध्यम से अधिकार प्राप्त करने के बाहर आता है की तुलना में https://login.windows.net/[my-tenant-id]/oauth2/token करने का अधिकार यूआरआई हार्डकोड। यह शून्य अंतर बनाता है।

संपादित करें # 2: एक प्रशासक जो मैं काम कर रहा हूं, मुझे बताया गया है कि जिस एप्लिकेशन उपयोगकर्ता का उपयोग करने की उम्मीद है, उसके पास कोई उपयोगकर्ता भूमिका नियुक्त नहीं की गई थी - इसमें एक भूमिका निभाने के लिए संशोधित किया गया है जिससे एपीआई एक्सेस की अनुमति होनी चाहिए, लेकिन यह भी कोई फर्क नहीं पड़ता।

संपादित करें # 3: ऐप पंजीकरण के लिए मैनिफेस्ट में oauth2AllowImplicitFlow सेट करें। इससे कोई फर्क नहीं पड़ता है।

संपादित करें # 4: एक नया ऐप पंजीकरण बनाकर कुछ प्रगति की, इस बार एक वेब ऐप के बजाय एक मूल ऐप के रूप में। मैं एक ग्राहक गुप्त का उपयोग कर एक टोकन पाने में कामयाब रहे, और इस स्वीकार कर लिया गया - लेकिन जब अनुप्रयोग के लिए एक प्रमाण पत्र बताए, और पहले की तरह एक ClientAssertionCertificate पेश, मैं प्राधिकारी से प्रतिक्रिया मिल:

Error validating credentials. AADSTS50012: Client is public so a client_assertion' should not be presented.

क्यों? 'ग्राहक सार्वजनिक है' का क्या अर्थ है? बस काम!

+0

यह उपयोगी लग रहा है (मैं BizTalk बारे में कुछ नहीं पता है, सीआरएम एसडीके किसी भी तरह शामिल हो? यह चीजों को आसान बनाने नहीं कर सकते हैं) https://social.technet.microsoft.com/wiki/contents/articles/33960.microsoft -biztalk-सर्वर 2013 एकीकरण-साथ-माइक्रोसॉफ्ट-गतिशीलता सीआरएम-ऑनलाइन-2016.aspx (या https://code.msdn.microsoft.com/windowsdesktop/Integration-Between-84041e55) – Alex

+0

उल्लेख किया है नहीं करना चाहिए BizTalk - इस बिंदु पर समस्या के साथ वास्तव में कुछ भी नहीं है। मैंने पावरहेल स्क्रिप्ट का उपयोग करके प्रमाणीकरण विफलता को पुन: उत्पन्न किया है, जो कि बिज़टॉक को बिल्कुल स्पर्श नहीं करता है। इसके अलावा यह लिंक संगठन सेवा से संबंधित है, न कि वेब एपीआई। –

+0

तब मेरा सुझाव है कि NuGet से Xrm.Tooling.Connector को पकड़ना और कोड की एक पंक्ति में समस्या को हल करना (यह पहले से ही ऑथ का ख्याल रखता है)। जब तक मैं कुछ और याद नहीं कर रहा हूं (बहुत अच्छी तरह से हो सकता है) – Alex

उत्तर

0

Hrrrmph!

बाहर कर देता है कि मूल स्थिति मैं कोशिश की थी और साथ में विफल रहा है, अब काम करता है।

  • सीआरएम ऑनलाइन
  • को प्रत्यायोजित अनुमति के साथ वेब अनुप्रयोग पंजीकरण क्लाइंट मशीन पर एक ग्राहक प्रमाणपत्र स्थापित है, और अनुप्रयोग के लिए यह एक ही प्रमाण पत्र रजिस्टर New-AzureADApplicationKeyCredential
  • एक सीआरएम आवेदन उपयोगकर्ता एप्लिकेशन को पंजीकरण का उपयोग कर लिंक इस उद्देश्य के लिए बनाया गया है (वे मूल रूप से इंटरैक्टिव उपयोगकर्ताओं के लिए अलग हैं) - एनबी इस स्क्रीन ADAL से
  • कॉल AcquireTokenAsync() को खोजने के लिए आसान नहीं है
  • बस काम करता है

मैं एक नुकसान में हूँ समझाने के लिए क्यों यह पहली बार मैं इसे करने की कोशिश काम नहीं किया, सीआरएम नहीं है के रूप में टोकन सत्यापन विफल क्यों हुआ, इस बारे में कोई जानकारी प्रदान करें।

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