मैं डायनेमिक्स सीआरएम ऑनलाइन 2016 और बिज़टॉक 2013 आर 2 के साथ सर्वर-टू-सर्वर एकीकरण को लागू करने की कोशिश कर रहा हूं। मैं WebHttpBinding उपयोग कर रहा हूँ सीआरएम वेब एपीआई, जो एक वाहक टोकन एक http हेडर के रूप में आपूर्ति की आवश्यकता है कॉल करने के लिए:सीआरएम ऑनलाइन मेरे परिदृश्य में 401 अनधिकृत क्यों लौटाता है?
Authorization: Bearer [base64string]
मैं एक ग्राहक संदेश निरीक्षक जो पहुंच टोकन प्राप्त करने के लिए ADAL का उपयोग कर Azure AD कॉल लिखा है ।
var token = context.AcquireTokenAsync(this.ResourceUri, assertionCert).Result;
ResourceUri
https://[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.
क्यों? 'ग्राहक सार्वजनिक है' का क्या अर्थ है? बस काम!
यह उपयोगी लग रहा है (मैं 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
उल्लेख किया है नहीं करना चाहिए BizTalk - इस बिंदु पर समस्या के साथ वास्तव में कुछ भी नहीं है। मैंने पावरहेल स्क्रिप्ट का उपयोग करके प्रमाणीकरण विफलता को पुन: उत्पन्न किया है, जो कि बिज़टॉक को बिल्कुल स्पर्श नहीं करता है। इसके अलावा यह लिंक संगठन सेवा से संबंधित है, न कि वेब एपीआई। –
तब मेरा सुझाव है कि NuGet से Xrm.Tooling.Connector को पकड़ना और कोड की एक पंक्ति में समस्या को हल करना (यह पहले से ही ऑथ का ख्याल रखता है)। जब तक मैं कुछ और याद नहीं कर रहा हूं (बहुत अच्छी तरह से हो सकता है) – Alex