Основной проблемой у вас есть, использует Live ID (или, как они называют его сейчас - Microsoft Account). Невозможно получить электронную почту пользователя из Live ID, если вы просто используете ACS.Я лично люблю ACS и использую его, я просто не забочусь о учетной записи Microsoft или обрабатываю ее другими способами.
Если вы хотите ограничить доступ ко всему приложению только для администраторов, вы должны сделать две вещи: правила авторизации
- Setup в вашем
system.web
разделе, дающие доступ только Administrator
роли
- Настройка претензии Правило в ACS для генерации
Administrator
заявки на роль на основе некоторых входных критериев.
Шаг один довольно легко, просто добавьте следующую строку внутри system.web
раздела в файле web.config
:
<authorization>
<allow roles="Administrator" />
<deny users="?" />
</authorization>
Просто убедитесь, что нет никакого другого authorization
раздела в вашем web.config!
Второй шаг, легкая часть. Перейдите на портал управления ACS, затем перейдите в Rule Group, которая назначена для вашего приложения-получателя. И добавить новое правило со следующими критериями:
- Выберите поставщика удостоверений для правила (давайте предположим, Google)
- Выберите тип входного Claim быть:
http://schemas.xmlsoap.org/claims/EmailAddress
- Введите значение претензии:
[email protected]
(адрес электронной почты администратора)
- Выберите тип выходного претензии быть:
http://schemas.microsoft.com/ws/2008/06/identity/claims/role
- Введите значение для вывода требования:
Administrator
- Установите правильное описание правила, что-то вроде
[email protected] is Administrator
.
- Сохраните правило.
Выполнено. Повторите этот шаг для всех лиц, которым вы хотите предоставить разрешения администратора. Конечно, вы можете сделать это только для поставщиков удостоверений, которые дадут вам . Извините за пользователей учетной записи Microsoft.
Существует тривиальный способ предоставления разрешения администратора для держателей учетных записей Microsoft, когда они поступают через Azure ACS. Единственное, что у вас есть это имя Идентификатор претензии или http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
(я буду называть его NIC
для простоты
NIC
уникален по следующей комбинации:.. User Identity ([email protected])
+ ACS NameSpace
+ Relying Party Application
Это означает, что если [email protected]
лог-инов на ваш приложение через mygreat.accesscontrol.windows.net
вы получите для этого пользователя уникальную NIC
. Если те же самые пользовательские логины на моем сайте через someother.accesscontrol.windows.net
, я получу совершенно новый NIC
, который будет глобально уникальным снова, но не будет таким же, как один ваша заявка получена.
И, как вы можете им agine, вы не можете угадать NIC
для любого пользователя, который поступает из Live ID. Включение этого сценария для Live ID требует более сложной логики. Который у меня нет времени и пространства для описания здесь, но я мог бы найти время для хорошего сообщения в блоге.
Вы можете получить претензию NameIdentifier в своей логике приложения, как уже указывал Рик, но действительно ли вы хотите предоставить всем и любым пользователям роль «Администратор»? Плюс, я бы ушел от того, чтобы оставить мое приложение в беспорядке с Правилами в ACS для каждого входа в систему. Есть лучшие способы добиться того, чего вы хотите (как я уже сказал, время для ведения блога).
так что в основном я хочу, чтобы кто-то входил в систему с окнами live id ... [email protected], они создают идентификатор name = "x", я хочу видеть, что такое идентификатор имени в коде так что я делаю роль с этим выходом как требование в acs и называю эту роль admin. Теоретически мне нужно было бы сделать это для каждого пользователя. Если это не так, то это намного проще. Короче говоря, я хочу, чтобы выбранное количество пользователей, которых я предварительно идентифицирую, чтобы иметь доступ к моему веб-форме, потому что это только для администраторов –