Мое приложение ASP.NET MVC использует WIF 3.5 и Azure ACS для федеративной аутентификации с Google, Facebook и т. д. Во время регистрации, после аутентификации пользователя с помощью IdP, мы сохраняем пользовательские данные в нашей базе данных.
На данный момент он позволяет связать одну учетную запись пользователя с одним поставщиком удостоверений, но у меня есть требование добавить поддержку нескольких поставщиков удостоверений для одной учетной записи (т.е. пользователь может добавить Google, Facebook и т. д. в свою учетную запись, и он может использовать любой из этих IdP для входа на наш сайт). Чтобы добавить дополнительного IdP в свою учетную запись, пользователю необходимо сначала войти в систему основного IdP. Последовательности такие:
- Пользователь переходит на страницу входа, выбирает одного IdP (например, Google), входит в Google, Azure ACS перенаправляет обратно на наш сайт после аутентификации.
- На странице профиля пользователь выбирает добавить дополнительного IdP, он перенаправляется на страницу, чтобы выбрать IdP
- Он нажимает на другого IdP (например, Facebook), входит в Facebook, Azure ACS перенаправляет обратно на наш сайт (я вижу все правильные утверждения от Facebook, которые Azure ACS передал обратно на наш сайт)
Проблема в том, что я не знаю, как извлечь эти утверждения Facebook. Если я использую
HttpContext.Current.User.Identity как Microsoft.IdentityModel.Claims.IClaimsIdentity
Он возвращает утверждения Google (текущий IdP, в который входит пользователь)