예제 #1
0
        /// <summary>
        /// Проверка пароля
        /// </summary>
        /// <param name="authPolicy">
        /// полиция ёпта
        /// </param>
        /// <param name="listenUri">
        /// урл
        /// </param>
        /// <param name="message">
        /// сообщение
        /// </param>
        /// <returns>
        /// принципалы
        /// </returns>
        public override ReadOnlyCollection <IAuthorizationPolicy> Authenticate(
            ReadOnlyCollection <IAuthorizationPolicy> authPolicy,
            Uri listenUri,
            ref Message message)
        {
            var sessionFactory = ObjectFactory.GetInstance <ISessionFactory>();

            using (var session = sessionFactory.OpenSession())
            {
                try
                {
                    CurrentSessionContext.Bind(session);

                    var credentials = TokenCredentials.FromMessageHeader(message);

                    var user = ObjectFactory.GetInstance <ISecurityProvider>().GetDateFromToken(credentials.Token);

                    ////var user = ObjectFactory.GetInstance<ISecurityProvider>().GetUserByName("admin");
                    if (user != null)
                    {
                        var        identity  = new ChallengeIdentity(user.Login, user.Password);
                        IPrincipal principal = new ChallengePrincipal(identity);
                        message.Properties["Principal"] = principal;
                        return(authPolicy);
                    }
                }
                finally
                {
                    CurrentSessionContext.Unbind(sessionFactory);
                    session.Flush();
                    session.Close();
                }
            }

            throw new AuthenticationException("Incorrect credentials!");
        }