public AuthToken FinishLogin(HandshakeToken handshakeToken, SecondFactor secondFactor)
        {
            lock (sessions)
            {
                RemoveExpiredSessions();

                var session =
                    sessions.SingleOrDefault(s => !s.IsAuthenticated && s.HandshakeToken.Equals(handshakeToken));

                if (session != null)
                {
                    if (session.Owner.HardcodedSecondFactorCode.Equals(secondFactor.OneTimeUseCode))
                    {
                        var toRet = new AuthToken(GetNewHash(), GetSessionExpiryFromNowUtc());

                        session.AuthToken = toRet;

                        return(toRet);
                    }
                }
                throw new FaultException("Authentication error");
            }
        }
 public AuthToken FinishLogin(HandshakeToken handshakeToken, SecondFactor secondFactor)
 {
     return(Auth.Provider.FinishLogin(handshakeToken, secondFactor));
 }