2016-12-28 10 views
0

Я пытаюсь получить образцы MSFT Power BI SDK. К сожалению, библиотека Microsoft.IdentityModel.Clients.ActiveDirectory дает мне много проблем с начальным шагом внешней аутентификации.NullReferenceException в Microsoft.IdentityModel.Clients.ActiveDirectory.AcquireToken

Я использую Microsoft.IdentityModel.Clients.ActiveDirectory, Version = 2.28.3.860, от NuGet; это последняя версия библиотеки до того, как AcquireToken был удален, и я не понял, как использовать его замену (AcquireTokenAsync) таким образом, который эквивалентен тому, что я вижу в образцах.

Когда я использую следующий код и изменяю строки TODO, чтобы указать мой фактический идентификатор клиента Azure и страницу перенаправления аутентификации, я добираюсь до строки AcquireToken.

using System; 
using Microsoft.IdentityModel.Clients.ActiveDirectory; 

public class Application 
{ 
    public static void Main(string[] args) 
    { 
     try 
     { 
      string clientID = "abcdef01-1234-1234-abcd-abcdabcd1234"; // TODO: actual Azure client ID 
      string redirectUri = "https://acmecorporation.okta.com/login/do-login"; // TODO: actual redirect 
      string resourceUri = "https://analysis.windows.net/powerbi/api"; 
      string authorityUri = "https://login.windows.net/common/oauth2/authorize"; 

      AuthenticationContext authContext = new AuthenticationContext(authorityUri); 
      AuthenticationResult ar = authContext.AcquireToken(
        resourceUri, 
        clientID, 
        new Uri(redirectUri), 
        PromptBehavior.RefreshSession); 
      string token = ar.AccessToken; 
      Console.WriteLine("Success: " + token); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 
    } 
} 

На данный момент:

  1. А «Войдите в свой аккаунт» окно выскакивает с именем приложения я связан в Azure с ClientId GUID
  2. Я нахожусь перенаправляется («acmecorporation») моей организации входа на странице
  3. Я войти используя свои учетные данные AD
  4. метод AcquireToken бросает следующий NullReferenceExpection:

    System.NullReferenceException: Object reference not set to an instance of an object. 
    at Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.RunAsyncTask[T](Task`1 task) 
    at Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.AcquireToken(String resource, String clientId, Uri redirectUri, PromptBehavior promptBehavior) 
    at PowerBISample.Application.Main(String[] args) in \\noxfile\users\ehirst\documents\visual studio 2015\Projects\PowerBISample\PowerBISample\Program.cs:line 18 
    

Может кто-нибудь дать указания о том, как обойти это? Моя цель - заставить POC работать, чтобы определить, можем ли мы интегрировать Power BI в более крупное приложение, но до сих пор мне кажется, что я бета-тестирование довольно неустойчивой системы.

+0

вы должны сообщить об ошибке с полным StackTrace на https://github.com/AzureAD/azure-activedirectory-library-for-dotnet –

+0

Возможный дубликат [Что такое NullReferenceException, и как это исправить ?] (http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) –

+0

Спасибо @ KanishkPanwar-MSFT. Да; Я новичок в Power BI и ADAL. Знать, что проблема в ADAL с открытым исходным кодом должна быть достаточной для продвижения вперед. –

ответ

0

Исключение NullReferenceException является ошибкой в ​​версии 2.x библиотеки ADAL; он исправлен в текущих версиях. Он был вызван неправильным значением redirectUri; к сожалению, документация была редкой по этому вопросу. Образец рабочего кода, адаптированный (спасибо Kanishk!), Чтобы использовать текущую версию ADAL 3.13.7, размещен ниже.

namespace PowerBISample 
{ 
    using System; 
    using Microsoft.IdentityModel.Clients.ActiveDirectory; 
    using System.Threading.Tasks; 

    public class Application 
    { 
     public static void Main(string[] args) 
     { 
      Run(); 
      Console.ReadLine(); 
     } 

     static async void Run() 
     { 
      try 
      { 
       string clientID = "abcdef01-1234-1234-abcd-abcdabcd1234"; // TODO: actual Azure client ID 

       /** THE REAL PROBLEM WAS HERE **/ 
       string redirectUri = "https://login.live.com/oauth20_desktop.srf"; 

       string resourceUri = "https://analysis.windows.net/powerbi/api"; 
       string authorityUri = "https://login.windows.net/common/oauth2/authorize"; 

       AuthenticationContext authContext = new AuthenticationContext(authorityUri); 

       AuthenticationResult ar = await authContext.AcquireTokenAsync(resourceUri, clientID, new Uri(redirectUri), new PlatformParameters(PromptBehavior.RefreshSession)); 
       string token = ar.AccessToken; 
       Console.WriteLine("Success: " + token); 
      } 
      catch (Exception ex) 
      { 
       string error = ex.ToString(); 
       Console.WriteLine(error); 
      } 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^