Я искал (пробовал, даже) для ответа на этот вопрос, но пока не придумал ничего полезного. Я довольно новичок в ADFS, STS в целом и WIF, поэтому, пожалуйста, извините любое очевидное незнание или неправильное использование терминологии. ;)Как увидеть статус переадресации с STS/IdP
Я в настоящее время интегрирую пользовательское приложение MVC3 с внешним IdP через ADFS. Настройка ADFS для IdP выполняется и работает.
Некоторые части сайта доступны для пользователей anon - в режиме аутентификации web.config установлено значение none. Другие части защищены, если их контроллеры/методы действий оформлены пользовательским System.Web.Mvc.AuthorizeAttribute.
Все обычные модификации web.config для использования WsFederationAuthenticationModule выполнены и работают на 95%; пользователь может перейти к анонимным частям сайта. Когда они пытаются ударить защищенные части, атрибут authorize проверяет, есть ли у них некоторая пользовательская информация из нашего IdP в IClaimsPrincipals, связанная с HttpContext.Current.User, а затем устанавливает ActionResult в 401, если нет; WsFederationAuthenticationModule запускает и перенаправляет их на страницу входа IdP. Когда они вводят свои данные, они затем успешно перенаправляются с некоторыми кукидами FedAuth, и затем авторизация переходит.
Проблема начинается, когда они попадают на страницу входа IdP. Этот конкретный IdP имеет ссылку, чтобы вернуть вас прямо на наш сайт (на ту же страницу, на которую был сделан первоначальный запрос), причем этот ответ SAML внедрен где-то (это соответствует их документации)
urn: oasis: names: tc: SAML: 2.0: status: AuthnFailed
На данный момент они теперь «неавторизованные», и все пользователи будут видеть (по крайней мере, в dev) страницу 401. Вы должны убить сеанс или иначе избавиться от этого файла cookie, чтобы начать заново.
Что мне нужно сделать, это перехватить запрос на переадресацию из IdP и, по существу, проверить этот статус SAML, потому что пользователь должен быть перенаправлен в одну из несанкционированных областей, как будто ничего не произошло. Я пытался что-то подобное в global.asax:
protected void Application_Start()
{
// mvc stuff here....
// add handler to intercept handling creation of security tokens by WsFederationAuthnticationModule
FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated;
}
void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
{
FederatedAuthentication
.WSFederationAuthenticationModule
.SessionSecurityTokenCreated += WSFederationAuthenticationModule_SecuityTokenCreated;
}
public void WSFederationAuthenticationModule_SecuityTokenCreated (Object sender, SessionSecurityTokenCreatedEventArgs args)
{
var token = args.SessionToken;
// do something with the session token here e.g. check for SAML status
}
.. но я не могу видеть что-нибудь полезное на этой лексемы; ничего не указывает на конкретный статус ответа. Тот факт, что есть файл FedAuth cookie на всех, но никакая пользовательская информация от Idp не мертва, отдайте, что пользователь был там, но каким-то образом не смог аутентифицироваться, но в принципе я хочу видеть этот статус. Мне, возможно, придется иметь дело с тайм-аутами в IdP, а также ...
Возможно, я делаю это неправильно, или просто старый не понимает, но может каким-то образом заполнить меня тем, как определить ответ статусы?
Фуэ. Спасибо! : D
К сожалению, этот код должен быть в global.asax – oolong