2016-08-11 11 views
17

में Azure सक्रिय निर्देशिका समूह प्राप्त करना मैंने विजुअल स्टूडियो 2015 का उपयोग करके एक नई परियोजना बनाई और Azure सक्रिय निर्देशिका के विरुद्ध कार्य और विद्यालय खातों का उपयोग करके प्रमाणीकरण सक्षम किया।एएसपीनेट कोर प्रोजेक्ट

public async Task<IActionResult> Index() 
{ 
    var client = new HttpClient(); 
    var uri = "https://graph.windows.net/myorganization/users/{user_id}/$links/memberOf?api-version=1.6"; 

    var response = await client.GetAsync(uri); 
    if (response.Content != null) 
    { 
     ViewData["response"] = await response.Content.ReadAsStringAsync(); 
    } 

    return View(); 
} 

क्या मैं का उपयोग करें या सुनिश्चित करने के लिए इस कोड को परिवर्तित करने की आवश्यकता है:

app.UseStaticFiles(); 
    app.UseCookieAuthentication(); 
    app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
    { 
     ClientId = Configuration["Authentication:AzureAd:ClientId"], 
     ClientSecret = Configuration["Authentication:AzureAd:ClientSecret"], 
     Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], 
     CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"], 
     ResponseType = OpenIdConnectResponseType.CodeIdToken 
    }); 

    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "default", 
      template: "{controller=Home}/{action=Index}/{id?}"); 
    }); 

यहाँ अल्पविकसित कार्रवाई उपयोगकर्ता समूहों प्राप्त करने की कोशिश कोड है: यहाँ उत्पन्न कॉन्फ़िगर समारोह कैसा दिखाई देता है है मैं उपयोगकर्ता समूह प्राप्त कर सकता हूं? वर्तमान में, प्रतिक्रिया है:

{ 
    "odata.error":{ 
     "code":"Authentication_MissingOrMalformed", 
     "message":{ 
     "lang":"en", 
     "value":"Access Token missing or malformed." 
     }, 
     "values":null 
    } 
} 
+0

हाय किरण, क्या आपने इस प्रश्न के संबंध में कुछ भी पता लगाया है। मुझे एक ही समस्या है। धन्यवाद! –

+0

किरण, अगर आपको मेरा जवाब पसंद है, तो कृपया इसे चुनें। धन्यवाद। –

उत्तर

0

मैं इस पता लगाने की कोशिश पिछले 2 दिन बिताए और अंत में यह मिल गया। एज़ूर एडी एक चलती लक्ष्य है और एएसपीएनईटीसीओआर के साथ अभी भी एज़ूर एडी ग्राफ तक पहुंचने के तरीके पर अधिकांश दस्तावेज परिपक्व हैं। तो अभी इस तरह आप Azure AD Graph तक पहुंचने के बारे में जानेंगे। अपने अनुप्रयोग की clientid की

  1. ध्यान में रखना
  2. Azure सक्रिय निर्देशिका के साथ अपने एप्लिकेशन पंजीकृत
  3. कि पंजीकरण में एक कुंजी जनरेट करें और इसे को ध्यान में रखना (आप केवल इसे देख सकते हैं सही होने के बाद यह बनाया)
  4. अपने 'किरायेदार का नाम' को ध्यान में रखना (आप भी किरायेदार आईडी का उपयोग कर सकते)

तो फिर तुम एक पहुंच टोकन उत्पन्न करने के लिए इसके बाद के संस्करण की जानकारी का उपयोग करेगा, तो ग्राफ़ को कॉल करने कि टोकन का उपयोग करें।

public async void GetUsers() 
    { 
     // Get OAuth token using client credentials 
     string tenantName = "your-tenant-name.onmicrosoft.com"; 
     string authString = "https://login.microsoftonline.com/" + tenantName; 
     AuthenticationContext authenticationContext = new AuthenticationContext(authString, false); 
     // Config for OAuth client credentials 
     string clientId = "your-client-id"; 
     string key = "your-AzureAD-App-Key"; 
     ClientCredential clientCred = new ClientCredential(clientId, key); 
     string resource = "https://graph.windows.net"; 
     AuthenticationResult authenticationResult; 
     try 
     { 
      authenticationResult = await authenticationContext.AcquireTokenAsync(resource, clientCred); 
     } 
     catch(Exception ex) 
     { 
      throw new Exception(ex.Message, ex.InnerException); 
     } 

     var client = new HttpClient(); 
     var request = new HttpRequestMessage(System.Net.Http.HttpMethod.Get, "https://graph.windows.net/your-tenant-name.onmicrosoft.com/users?api-version=1.6"); 
     request.Headers.Authorization = 
      new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken); 
     var response = await client.SendAsync(request); 
     var content = await response.Content.ReadAsStringAsync(); 
    } 

एक अन्य बड़ा पकड़ लिया है कि आप पा सकते हैं कि मैं में और कई मंचों पर चर्चा कर रहे दौड़ा यदि आप एक Authorization_Request_Denied त्रुटि या Insufficient_Permissions त्रुटि मिलती है। Azure AD "Administrator" अनुमतियों के साथ पंजीकृत एप्लिकेशन को देने के लिए PowerShell कमांड चलाकर इसे हल किया जाता है। Requests to MS Graph API gives me "Authorization Request Denied - Insufficient privileges to complete the operation"

PowerShell आदेश आप चलाना चाहते हैं

Connect-MsolService 
$ClientIdWebApp = '{your_AD_application_client_id}' 
$webApp = Get-MsolServicePrincipal –AppPrincipalId $ClientIdWebApp 
#use Add-MsolRoleMember to add it to "Company Administrator" role). 
Add-MsolRoleMember -RoleName "Company Administrator" -RoleMemberType ServicePrincipal -RoleMemberObjectId $webApp.ObjectId 

उम्मीद है कि इस मदद करता है। अगर आपको लगता है कि किसी भी परिष्करण की जरूरत है तो मुझे बताएं।

+0

आपको कंपनी एडमिनिस्ट्रेशन भूमिका में सेवा प्रिंसिपल जोड़ने की आवश्यकता नहीं है .. इसे केवल सभी समूह को निर्दिष्ट अनुमति/निर्देशिका निर्देशिका ऐप अनुमति पढ़ने की आवश्यकता है। अगर आपको वह त्रुटि मिलती है तो इसका मतलब है कि प्रशासन सहमति नहीं दी गई है या अनुमति का अनुरोध नहीं किया गया था। – juunas

+0

उम्म्म .. -1 @juunas के लिए धन्यवाद। उत्तर उस अतिरिक्त बोली के ऊपर सबकुछ के बारे में अधिक था। और उपरोक्त आपके ज्ञान के विपरीत मैंने ऐप दिया था "सभी समूह प्रतिनिधि अनुमति/पढ़ें निर्देशिका डेटा ऐप अनुमति पढ़ें" और इसमें अभी भी अपर्याप्त अनुमतियां थीं। केवल ऊपर दिए गए अनुशंसित बोनस समाधान को लागू करने के बाद ही यह मेरे अनुरोध को वापस पूरा करता है। मुझे आशा है कि मेरा जवाब किसी ऐसे व्यक्ति की सहायता करेगा जिसने इस समस्या का सामना किया है। –

+0

ठीक है, मैंने उन अनुमतियों के साथ इस तरह के एक ऐप को लागू किया है। एक प्रिंसिपल बनाना उच्चतम व्यवस्थापक भूमिका उपलब्ध है आमतौर पर सिर्फ एक अच्छा विचार नहीं है। चूंकि प्रिंसिपल उस बिंदु पर किसी भी उपयोगकर्ता के पासवर्ड को रीसेट कर सकता है। – juunas

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