1

Я создал службу мобильных приложений с Azure. Я создал новый пользовательский контроллер, как показано ниже.Аутентификация с пользовательским API-контроллером с Azure Mobile App и Xamarin

[MobileAppController] 
     public class NewsController : ApiController 
      { 
        public ApiServices Services { get; set; } 

        // GET api/News 
        public async Task<IEnumerable<NewsItem>> Get() 
        {//returns some data} 
      } 

В пределах Azure Я включил аутентификацию и установил параметры Active Directory, как показано ниже.

enter image description here

Я пытаюсь потреблять API внутри приложения Xamarin IOS.

Я создаю токен доступа через Active Directory, как показано ниже, и это работает и генерирует токен правильно.

public static class ServicePrincipal 
    { 
     static string authority = "https://login.microsoftonline.com/xxx"; 
     static string clientId = "xxx"; 
     static string clientSecret = "xx"; 
     static string resource = "xx"; 

     public static async Task<AuthenticationResult> GetS2SAccessTokenForProdMSA() 
     { 
      return await GetS2SAccessToken(); 
     } 

     static async Task<AuthenticationResult> GetS2SAccessToken() 
     { 
      try 
      { 
       AdalInitializer.Initialize(); 

       var clientCredential = new ClientCredential(clientId, clientSecret); 
       var context = new AuthenticationContext(authority, false); 
       var authenticationResult = await context.AcquireTokenAsync(
        resource, 
        clientCredential); 
       return authenticationResult; 
      } 
      catch (Exception ex) 
      { 

       throw; 
      } 

     } 
    } 

Однако, пытаясь использовать API, я всегда получаю несанкционированное исключение.

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

var client = new MobileServiceClient("THE URL"); 

      var authenticationResult = await ServicePrincipal.GetS2SAccessTokenForProdMSA(); 

      var authHeader = new Dictionary<string, string> { { "Bearer", authenticationResult.AccessToken } }; 

      var orderResult = await client.InvokeApiAsync("News", HttpMethod.Get, authHeader); 

Я также пробовал следующее, что тоже не работает.

CurrentPlatform.Init(); 


      var client = new MobileServiceClient("THE URL"); 

      var authenticationResult = await ServicePrincipal.GetS2SAccessTokenForProdMSA(); 


      JObject payload = new JObject(); 
      payload["access_token"] = authenticationResult.AccessToken; 


      await client.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload); 

Есть ли у вас какие-либо проблемы, как пройти мимо токена авторизации?

ответ

1

Я предлагаю включить ведение журнала приложений на портале Azure, а затем посмотреть, что такое ошибка аутентификации.

+1

Вот учебник о том, как добавить ведение журнала: https://azure.microsoft.com/en-us/documentation/articles/web-sites-enable-diagnostic-log/ –

+0

Большое спасибо, не пропустите эту попытку – Komainu85

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

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