Служба мобильных приложений Azure/клиент Xamarin iOS/пример поставщика удостоверений Okta

Вот моя текущая ситуация:

  • Xamarin iOS мобильное приложение (используя MobileServiceClient для входа)
  • Azure Mobile/App Service (ASP.NET Web API) с аутентификацией Azure AD

Я хотел бы изменить часть аутентификации этого процесса, чтобы она обрабатывалась Okta вместо Azure AD. Как настроить Okta или любую другую стороннюю Identity Provider Service, аналогичную Okta, в качестве ipd как для моего мобильного приложения, так и для веб-службы API? Azure утверждает, что вы можете использовать любого стороннего поставщика с поддержкой аутентификации, но я не вижу способа интегрировать такого поставщика в портал Azure.

Я нашел этот URL-адрес руководства по пользовательской аутентификации: https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter2/custom/

Из этого сообщения: IdentityServer 4 как поставщик удостоверений для службы приложений Azure< /а>

Это действительно единственный способ сделать это? Я бы предпочел продолжать использовать поток сервера через MobileServiceClient и настроить Azure для использования стороннего поставщика удостоверений OAuth. Есть ли у кого-нибудь пример или дополнительная информация о том, как это сделать?

Спасибо за вашу помощь, возможно, кто-то из команды Azure может просветить нас по этой теме, я пока не видел никакой документации или примеров того, как это сделать в их документации.

Клиент:

Нашел рабочую библиотеку для OAuth2 и OpenID, которая работала для интеграции с Okta: https://github.com/openid/AppAuth-iOS
https://github.com/openid/AppAuth-iOS/tree/master/Examples

с оболочкой Xamarin: https://github.com/xamarin/XamarinComponents/tree/master/XPlat/OpenId

Протестировал его с Okta для аутентификации клиента с двухфакторной аутентификацией, и он работает хорошо. Чтобы разобраться с частью службы приложений.


person Dmitry Samuylov    schedule 15.09.2017    source источник


Ответы (1)


После дополнительных исследований, проб и ошибок я нашел правильную комбинацию, которая работает для того, что я пытаюсь сделать. Вот схема того, что это такое:

Okta (identity provider)
  • настроить нативное приложение с Implicit (Hybrid) грантом
Mobile Client Server / Web Api
  • преобразовал мой веб-сервис asp.net web api в веб-сервис asp.net core web api, чтобы я мог использовать новейшее промежуточное ПО owin для проверки токенов носителя jwt, отправленных в заголовке вызовов на защищенные конечные точки, вот пример того, как это настроить с помощью Okta: https://developer.okta.com/quickstart/#/ios/dotnet/aspnetcore

Одно замечание, которое сбило меня с толку по пути:

  • в клиенте, после успешной аутентификации в Okta через компонент OpenID Connect, вы получите информацию о пользователе, которая будет включать id_token и access_token, хотя может показаться естественным использовать токен доступа для отправки с вашими вызовами API на сервер, это на самом деле это не так, предполагается, что токен доступа используется только для получения информации о пользователе и не является проверенным токеном, поскольку он регулярно регенерируется, токен id, с другой стороны, содержит подпись, которая необходима серверу для проверки заголовка и полезной нагрузки. токена не были подделаны, эту разницу между этими двумя токенами можно наблюдать по количеству частей с разделителями ., содержащихся в токене, токен доступа имеет только 2 части с разделителями ., заголовок и полезную нагрузку, токен id имеет 3 таких части , заголовок, полезная нагрузка и подпись

Подробнее о токенах jwt читайте здесь: https://auth0.com/learn/json-web-tokens/

person Dmitry Samuylov    schedule 12.10.2017