2015-04-30 3 views
0

Пока у меня это есть.Office 365 Rest Api Имея проблемы с получением токена доступа

 public static async Task<OutlookServicesClient> CreateOutlookClientAsync(string capability) 
 
     { 
 
      try 
 
      { 
 

 
       string authority = CommonAuthority; 
 

 
       // Create an AuthenticationContext using this authority. 
 
       _authenticationContext = new AuthenticationContext(authority); 
 

 
       //See the Discovery Service Sample (https://github.com/OfficeDev/Office365-Discovery-Service-Sample) 
 
       //for an approach that improves performance by storing the discovery service information in a cache. 
 
       DiscoveryClient discoveryClient = new DiscoveryClient(
 
        async() => await GetTokenHelperAsync(_authenticationContext, DiscoveryResourceId)); 
 

 
       // Get the specified capability ("Contacts"). 
 
       CapabilityDiscoveryResult result = 
 
        await discoveryClient.DiscoverCapabilityAsync(capability); 
 
       var client = new OutlookServicesClient(
 
        result.ServiceEndpointUri, 
 
        async() => 
 
         await GetTokenHelperAsync(_authenticationContext, result.ServiceResourceId)); 
 
       return client; 
 
      } 
 
      catch (Exception e) 
 
      { 
 
       Console.WriteLine(e.Message); 
 
       if (_authenticationContext != null && _authenticationContext.TokenCache != null) 
 
        _authenticationContext.TokenCache.Clear(); 
 
       return null; 
 
      } 
 
     } 
 

 
    }

private static async Task<string> GetTokenHelperAsync(AuthenticationContext context, string resourceId) 
 
     { 
 
      string accessToken = null; 
 
      AuthenticationResult result = null; 
 
      string myId = WebConfigurationManager.AppSettings["ida:ClientID"]; 
 
      string myKey = WebConfigurationManager.AppSettings["ida:Password"]; 
 
      ClientCredential client = new ClientCredential(myId,myKey); 
 
      
 
      result = await context.AcquireTokenAsync(resourceId, client); 
 
      //result =context.AcquireToken(resourceId, ClientID,_returnUri); 
 
      accessToken = result.AccessToken; 
 

 

 
      return accessToken; 
 
     }

Когда я получить в результате одной из двух вещей произойдет, если я пользователь AcquireTokenAsync я получаю сообщение об ошибке с указанием приложения с идентификатором XXXX не был найден в каталоге api.office.com в противном случае, если я запустил AcquireToken, я получаю модем входа в систему, но возникает ошибка, указывающая, что запрос должен содержать client_secret.

Я понятия не имею, как решить эту проблему. Я подозреваю, что это может иметь какое-то отношение к фактической конфигурации приложения. Я попытался создать собственное приложение в Azure AD и использовать VS Connected Service, у кого-нибудь еще столкнулись с аналогичным вопросы?

ответ

1

Основываясь на ошибках, которые вы видите, кажется, что проблема связана с тем, как зарегистрировано ваше приложение. Первая ошибка обычно возникает, когда приложение не помечено как мульти-арендатор, и вы входите в приложение с арендатором, отличным от того, где зарегистрировано приложение.

Вторая ошибка нечетная. Клиентский секрет - это то, что вы читаете из элемента ida:Password и передаете объект ClientCredential.

Вчера я только что положил .NET tutorial, который проходит через настройку этого материала. Взгляните и посмотрите, поможет ли вам разблокировать.

+0

Спасибо, Джейсон. Я использовал ваш учебник, чтобы получить токен auth, но теперь я получаю исключение с пустой ссылкой из mscorlib.dll – Frank

+0

Спасибо Джейсону за учебник! Я получил его работу с унифицированным API O365 :) Теперь я его интегрировал с моим приложением MVC, наконец! –

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