2015-09-01 9 views
12

प्राधिकृत करने के लिए क्लाइंट-क्रेडेंशियल्स एक्सेस टोकन प्राप्त नहीं कर सकता है, मैं "क्लाइंट क्रेडेंशियल्स" विधि से प्राप्त एक्सेस टोकन का उपयोग करके पावर बीआई रीस्ट एपीआई का उपयोग करने की कोशिश कर रहा हूं, लेकिन मुझे अपने अनुरोधों पर 403 Forbidden मिल रहा है।पावर बीआई

मेरा कोड this AzureAD sample में प्रदर्शित पैटर्न का पालन करता है। वास्तव में, इस समस्या है, मैं उस नमूना कोड चल रहा हूँ (मेरे अपने मूल्यों के साथ parameters.json में, निश्चित रूप से) को अलग करने की:

{ 
    expiresIn: 3599, 
    tokenType: 'Bearer', 
    expiresOn: Tue Sep 01 2015 16:56:07 GMT-0500 (CDT), 
    resource: '00000002-0000-0000-c000-000000000000', 
    accessToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQiOiIwMDAwMDAwMi0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8xM2QxNzIwNC0wZGU2LTQ1NzQtOTgzYS05NjFhYjk0M2M3Y2UvIiwiaWF0IjoxNDQxMTQwNjcwLCJuYmYiOjE0NDExNDA2NzAsImV4cCI6MTQ0MTE0NDU3MCwidmVyIjoiMS4wIiwidGlkIjoiMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlIiwib2lkIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwic3ViIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlLyIsImFwcGlkIjoiNDQ2Y2Y5OTItMDQzYS00YjgxLWJhYzQtY2RlZWYyNGFhNzFjIiwiYXBwaWRhY3IiOiIxIn0.YTGJfdW1wP09bDHwwsv3FPAmEpmQdc_kifvgY-1KjhkZWANfYtd050wfeZdNgMUeSPZyFdWnoBjnJ4xrlDtnsADwV1Grr6TXYcymPLofbY-xy0cjyvzxTmM11DJ9XN8A4tkgvK0jtR-YyIjPw5EKJSKyeEbD9U3mWsE_gu7IzKzXl8e-dfVAqRYS6WHZy6_0FaNmppPDls5s_QIPOHofFSiWVISw41Mz0fQnP2QEGyceOCvKYJtrUOCDwfVuwFS-gSLmYvEGOJfmIjftP3srda0JPirVzBeU0IFJJ1KW81kE5cfKw1KkBB04VVetRUs_7HqloYaKKiTybauhXAodRQ', 
    isMRRT: true, 
    _clientId: '[snip]', 
    _authority: 'https://login.windows.net/[snip]' 
} 

जब मैं, एक curl अनुरोध में है कि पहुँच टोकन का उपयोग इस प्रकार है, मैं ब्राउज़र webtools के माध्यम से

curl -vv -X GET https://api.powerbi.com/v1.0/myorg/datasets -H"Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQiOiIwMDAwMDAwMi0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8xM2QxNzIwNC0wZGU2LTQ1NzQtOTgzYS05NjFhYjk0M2M3Y2UvIiwiaWF0IjoxNDQxMTQwNjcwLCJuYmYiOjE0NDExNDA2NzAsImV4cCI6MTQ0MTE0NDU3MCwidmVyIjoiMS4wIiwidGlkIjoiMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlIiwib2lkIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwic3ViIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlLyIsImFwcGlkIjoiNDQ2Y2Y5OTItMDQzYS00YjgxLWJhYzQtY2RlZWYyNGFhNzFjIiwiYXBwaWRhY3IiOiIxIn0.YTGJfdW1wP09bDHwwsv3FPAmEpmQdc_kifvgY-1KjhkZWANfYtd050wfeZdNgMUeSPZyFdWnoBjnJ4xrlDtnsADwV1Grr6TXYcymPLofbY-xy0cjyvzxTmM11DJ9XN8A4tkgvK0jtR-YyIjPw5EKJSKyeEbD9U3mWsE_gu7IzKzXl8e-dfVAqRYS6WHZy6_0FaNmppPDls5s_QIPOHofFSiWVISw41Mz0fQnP2QEGyceOCvKYJtrUOCDwfVuwFS-gSLmYvEGOJfmIjftP3srda0JPirVzBeU0IFJJ1KW81kE5cfKw1KkBB04VVetRUs_7HqloYaKKiTybauhXAodRQ" 

ताज्जुब है कि कि curl अनुरोध किसी भी तरह त्रुटिपूर्ण था snooped out an access token “the wrong way”, मैं, और इसके बाद के संस्करण ठीक काम करता है, एक 200 और एक JSON प्रतिक्रिया मेरी डेटासेट लिस्टिंग लौटने: एक 403 मिलता है।

मैंने यह भी नोटिस किया कि रिटर्न कोड 403 (वर्जित) है, 401 (अनधिकृत) नहीं, इसलिए मुझे आश्चर्य हुआ कि क्या प्राधिकरण ठीक था, लेकिन पावर बीआई पक्ष की अनुमतियां गलत थीं। लेकिन जब मैं एक्सेस टोकन (उदाहरण के लिए, Authorization: Bearer foo) के लिए किसी भी कचरा पाठ का उपयोग करता हूं तो मुझे 403 भी मिलता है, इसलिए मैंने उस सिद्धांत को त्याग दिया।

तो। मुझे लगता है कि मेरे पास एक वैध परीक्षण है, और मुझे लगता है कि मुझे लगता है कि एक वैध पहुंच टोकन है (उस client-credentials-sample.js कोड से), लेकिन यह अभी भी काम नहीं कर रहा है। मैं क्या खो रहा हूँ?

+0

मुझे अपना कोड भेजें और मैं इसे आपके लिए http://bit.ly/emailjon डीबग कर दूंगा। मैं पावर द्वि टीम पर हूं। –

+2

यह हास्यास्पद है। मैंने कभी देखा है एक आरईएसटी एपीआई का उपयोग करने में सबसे परेशानी है। आम तौर पर इसके जोड़े को एक कुंजी या टोकन प्राप्त करने के लिए क्लिक किया जाता है और कुछ ही मिनटों में आप डाकिया के माध्यम से परिणाम प्राप्त कर सकते हैं। पीबीआई टीम ने एपीआई को सक्षम करने के लिए स्वचालित वेब पेज क्यों नहीं बनाया और वास्तविक खाता प्रमाण-पत्रों के आधार पर नमूना कॉल जेनरेट कर सकते हैं जैसे कि कई अन्य लोग करते हैं? – Lee

उत्तर

5

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

मैं उपयोग करने की कोशिश:

  1. समान JavaScript का नमूना username-password-sample.js
  2. https://analysis.windows.net/powerbi/api के resource मूल्य (धन्यवाद, slugslog)
  3. parameters.json

करने के लिए username और password जोड़ने वह मुझे करीब मिला, लेकिन मुझे अभी भी 400 प्रतिक्रिया मिल रही थी: "error_description":"AADSTS90014: The request body must contain the following parameter: 'client_secret or client_assertion'. …"

adal-node पुस्तकालय के लिए एक हैक (ग्राहक गुप्त हार्डकोड, जैसे कि, oauthParameters[OAuth2Parameters.CLIENT_SECRET] = "my-client-secret";line 217 of token-request.js के बाद) पहुंच टोकन जो अपने मूल curl कॉल के लिए Authorization शीर्षक में काम करता है वापस पाने के लिए पर्याप्त था।

बेशक हार्डकोडिंग उस मूल्य में मेरा अंतिम समाधान नहीं है। मैं adal-node लाइब्रेरी का उपयोग करने की योजना नहीं बना रहा हूं, वैसे भी। लेकिन जहां तक ​​इस प्रमाणीकरण मामले के लिए इस प्रमाण-अवधारणा को जाता है, यही वह जवाब है जो मैं आया था।

+0

धन्यवाद साझा करने के लिए! –

+0

@cgrayson क्या आपको कभी इसके लिए कोई और समाधान मिला? मेरा मतलब है, क्या कोई अन्य लाइब्रेरी है जो सही पहुंच टोकन देता है? –

+0

@ विश्वासाशशिधर नहीं, मैंने कभी नहीं किया। हम एक्सेस टोकन प्राप्त करने और उपयोग करने के लिए अपने स्वयं के तरीकों को कोडिंग करते हुए घायल हो गए। – cgrayson

2

सुनिश्चित करें कि आपने एएडी के साथ पंजीकृत ऐप को सभी डेटासेट अनुमति को पढ़ा है। इससे समस्या का समाधान होना चाहिए।

+0

"एप्लिकेशन" के लिए "कॉन्फ़िगर करें" टैब पर, "अन्य अनुप्रयोगों की अनुमतियों" के अंतर्गत "पावर बीआई सेवा" के अंतर्गत "कॉन्फ़िगर करें" टैब पर Azure सक्रिय निर्देशिका में देख रहे हैं। यह "एप्लिकेशन अनुमतियां: 0" दिखाता है (वह तीर बदलने के लिए कुछ भी पॉप नहीं करता है), और "प्रतिनिधि अनुमतियां: 7" (वह ड्रॉपडाउन सभी बक्से को चेक करता है, जिसमें "सभी डेटासेट (पूर्वावलोकन) पढ़ें और लिखें") शामिल हैं। उपर्युक्त परीक्षणों से पहले ही यही सेट किया गया था; मैंने अभी तक कुछ भी नहीं बदला है। क्या मैं सही जगह पर देख रहा हूँ? – cgrayson

+0

मैंने ऊपर दिए गए उदाहरण में आपके पास टोकन खोल दिया है। मुझे इसमें उन अनुमतियों को नहीं दिख रहा है। जांच करने वाली पहली बात यह है कि आप उसी ऐप आईडी का उपयोग कर रहे हैं जिसे आप एएडी में देख रहे थे। यदि हां, तो क्या यह एक वेब ऐप या मूल ऐप है? –

+0

हम्म, मुझे यकीन नहीं है कि "ऐप आईडी" क्या है? मुझे यह पता चलता है कि Azure में और/या इसे क्लाइंट साइड पर सेट किया गया है? मैंने 'क्लाइंट आईडी' पर अपने लुकअप से मेल खाया, यह वही है। और यह एक वेब ऐप है। कम से कम, यह होने की कोशिश कर रहा है। :-) – cgrayson

2

यह एक उत्तर नहीं है लेकिन डीबग प्रक्रिया में एक कदम आगे है। मुझे लगता है कि जिस संसाधन के लिए टोकन का अनुरोध किया गया है वह "https://analysis.windows.net/powerbi/api" होना चाहिए। मैंने इन्हें कई संदर्भों में देखा है; उनमें से एक नीचे से जुड़ा हुआ है। इसे बदलने के बाद भी, मुझे अभी भी 403 मिलते हैं। चूंकि ओपी ने उल्लेख किया है कि अगर हम पावरबीआई पोर्टल से एक्सेस टोकन का उपयोग करते हैं, तो सबकुछ काम करता है।

http://blogs.msdn.com/b/richard_dizeregas_blog/archive/2015/02/24/building-apps-with-the-new-power-bi-apis.aspx&ei=HzQDaQP3&lc=en-IN&geid=7&s=1&m=620&ts=1443608339&sig=APONPFlUC04ktQuEYWqI_VKfMqvxascf0A

+0

मुझे किसी भी तरह से https://analysis.windows.net/ तक पहुंचने का प्रयास करते समय "सर्वर नहीं मिला" मिलता है। यह भी स्पष्ट नहीं है कि आप कहां सुझाव दे रहे हैं कि यूआरएल का इस्तेमाल किया जाएगा। "प्राधिकरण होस्ट यूआरएल" के रूप में (जैसा कि [यहां] (https://github.com/AzureAD/azure-activedirectory-library-for-nodejs/blob/master/sample/client-credentials-sample.js#L50) के रूप में? या वास्तविक बीआई अनुरोध के लिए लक्ष्य के रूप में (जैसा कि मेरे मूल 'कर्ल' उदाहरण में)? – cgrayson

+0

जो कि "संसाधन" संपत्ति का मूल्य होना चाहिए जिसके लिए आप टोकन का अनुरोध कर रहे हैं। यहां एक नोडजेज़ नमूना है जिसके साथ मैं काम कर रहा हूं। यह '00000009-0000-0000-c000-000000000000' मान के स्थान पर है जिसका आप वर्तमान में उपयोग कर रहे हैं। – slugslog

2

तो मैं अपने खुद के एप्लिकेशन के साथ यह कोशिश की, निम्न आदेश काम करता है (मेरे लिए):

curl -vv -X GET https://api.powerbi.com/v1.0/myorg/datasets -H"Authorization: Bearer ey....qqqq" 

Btw, अतिरिक्त -v के बाद "वी" निरर्थक लगता है।

तो मैं क्या निष्कर्ष निकाल सकता हूं कि आपके एप्लिकेशन में पावर बीआई के एपीआई को कॉल करने के लिए आवश्यक अनुमतियां अनुपलब्ध हैं।

एक चीज जो आप कोशिश कर सकते हैं वह हमारे नमूने में से एक है, इसके लिए एएडी में एक नया एप्लीकेशन बनाएं, और फिर देखें कि प्राधिकरण टोकन इसके लिए काम करता है या नहीं। यहाँ की कोशिश करने के लिए एक अच्छा एक है: https://github.com/PowerBI/Integrate-a-tile-into-an-app

+0

हाँ, आप मेरे '-vv' के बारे में सही हैं। लाइन के साथ कहीं मैंने सोचा कि 'curl' में से एक था वे आदेश जो अधिक 'v' के साथ शब्दकोष बढ़ाते हैं, लेकिन [nope] (http://stackoverflow.com/questions/24402473/what-is-meaning-of-vvv-option-in-curl-request) – cgrayson

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