До WIF Application_PostAcquireRequestState
было хорошим местом для создания персонализированного идентификатора, но требовалось много фреймворков, чтобы убедиться, что каждый тип аутентификации, который вы делали, был соответствующим образом сопоставлен. По индивидуальному идентификатору я имею в виду класс, наследующий от Identity, например, ниже SomeIdentity, так что у нас может быть определенное свойство, которое может потребоваться для всех пользователей, прошедших проверку подлинности.
PostAcquirerequestState по-прежнему доступен, но есть много новых способов, с помощью которых можно подключиться к аутентификации. Кроме того, старые методы становятся сложными при поддержке нескольких методов проверки подлинности.
Я хотел бы узнать, есть ли лучший способ, чем ниже, чтобы выполнить это сейчас в WIF. Прежде всего, я хотел бы выделить код, который обрабатывает заявки на идентификацию. Идея заключается в том, что код будет другим для других типов/поставщиков аутентификации, поскольку способ получения этого значения свойства может быть не от требования, такого как с SAML, а из другого места для других методов проверки подлинности. Я использую Kentor.AuthServices
для поддержки SAML в настоящее время. Хотя может быть другой код для сопоставления этих значений в зависимости от поставщика, конечным результатом будет то, что был создан экземпляр SomeIdentity, и он установит SomeProperty и другие свойства. Таким образом, остальная часть приложения всегда может зависеть/предполагать, что они были обработаны.
В моем проекте MVC появился AccountController
, у которого был ExternalLoginCallback
, который, как подразумевалось, может быть хорошим крюком для завершения внешней аутентификации (что для меня SAML является "внешней" аутентификацией). Тем не менее, он не кажется пораженным ни в какой момент во время/после аутентификации SAML.
Может быть, ответ заключается в том, что нам все равно нужно собрать это вместе по-старому, но я надеялся, что у WIF есть несколько лучших фреймворков, чтобы сделать это проще.
public sealed class SomeIdentity : Identity
{
...
// Some custom properties
public string SomeProperty { get;set;}
}
protected void Application_PostAcquireRequestState(object sender, EventArgs e)
{
...
identity = new SomeIdentity(id, userId);
// map a claim to a specific property
identity.SomeProperty = ...Claims[IdpSomePropertyKey];
///...
GenericPrincipal newPrincipal = new GenericPrincipal(identity , null);
HttpContext.Current.User = newPrincipal;
System.Threading.Thread.CurrentPrincipal = newPrincipal;
}
Теперь, когда я использую WIF, где я должен помещать код, специфичный для определенного типа аутентификации (т.е. Kentor.AuthServices SAML), который создает пользовательскую функцию SomeIdentity?
Идея заключается в том, что SomeIdentity будет классом идентификации, используемым повсюду в моем приложении, но код для заполнения его свойств должен быть написан специально для каждого типа проверки подлинности, например, с помощью SAML, чтобы тянуть заявки и использовать их значения для установки proeprties. То есть где происходит отображение.