public void Login(IAuthenticationToken token)
{
var subject = SecurityManager.Login(this, token);
string host = null;
IPrincipalCollection principals;
if (subject is DelegatingSubject)
{
DelegatingSubject delegating = (DelegatingSubject) subject;
host = delegating.Host;
principals = delegating.Principals;
}
else
{
principals = subject.Principals;
}
if (principals == null || principals.Count == 0)
{
throw new InvalidSubjectException(Properties.Resources.NullOrEmptyPrincipalsAfterLoginMessage);
}
Principals = principals;
Authenticated = true;
if (token is IHostAuthenticationToken)
{
host = ((IHostAuthenticationToken) token).Host;
}
if (host != null)
{
Host = host;
}
var session = subject.GetSession(false);
if (session == null)
{
_session = null;
}
else
{
_session = Decorate(session);
}
ThreadContext.Subject = this;
}