Аутентификация с помощью настраиваемого контроллера API с помощью мобильного приложения Azure и Xamarin

Я создал службу мобильных приложений с помощью Azure. Я создал новый настраиваемый контроллер, как показано ниже.

 [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, как показано ниже.

введите описание изображения здесь

Я пытаюсь использовать 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);

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


person Komainu85    schedule 17.05.2016    source источник


Ответы (1)


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

person Chris Gillum    schedule 18.05.2016
comment
Вот руководство о том, как добавить ведение журнала: azure.microsoft.com/en-us/documentation/articles/ - person lindydonna; 20.05.2016