3

Какова наилучшая практика использования мобильных услуг в лазурном режиме для использования разных провайдеров аутентификации (Facebook, Google, Windows e.t.c.) и понимать, что эти три входа принадлежат одному и тому же пользователю.Как связать разные провайдеры аутентификации в лазурных мобильных сервисах

Если пользователь1 использует Facebook для аутентификации на своем мобильном телефоне и добавляет некоторую информацию в приложение, а затем он (user1) пытается войти в систему с Google на своем планшете, он не увидит свою информацию , Потому что это два разных пользователя с разными токенами. И я хочу получить дополнительную информацию от поставщиков проверки подлинности (электронная почта) и иметь свою собственную таблицу пользователей, которая содержит электронную почту и другую информацию профиля, доступную для пользователя, независимо от того, какой поставщик он использует. Как я могу это достичь?

P.S. Я использую .NET как бэкэнд и Windows Phone как клиент.

ответ

2

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

Важная деталь здесь заключается в том, что токен мобильных сервисов сопоставляется с одним идентификатором поставщика. Если вы посмотрите на ID пользователя, это на самом деле провайдер: providerID. Поэтому нам нужно получить два токена и проверить их вместе, чтобы связать два идентификатора.

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

string existingToken = App.MobileService.CurrentUser.MobileServiceAuthenticationToken; 
App.MobileService.Logout(); // allows login with new provider 
await App.MobileService.LoginAsync("google"); 
await App.MobileService.InvokeApiAsync("associateToken", existingToken); 

На сервере, вы должны быть в состоянии проверить existingToken (новый один неявным подтверждено ограничение API для AuthorizationLevel.User)

В этом API можно проверить маркер с помощью:

IServiceTokenHandler handler = this.Request.GetConfiguration().DependencyResolver.GetServiceTokenHandler() 
ClaimsPrincipal claimsPrincipal; 
bool didValidate = handler.TryValidateLoginToken(existingToken, ConfigurationManager.AppSettings["MS_MasterKey"], claimsPrincipal); 

Возможно, вы также должны найти идентификатор пользователя в таблице поиска, чтобы избежать конфликтов.

Итак, это общий пример возможного решения. К сожалению, нет ничего более под ключ.