2014-12-16 2 views
1

Я хочу написать простое приложение на основе ASP.NET MVC, которое принимает имя пользователя и пароль пользователя через поле формы, затем выполняет аутентификацию в Office 365 и выполняет простой поиск в Календаре для этого пользователя. Мне не нужна какая-либо фантастическая логика, отличная от приведенной выше. Я не хочу, чтобы пользователь перенаправлялся на любые сайты - у меня уже есть имя пользователя/пароль пользователя Office 365.Как выполнить простую аутентификацию от MVC до Office 365 AD

Мой код до сих пор - но он терпит неудачу с ссылкой на объект не на первом authContext.AquireTokenAsync вызова:

internal static async Task<OutlookServicesClient> EnsureOutlookServicesClientCreatedAsync(string capabilityName, 
    string username, string password) 
{ 

    var signInUserId = username; 

    AuthenticationContext authContext = new AuthenticationContext(SettingsHelper.Authority, 
     new NaiveSessionCache(signInUserId)); 

    try 
    { 
     DiscoveryClient discClient = new DiscoveryClient(SettingsHelper.DiscoveryServiceEndpointUri, 
      async() => 
      { 
       var authResult = 
        await 
         authContext.AcquireTokenAsync(SettingsHelper.DiscoveryServiceResourceId, 
          SettingsHelper.ClientId, new UserCredential(signInUserId, password)); 

       return authResult.AccessToken; 
      }); 

     var dcr = await discClient.DiscoverCapabilityAsync(capabilityName); 

     return new OutlookServicesClient(dcr.ServiceEndpointUri, 
      async() => 
      { 
       var authResult = await authContext.AcquireTokenAsync(dcr.ServiceResourceId, 
        SettingsHelper.ClientId, new UserCredential(signInUserId, password)); 

       return authResult.AccessToken; 
      }); 
    } 
    catch (AdalException exception) 
    { 
     //Handle token acquisition failure 
     if (exception.ErrorCode == AdalError.FailedToAcquireTokenSilently) 
     { 
      authContext.TokenCache.Clear(); 
      throw exception; 
     } 
     return null; 
    } 
} 

Может кто-нибудь посоветовать, как я должен выполнить эту логику аутентификации без перенаправления пользователя какой-то портал?

ответ

0

Вы не можете. Для OutlookServicesClient требуется поток OAuth, который имеет пользовательский вход через перенаправления на конечную точку OAuth (login.windows.net). Вам не нужно запрашивать у пользователя свое имя пользователя или пароль, поскольку все это обрабатывается конечной точкой OAuth.

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