Есть сайт, на котором есть два поля - логин и пароль (в них вводятся данные учетки 1С). Нужно после ввода логина и пароля и нажатия кнопки ВХОД сделать редирект на адрес опубликованной базы и чтобы база открылась без окна авторизации.
Как я понимаю, скрипт который висит на кнопке вход, должен взять строку базы данных (например www.myserver.ru/mybase) взять логин и пароль и каким то образом скомпоновав это - открыть сессию веб-клиента (допустим в отдельном окне).
Как это сделать? Неужели что-то типа www.myserver.ru/mybase?N=User1&P=abc123
это же по сути в чистом виде передача логина/пароля.
(1) http://server/path/to/base/?N=user&P=password - отдача, да, но юзер даже не заметит логин-пароль, только если поснифать трафик или отладчиком браузера посмотреть заголовки - там будет несколько редиректов. Ссылку не обязательно отображать на клиенте, сделать можно на стороне сервера через отдачу кода состояния 301 и Location
(11) если https, то только прокси (и то не всегда) и сам браузер. То, что при просто авторизации логин и пароль также передаются в открытом виде (если не использовать https) не смущает?
(12) то что при http логин пароль передается в открытом виде это да, но это решу через https.
получается если будет https - то и формировать скрипом ссылку http://server/path/to/base/?N=user&P=password и подсовывать ее браузеру - не грех? и это безопасно?
(13) ну, пользователь теоретически сможет его подсмотреть. Правда для этого надо специфические инструменты применять. Например стандартные инструменты разработчика firefox сбрасывают сетевую панель при каждом редиректе и засечь заголовок 301 очень проблематично (1с сама делает редирект на url без логина пароля, так что получается цепочка редиректов сайт -> url с логином -> url без логина)
мда... вопросов стало еще больше чем ответов. я правильно понимаю, что раз "LDAP аутентификация" мне ничего не говорит и быстрый наскок на гугл с подобным запросом мне ничего не прояснил - я в трудной ситуации?
по сабжу - сайта как такового нет, есть хтмл страница где будут два поля логин пароль и кнопка вход
(16) Сергей, спасибо, как будто то что надо.
Однако в моем случае не взлетело. Сначала не хотело воспринимать zone - т.е. при нажатии кнопки ОК переходил к базе без разделителя. Я добавил значение разделителя к адресу. Теперь по кнопке ОК переходит к базе, но попадают на окно авторизации (даже пользователь не подставился). Причем в параметрах указываю русский, а попадаю на английский. Поэтому сделал вывод что все параметры формы авторизации просто игнорируются... С чем может быть связано? И где вы нашли такой вариант? На ИТС я не находил...
(19) Неее) Мне надо страницу, где будет два поля (логин и пароль), типа той что в (16). И чтобы по нажатию на кнопку ОК пользователя переадресовало в 1С, но уже без адинесного окна авторизации.
при разделении данных добавляем <input type="hidden" value="значения разделителей" name="Z"/> (или не hidden, если пользователь сам должен вводить данные)
это проще, чем (16) и работает
(18) PS.
Я сразу спросил про версию платформы, потому что постепенно поправляют глюки.
На 8.3.9 у меня почему то не срабатывает код локализации сеанса. Язык интерфейса меняется нормально, но сеанс запускается только на языке по умолчанию определенном в конфигураторе ((
Пароль пользователя 1С хранится в 8.х не в том же самом виде, что набирает пользователь, а в зашифрованном. Это раз.
А два - посмотрите механизм работы сервисов 1С-Контрагент или 1С-Отчеттность. Пароли на вход хранятся там отдельные, записаннные в регистры сведений, а доступ к web-сервису задействован через регистр сведений "Кэш программных интерфейсов" и в нем много чего интересного хранится.
Вдруг поможет...
Мне больше всего не нравится, что стандартный сервис авторизации не возвращает ошибку в случае чего. Думаю придется все же переделывать через http сервис.
(31) Да. Собственно так и пришлось делать - свой http сервис, который выводит формы авторизации, регистрации, проверку паролей и тп.
Для авторизации сервис рисует форму описанную выше.
(32) а могли бы поделится?)) или хотя бы в общих чертах рассказать?
Как я понимаю:
1. Делаем http сервис post для регистрации, с помощью <FO RM> делаем форму регистрации с login, pass, отправляем данные, в 1С принимаем, обрабатываем, создаем пользователя.
2. После этого надо как-то показать в браузере сообщение, что пользователь зарегистрирован. или показать форму уже для авторизации.
3. Также делаем http сервис для авторизации. Вот с этим понятно - https://localhost/Base/e1cib/start/, а как вот самому http сервис такой написать, что http сервис прописанный в 1С должен возвращать?
(33) Хм, в общих чертах ))
1. Принцип создания с обратной связью неплохо описан здесь http://1cworks.com/courses-1c-http-service/lesson2-feedback и нескольких последующих уроках. Хотя там есть несколько ошибок, но разобраться можно.
2. Форму авторизации из этих уроков меняем на то что в (16) и несколько повозиться с встраиванием в свой сайт.
3. Собственно в этом разделе еще сам не гуру )) Тоже только осваиваю. Результат можно глянуть тут, но он в тестовом режиме, с основным сервисом еще не связан.
думаю открытым остался всего один вопрос - авторизация через собственный сервис.
с регистрацией понятно - мы отправляем запрос через FORM, наш http сервис это обрабатывает, создает пользователя в ИБ, возвращает HTML страницу с сообщением что зарегистрирован.
поидее мы можем воспользоваться тем же FORM и авторизоваться при помощи POST запроса по адресу https://домен/имябазы/e1cib/start. А как сделать тоже самое и помощи собственного http сервиса? Т.е. чтобы я делал тот же пост запрос только по адресу https://домен/имябазы/hs/login, передавал в качестве параметров запроса логин и пароль, попадал в обработчик http запроса в 1С, там выполнял нужные мне проверки, и возвращал в браузер ... - вот тут вопрос - что возвращал в браузер? как в браузер вернуть команду что все, проверка в 1С (в моем собственном модуле) выполнена и что можно идти по адресу https://домен/имябазы/e1cib/start с нужными параметрами?
(35) Я пробовал разные варианты.
Их есть несколько, но собственно потому и тестовый что не все получилось.
1. Вариант: формировать post запрос по адресу https://домен/имябазы/e1cib/start изнутри базы, без открытия формы и передавать нужные параметры после проверки. В этом случае сессия запускается, все прекрасно. Но есть один момент. Что бы сеанс был показан пользователю, его нужно прицепить к текущему сеансу браузера. Это у меня пока не получилось. Хочется кроссплатформенно, а методы работы с браузерами разные.
2. Вариант: сделать как сейчас есть, но проверку выполнять при запуске. К сожалению не всегда сработает.
3. Вариант: вообще отказаться от стандартного POST и выполнять запуск по другому. Но тут есть свои подводные камни.
К сожалению пока не получается сделать "красиво". Еще в поиске.
(36)
1. т.е. проблема как раз вернуть эту самую строку "https://домен/имябазы/e1cib/start" с параметрами подключения на клиент (т.е. в браузер), чтобы пост запрос выполнился в браузере и произошел переход в 1С?
в таком случае при получении такого html в качестве ответа будет автоматически выполнен POST.
Единственно, что беспокоит это появление выполнение html где в коде явно прописан логин пароль. хотя с другой стороны, в этот же самый html пользователь и так вбивает свои данные...
(39) В общем не работает этот код. Не запускается сессия в окне браузера ((
Сессия появляется, соединение с базой есть, но в браузере пусто. Как и было в 1-м варианте.
Нашел проблему. Не указан идентификатор формы, поэтому не работало
(39) Все, похоже из этого кусочка я выжал все что необходимо :)))
Результат можно посмотреть и пощупать тут . Предыдущая ссылка - "задний вход" )))
Еще конечно нужно над дизайном потрудиться, но 1С уже не участвует.
В 41 сообщении ошибся, это я неаккуратно скопировал.
Что касается безопасности... Собственно потому и пользуется протокол https. Не зря получал все сертификаты.
В базе пароли не хранятся нигде в явном виде.
Плюс http - сервис в моем варианте запускается неявно, посредством механизма сайта.
да там все просто
1. в 1це заводишь пользователя, к примеру Гость. в свойствах устанавливаешь АутентификацияОС=Истина и ПользовательОС=ПользовательВиндыОтИмениКоторогоЛогинимсяАвтоматом
2. открваем консоль IIS. в свойствах каталога - Правила авторизации - добавляешь Разрешить=ПользовательВиндыОтИмениКоторогоЛогинимсяАвтоматом
для меня осталась проблемой то, что в заголовке окна в правой части пишется "Гость"
(46) Суть задачи не в том, что бы пускать всех под одним пользователем, а что бы каждого под собой. При этом иметь возможность регистрации новых пользователей.
Под одним пользователем пускать - можно просто прописать в vrd файле логин и пароль базы. И все равно под каким сервером опубликовано.
(49) Это решение так же не самое удачное, когда используется доступ извне, не корпоративной сети. Например как пользователь сайта. Сделать конечно можно, но совсем не айс...