Ваша идея подвергается атаке воспроизведения - если кто-то наблюдает за тем, как пользователь входит в систему, он может сохранить статический текст-зашифрованный-с-симметричным ключом и использовать его позже для аутентификации.
Принятый способ сделать это - вызов / ответ. Клиент подключается, сервер генерирует случайный запрос и отправляет его клиенту, а клиент отвечает зашифрованной версией запроса (хотя на самом деле вы должны использовать здесь HMAC, а не блочный шифр, потому что в противном случае ваш клиент эффективно оракул расшифровки одного блока!). Также было бы безопаснее использовать два разных случайных ключа (предоставляемых одновременно через веб-сервис), один для шифрования и один для аутентификации.
Обратите внимание, что эта схема, как написано, все еще подвержена атаке "человек посередине". Вам определенно лучше использовать SSL, как подсказывает The Rook . Это потребует от вашего клиента генерации открытого ключа и отправки его в веб-службу. Веб-служба отвечает подписанным сертификатом, содержащим открытый ключ клиента вместе с уникальным идентификатором клиента (имя пользователя или что-то еще) в поле DN. Сервер в отдельном соединении проверяет используемый клиентский сертификат (проверяя, подписан ли он вашим веб-сервисом) и проверяет, совпадает ли идентификатор клиента в сертификате с клиентом, который запрашивает соединение.