#html #asp.net #login #remote-access #login-script
#HTML #asp.net #аутентификация #удаленный доступ #login-script
Вопрос:
Проблема: мне нужно создать простой автономный инструмент входа в систему с фрагментом HTML, который я могу использовать в другом домене, который затем получит доступ к моей целевой базе данных (используя их параметры API), отправив на нее запрос SSL. Если вход в систему выполнен успешно, он передается на целевую целевую страницу, если вход в систему не удался, он переходит на «плохую страницу входа», однако все это обрабатывается моей целью.
Итак, я хочу иметь возможность войти в www.target.com от www.example.com
-
www.example.com Содержит код удаленного входа в систему (HTML-сайт)
-
www.target.com Содержит базу данных пользователей и паролей
В моем targets web.config у меня есть LoginRemoteURLAllowed, а затем я могу установить URL-адрес запроса в соответствии с доменом, на котором находится мой фрагмент HTML.
Причина, по которой я хочу это сделать, заключается в том, что у меня есть два отдельных сайта с отдельными доменами. Один для общего общедоступного каталога продуктов, второй домен — это частный каталог только для пользователей, для доступа к которому вам необходимо войти.
У нас уже есть подобная система, однако я ее не проектировал, и я пытаюсь перепроектировать ее, чтобы создать отдельный html-файл, содержащий ядро входа, которое я могу использовать на других веб-сайтах.
Вот что я пытаюсь перепроектировать. использовать текущую рабочую модель (взятую непосредственно с примера веб-сайта с помощью инспектора кода).
HTML-код для управления вводом
label>Example Login</label>
<div id="formMC_pnl" class="group" onkeypress="javascript:return WebForm_FireDefaultButton(event, amp;#39;formMC_btnMCSubmitamp;#39;)">
<input name="formMC$txtMCUserName" type="text" value="Username" id="formMC_txtMCUserName" class="txtField" placeholder="Username" onfocus="if (this.value==amp;#39;Usernnameamp;#39;) { this.value=amp;#39;amp;#39; };" onblur="if (this.value==amp;#39;amp;#39;) { this.value=amp;#39;Usernameamp;#39; };" />
<input name="formMC$txtMCPassword" type="password" id="formMC_txtMCPassword" class="txtField pass" placeholder="Password" onfocus="if (this.value==amp;#39;Passwordamp;#39;) { this.value=amp;#39;amp;#39; };" onblur="if (this.value==amp;#39;amp;#39;) { this.value=amp;#39;Passwordamp;#39; };" />
<input type="submit" name="formMC$btnMCSubmit" value="Login" id="formMC_btnMCSubmit" class="btnSubmit" />
Теперь я предполагаю, что он использует веб-форму для подключения к моему сайту, но я не уверен, как он это делает. Вот пример используемой веб-формы
function WebForm_FireDefaultButton(event, target) {
if (event.keyCode == 13) {
var src = event.srcElement || event.target;
if (src amp;amp;
((src.tagName.toLowerCase() == "input") amp;amp;
(src.type.toLowerCase() == "submit" || src.type.toLowerCase() == "button")) ||
((src.tagName.toLowerCase() == "a") amp;amp;
(src.href != null) amp;amp; (src.href != "")) ||
(src.tagName.toLowerCase() == "textarea")) {
return true;
}
var defaultButton;
if (__nonMSDOMBrowser) {
defaultButton = document.getElementById(target);
}
else {
defaultButton = document.all[target];
}
if (defaultButton amp;amp; typeof(defaultButton.click) != "undefined") {
defaultButton.click();
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return false;
}
}
return true;
}
Итак, теперь мне просто интересно, можно ли создать автономный удаленный вход в html для доступа к моей целевой базе данных и проверки / входа пользователя. Буду признателен за любую помощь, я постарался предоставить как можно больше информации об этой проблеме. Дайте мне знать, если я смогу что-нибудь уточнить. Более или менее я хочу воспроизвести эту рабочую модель, чтобы я мог добавить ее в www.example.com и войдите в систему www.target.com из примера.
Ответ №1:
Вы не можете аутентифицировать междоменный.
В лучшем случае вы могли бы заставить сайт попасть в базу данных, подтвердить имя пользователя и пароль, а затем сгенерировать идентификатор GUID, сохранить его в таблице пользователей и вернуть пользователю для сохранения в файле cookie.
Как только файл cookie будет возвращен и создан, перенаправьте его на целевой сайт. Затем проверьте идентификатор GUID в файле cookie на земле. Для этого также потребуется либо страница, либо код в global.asax, либо страница authentication.cs в AppCode, которая проверяет и либо создает сеанс, либо перенаправляет.
Если идентификатор GUID недействителен, перенаправьте, т.е. string.empty или не соответствует идентификатору GUID в базе данных.
Комментарии:
1. Я не думаю, что я пытаюсь аутентифицировать кросс-домены, а передаю информацию, введенную с одного (имя пользователя и пароль), и отправляю ее на другой целевой домен, который обрабатывает аутентификацию. Цель настроена на прием параметров удаленного входа через заданные параметры API. После входа в систему я не возвращаюсь на исходный сайт, вместо этого я вошел в систему на своем целевом сайте. Процесс уже работает на сайте, который мне был предоставлен, мне просто сложно перепроектировать его, чтобы воссоздать процесс удаленного входа в систему. Пока спасибо за помощь.
2. @user2665682 но как вы сохраняете междоменную аутентификацию. Плюс сеансы не переходят с домена на домен, поэтому единственный способ, которым я знаю, как это сделать, — это идентификатор GUID и файл cookie, а затем аутентификация на земле.
3. Понял. Можете ли вы порекомендовать какие-либо учебные пособия? К сожалению, это кажется довольно сложным. Не уверен, как исходный разработчик выполнил это в моем примере, если только два веб-сайта не являются частью одного домена. Я полагаю, что они размещены на одном сервере. Как вы думаете, можно ли в качестве альтернативы создать микросайт HTML, который обрабатывает учетные данные для входа как часть целевого домена, а не отображать этот микросайт на примере веб-сайта. Т.е. Форма входа в систему (микросайт) находится по адресу www.target.com/MicroLogin.aspx чем встраивать это в www.example.com поэтому, как только вы войдете в систему, онперенаправляет вас на цель.
4. Поскольку нам действительно не нужна информация для входа на пример сайта, это может быть возможно. Однако я бы хотел, чтобы он закрывал старый сайт и перенаправлял его на новый сайт после входа в систему, а не просто перенаправлял микросайт.
5. @user2665682 вот почему я говорил, что при аутентификации с сайта (поскольку базе данных все равно, с какого сайта вы заходите), когда аутентификация пройдет успешно, обновите таблицу аутентификации пользователя ссылкой GUID social.msdn.microsoft.com/Forums/vstudio/en-US /… затем верните этот идентификатор пользователя, выполняющего аутентификацию, сохраните его в файле cookie, а затемперенаправить их на сайт. Попросите сайт проверить ссылку на cookie для пользователя и создать сеанс на земле.