MS Graph VS Outlook REST API, OAuth, Win Store/UWP, Xamarin, WebAPI, SSO, Live SDK устарели — путаница

После нескольких часов гугления, чтения документации MS и примеров кода я еще больше запутался и нуждаюсь в совете по архитектуре.

По сути, мне нужно выяснить, какие API применимы и как с ними начать.

Фон

У меня есть существующее приложение (в настоящее время приложение XAML + c# win store 8.1) с бэкэндом odata WebAPI 2.2 (а также некоторыми страницами MVC).

Клиентское приложение прекрасно работает на машинах Win 8.1 и Win 10. Серверная часть находится на виртуальной машине Azure.

В настоящее время

  • Пользователи входят в приложение (как пользователь, с которым они вошли в Windows), используя свою учетную запись Microsoft.
  • Им не нужно вводить имена пользователей/пароли, они просто принимают разрешения (1x), которые я указываю с помощью областей, например. "wl.basic", "wl.emails", "wl.calendars"
  • Для этого я использую библиотеки Live Connect (Microsoft.Live.dll, v5.6.0.0)
  • Затем я получаю AuthenticationToken от LiveLoginResult.

e.g.

_loginResult.Session.AuthenticationToken
  • Который я передаю на сервер вместе с запросами odata.
  • Сервер использует это, чтобы найти их LiveID / UserID

e.g.

LiveAuthClient authClient = new LiveAuthClient(clientId, clientSecret, redirectUrl); 
string liveIdGuidAsString = authClient.GetUserId(authenticationToken);
  • Который затем я использую, чтобы найти соответствующего пользователя в моей БД и передать его содержимое odata в клиентское приложение.

Все хорошо.

Я хочу расширить свое приложение для синхронизации/интеграции с календарями пользователя Outlook

Кажется, разумным способом сделать это в наши дни было бы использование

  • API REST для Outlook
  • МС График

Также кажется, что MS может отключить Live API, которые я использую в настоящее время, в любое время?

https://msdn.microsoft.com/en-us/library/hh243641.aspx< /а>

Дополнительная сложность

Я также хотел бы (через пару месяцев) расширить приложение до

  • быть X-платформой (вероятно, с использованием традиционного Xamarin с совместным использованием кода PCL и «традиционными» проектами платформы xamarin для пользовательского интерфейса, возможно, с использованием MVVMCross)
  • разрешить пользователям использовать другие службы для аутентификации (все OAuth 2.0) - например. аккаунты гугл/гмейл

Это означает, что я хотел бы, если возможно, сделать что-то «сырым OAuth» для совместимости и НЕ привязывать себя к каким-либо конкретным API-интерфейсам MS (очевидно, что интеграция календаря Outlook / Outlook.com будет доступна только для тех пользователей с учетными записями MS)

Кроме того, у некоторых существующих пользователей есть учетные записи Outlook.com (которые они используют для входа в Windows), но данные их календаря хранятся в Hosted Exchange 2010.

Похоже, что для доступа к этим данным календаря этим пользователям придется либо переместить все свои данные Outlook 2016 в Outlook.com, либо настроить их как учетные записи Office 365 и перенести данные в новые учетные записи.

Вопросы

<сильный>1. Где/с кем я должен аутентифицироваться, чтобы получить свой код авторизации и токен доступа - MS Graph? или REST API Outlook

Я видел этот ответ (т.е. в основном предпочитаю MS Graph)

<сильный>2. Могу ли я сохранить замечательную функцию «без имени пользователя/пароля, просто принять разрешения» для моих пользователей в Windows 8.1 и 10 с использованием «учетных записей Microsoft»?

Конечно, с MS Graph кажется, что пользователи моей учетной записи Outlook.com / Microsoft не смогут продолжать входить в мое приложение на основе своего пользователя Windows без имени пользователя и пароля?

Документация также предполагает, что для использования MS Graph моими пользователями должны быть Office 365 / Azure Active Directory, чтобы попытаться свести к минимуму влияние и сохранить более широкую аудиторию, если я буду использовать API REST Outlook.

Но тогда предлагаемая библиотека для API-интерфейсов REST Outlook выглядит так: >ADAL, который, кажется, полагается на Azure Active Directory? Так не смогут ли мои существующие пользователи Outlook.com использовать это?

<сильный>3. Как долго я должен заменить Live SDK и использовать что-то другое?

По сути, я сбит с толку множеством вариантов и соображений и могу дать любой совет относительно того, какое направление выбрать.


person MemeDeveloper    schedule 02.04.2016    source источник


Ответы (3)


Здесь для вас есть другие варианты. Мы еще не полностью обновили нашу документацию, поэтому, пожалуйста, потерпите. Microsoft Graph поддерживает токены, выпущенные новой конечной точкой версии 2, и это поддерживает вход с помощью учетной записи Microsoft ИЛИ рабочей/учебной учетной записи AAD. После входа им будет предложено дать согласие на доступ вашего приложения к их данным. Если они входят в систему с учетной записью Microsoft, MS Graph будет направлять запросы на обслуживание в их почтовый ящик outlook.com, тогда как с учетной записью AAD они будут перенаправляться в их почтовый ящик O365. Ваше приложение и API, вызываемые вашим приложением (через MS Graph), работают одинаково, независимо от типа пользователя. У нас также есть новая клиентская библиотека .Net для MS Graph и предварительная клиентская библиотека .Net для проверки подлинности под названием MSAL (ADAL использует конечную точку v1, которая поддерживает только AAD, а MSAL поддерживает конечную точку v2, которая поддерживает MSA и AAD).

Вскоре мы выпустим больше примеров, но у нас уже есть примеры, демонстрирующие вызов MS Graph с использованием MSAL для получения токенов, которые будут работать для обычных и коммерческих пользователей: https://github.com/Azure-Samples/active-directory-xamarin-native-v2. Кроме того, этот образец также использует Xamarin!

Надеюсь это поможет,

person Dan Kershaw - MSFT    schedule 09.04.2016
comment
Это потрясающе, спасибо, я все проверю и отчитаюсь здесь. Я пытался использовать ADAL - теперь все имеет больше смысла! - person MemeDeveloper; 09.04.2016

Я сейчас делаю что-то подобное. Я использую Xamarin.Forms и сначала работаю на стороне UWP/Windows. Вот как я думаю, что это будет работать в долгосрочной перспективе:

  1. Я использую PCL для написания всей логики, поэтому мне приходится использовать интерфейс, который я загружаю с помощью var auth = DependencyService.Get<IAuthorization>(). Это трюк Xamarin, поэтому читайте об этом, чтобы узнать подробности.

  2. Я реализую сторону UWP с помощью WebAuthenticationBroker:

    var startUri = new System.Uri($"https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={Constants.AuthID}&redirect_uri={WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString()}&response_type=code&scope={WebUtility.UrlEncode(Constants.Scopes)}");
    
    var webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(Windows.Security.Authentication.Web.WebAuthenticationOptions.None, startUri,
            WebAuthenticationBroker.GetCurrentApplicationCallbackUri());
    
  3. Я НЕ понял, как заставить SSO работать. Однако в приложении UWP он запоминает мой логин и пароль (и разрешения), поэтому мне нужно только нажать имя пользователя, когда мне будет предложено войти в систему. Я все еще ищу, но область wl-signin здесь не работает.

  4. Для iOS и Android существует компонент Xamarin под названием Xamarin.Auth, который похоже имеет функции, аналогичные WebAuthenticaionBroker. Я узнаю больше, когда начну реализовывать эти функции. (Только что протестировано с Android и отлично работает для учетной записи MS ... см. комментарии для причуды.)

  5. Эти методы должны работать и для всех других служб.

person Lee McPherson    schedule 13.04.2016
comment
Это здорово Ли - очень ценю информацию. На данный момент я остановился на этом, ожидая, пока Auth0 вернется с информацией об их реализации материала MS - в основном хочу знать, используют ли они новую конечную точку v2, как упоминает @Dan выше, - которую, похоже, вы там используете? - person MemeDeveloper; 14.04.2016
comment
В данный момент у меня проблемы с Xamarin.Auth для Android. Если вы посмотрите на проблемы проекта GitHub, кто-то сообщает, что он вообще не работает. (Я получаю исключения нулевой ссылки после того, как модальное окно пытается закрыться.) Я где-то читал, что Xamarin полностью переписывает Xamarin.Auth и продемонстрирует свои новые возможности в конце апреля. - person Lee McPherson; 14.04.2016
comment
Я не пытался использовать Auth0, потому что это платная услуга. - person Lee McPherson; 14.04.2016
comment
Наконец, согласно документам, SSO должен работать, когда вы используете перегрузку AuthenticateAsync, которая имеет только два параметра (обратный вызов Uri опущен) И это разрешено на стороне сервера. Ну, мне кажется, это не очень хорошо работает. Я думаю, что это может быть проблема с кэшированием, но я еще не уверен. - person Lee McPherson; 14.04.2016
comment
Кажется, мое исключение NullReferenceException в Xamarin.Android было просто проблемой потери контекста в отладчике. Если я не сталкиваюсь с точками останова внутри обработчика событий для входа в систему, он работает нормально. Итак, Xamarin.Auth пока работает для меня... - person Lee McPherson; 14.04.2016
comment
Я отчитаюсь здесь, как только доберусь до этого, чтобы мы могли обменяться мнениями. Надеюсь, в ближайшие дни. Также интересно, почему Xamarin вместо использования собственного исполнения MS .net (все эти материалы MS для меня новы), но в прошлом использовали классический/традиционный Xamarin (приложение для Android + winRT) с MVVMCross (что я бы порекомендовал) - person MemeDeveloper; 14.04.2016
comment
Я думаю, что, поскольку он использует элементы пользовательского интерфейса, чтобы фактически позволить вам ввести свой логин и пароль (WebView или что-то в этом роде), он должен быть реализован изначально. Приложения UWP имеют WebAuthenticationBroker, который отлично работает. iOS и Android этого не делают, поэтому он был реализован в пакете Xamarin.Auth. Существуют альтернативы, такие как использование собственных SDK для каждой службы... Я читал, что, поскольку у Facebook есть собственный SDK для Android и iOS, вы должны использовать их для входа в систему, а не делать это самостоятельно. Не уверен, что это изменилось с тех пор, как те комментарии, которые я видел, были опубликованы. - person Lee McPherson; 14.04.2016
comment
Вау, какой беспорядок... Я работаю с Graph/Outlook/Live REST API, так как не могу понять, как включить бета-пакеты SDK в каждый из проектов Xamarin. Получается, что если вы хотите получить доступ к почтовому ящику (или календарю) пользователя, вам не повезло. Почтовые ящики Outlook.com еще не были обновлены, чтобы получать запросы от REST API. Однако вы можете запросить учетную запись разработчика, в которой она включена. Это, вероятно, требует совершенно нового ответа ... - person Lee McPherson; 15.04.2016
comment
да, я видел это - и видел, что моя собственная учетная запись еще не активирована. Я думаю, что если вы создадите новую учетную запись на Outlook.com, она будет включена, думаю, они работают с отставанием, когда они их тянут. Это то, что мы получаем за то, что мы на переднем крае, я думаю;) - person MemeDeveloper; 15.04.2016

Кажется, что Auth0.com - это, вероятно, путь сюда, поскольку он должен позволить мне обрабатывать вещи в общих чертах для различных поставщиков удостоверений, включая учетную запись Microsoft, и у них, похоже, есть надстройка / тип подключения (предприятие) для Azure AD. Кроме того, я использовал их раньше (хотя приложение так и не было запущено в производство), и это был приятный опыт.

Кажется, я должен иметь возможность достаточно легко входить в систему с помощью Auth0, и у них есть различные клиентские библиотеки для перехода на x-платформу (включая xamarin)

Учетная запись Microsoft (живая) «социальная связь», по-видимому, имеет области/разрешения для доступа к календарям и т. д.

Я еще не на 100 % уверен, что после входа в систему я смогу получить доступ к API MS Graph / API REST Outlook от имени пользователей Azure AD.

Похоже, что корпоративный тип подключения Azure AD имеет только некоторые v ограниченные разрешения/области для API Azure AD (т. е. перечисление пользователей в домене Azure и т. д.). Однако я еще не добавил подключение к Azure AD, поэтому, возможно, они недоступны глобально, но появятся, как только я это сделаю?

person MemeDeveloper    schedule 03.04.2016