Проверка маркера мобильной службы Azure в службе WebApi

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

Я планирую экспортировать аутентификацию в федеративную облачную службу, такую ​​как новая мобильная служба Azure. Клиентское мобильное приложение будет использовать поток аутентификации Mobile Service, получать токен, а затем отправлять его в заголовках запросов в WebApi, который, в свою очередь, проверит его и извлечет из него UserId.

Предполагая, что я уже настроил WebApi для проверки токенов JWT с помощью перехватчика DelegatingHandler, можно ли проверить токены, выпущенные мобильной службой Azure?

Какими должны быть правильные значения SymmetricKey, Issuer и Audience?

Я иду в правильном направлении?


person Liel    schedule 15.08.2013    source источник


Ответы (2)


Сообщение на странице http://www.thejoyofcode.com/Generating_your_own_ZUMO_auth_token_Day_8_.aspx показывает, как создайте токен службы Azure Mobile, но он также содержит информацию, необходимую для его проверки. По сути, ключ, который вам нужно использовать для проверки, — это главный ключ от службы (не распространяйте этот ключ среди клиентов, но если он надежно закодирован в вашей службе, это должно быть нормально). Аудитория зависит от провайдера, создавшего токен (например, для FB это строка "Facebook"). Эмитент установлен как urn:microsoft:windows-azure:zumo.

person carlosfigueira    schedule 15.08.2013
comment
Спасибо за это! Однако мне не удается проверить токен JWT, полученный от Azure в WebApi, поэтому на данный момент у меня нет рабочего решения... Я спросил отдельный вопрос SO для более подробной информации. - person Liel; 16.08.2013
comment
На GitHub есть проект под названием MyVote, в котором реализована базовая реализация средства проверки токена JWT. Этот код был взят из старого образца ASP .NET, который был удален. Я добавил проблему в SDK мобильных сервисов, чтобы предоставить нам специальный валидатор токенов для JS и управляемого бэкэнда. Вот ссылка на репозиторий MyVote - person awsomedevsigner; 18.05.2014

Что вам нужно сделать в вашем проекте WebAPI, так это реализовать собственный обработчик сообщений для перехвата токена и проверки его подписи с использованием того же главного ключа из AMS. На GitHub есть проект, в котором показано, как это сделать:

Проверка JWT

По сути, это производная от другого проекта GitHub, в котором есть исходный образец ASP.NET:

AuthenticationTokenSample

Основная проверка происходит при вызове метода ValidateSignature(), который берет байты представления UTF-8 сегмента претензии JWT и вычисляет для них MAC-адрес HMAC SHA-256 с использованием общего ключа из Azure Mobile Services. Если криптосегмент JWT и ранее рассчитанное значение, то есть подтверждение того, что ключ использовался для создания HMAC на JWT и что содержимое сегмента утверждения JWT не было изменено.

Единственное, что я нашел, это удалить добавленную строку "JWTSig" из добавления к главному ключу в методе ValidateSignature(). Похоже, что подписываемые токены больше не добавляют эту строку к главному ключу из AMS. У меня были всевозможные проблемы с прохождением проверки, пока я не удалил этот сегмент.

person atconway    schedule 18.02.2015