2015-01-26 2 views
0

У меня возникли проблемы с аутентификацией OAuth .NET для аутентификации Azure для мобильных сервисов в ASP.NET 5.0. Я пытаюсь внедрить внешний логин с Facebook, Twitter, Google и Microsoft.Azure MobileServiceClient не удалось аутентифицировать пользователя в ASP.NET

Я успешно получаю access_token из всех внешних источников, а затем пытаюсь войти в MobileServiceClient.

вот мой код

  var app = System.Web.HttpContext.Current.Items["AzureClient"] as MobileServiceClient; 
      app.Logout(); 

      var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 
      var accesToken = loginInfo.ExternalIdentity.Claims.FirstOrDefault(c => c.Type == "access_token"); 
      MobileServiceUser user = null; 
      if (providerName == "Microsoft") 
      { 
       user = await app.LoginWithMicrosoftAccountAsync(accessToken); 
      } 
      else 
      { 
       var token = new JObject(); 
       token.Add("access_token", accessToken); 
       user = await app.LoginAsync(loginInfo.Login.LoginProvider, token); 
      } 

И я получаю проверку подлинности, но только с facebook лексемы. Microsoft и Google бросают 401 несанкционированное исключение. Щебет бросает «Метод не допускается». Что я делаю неправильно? Я дважды проверял, что секрет приложения и ключи приложения заполняются для всех провайдеров на лазурном портале управления. Пожалуйста, помогите

ответ

0

Я не уверен, что токены из социальной сети могут быть перенаправлены на MobileServiceClient или нет, но он работает с facebook и не работает со всеми остальными. Я действительно озадачен этим поведением;

Наконец-то я создал приложение ActiveDirectory и использовал метод ADAL AcquireToken для получения токена AD для моего MobileServicesClient. Как описано здесь Azure Website Single Sign On accessing Azure Mobile Service from Azure Active Directory as User

вот мой метод получения маркера от

AD
private string GetAdToken() 
    { 
     string clientID = "<clientId>"; 
     string authority = "<AuthorityUrl>"; 
     string resourceURI = "<WebApiUrl>"; 
     var appKey = "<applicationKey>"; 

     var ac = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(authority); 
     var clientCredential = new ClientCredential(clientID, appKey); 
     var ar = ac.AcquireToken(resourceURI, clientCredential); 
     Session["token"] = ar.AccessToken; 
     return ar.AccessToken; 
    } 

и вот мой метод, который запускается перед quering Azure DataTables через MobileServiceClient.

private async Task<MobileServiceUser> EnsureLogin() 
    { 
     var app = System.Web.HttpContext.Current.Items["AzureClient"] as MobileServiceClient; 
     app.Logout(); 
     JObject token = new JObject(); 
     token["access_token"] = Session["token"].ToString(); 
     return await app.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, token); 
    } 

Так что теперь это не значит, какой провайдер я использую для входа в мое веб-приложение. MobileServiceClient всегда работает с токеном объявления.

Я не уверен, что это приемлемая практика, но это работает, и, возможно, это поможет кому-то вроде меня, борется с лазурной аутентификацией.

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