C# Windows Form - CefSharpBrowser - Authentication Required
using CefSharp;
using CefSharp.Handler;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Security.Cryptography.X509Certificates;
namespace CefSharpBrowser
{
public partial class Form1 : Form
{
ChromiumWebBrowser browser = new ChromiumWebBrowser();
public Form1()
{
InitializeComponent();
// Создаём новую панель
Panel panelBrowser = new Panel();
panelBrowser.Name = "panelBrowser1";
panelBrowser.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
panelBrowser.Location = new Point(0, 0);
panelBrowser.Size = new Size(this.Width, this.Height); // panelBrowser.Width = int; panels[0].Height = int;
Controls.Add(panelBrowser);
Controls.SetChildIndex(panelBrowser, 0);
// Создание экземпляра ChromiumWebBrowser
CefSettings settings = new CefSettings();
Cef.Initialize(settings);
// Повторяем несколько раз код ниже если хотим сделать несколько браузеров на одной форме
browser.RequestHandler = new CustomRequestHandler();
browser = new ChromiumWebBrowser("http://192.168.1.1/");
browser.RequestHandler = new RequestHandler();
panelBrowser.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
// Выводим ошибки в окно
browser.ConsoleMessage += (sender, e) =>
{
if (e.Level == LogSeverity.Error)
{
MessageBox.Show($"[ERROR] {e.Message}");
}
};
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
System.Environment.Exit(0);
}
}
internal class CustomRequestHandler : IRequestHandler
{
public bool AutoLigon = false;
public bool GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
{
// Автоматический ввод логина и пароля
// Можно эти данные загружать с login.txt
if (AutoLigon)
{
callback.Continue("admin", "12345678");
}
else
{
// Вызываем форму Авторизации из LoginForm.cs
//var loginForm = new LoginForm();
//loginForm.SetAlert($"Host: {host}, {realm}");
//if (loginForm.ShowDialog() == DialogResult.OK)
//{
// var login = loginForm.Login;
// var password = loginForm.Password;
// callback.Continue(login, password);
// return true;
//}
// Создаём новое одноразовое окно Авторизации
using (var loginForm = new Form())
{
loginForm.Text = "Authentication Required";
loginForm.Size = new System.Drawing.Size(290, 195);
loginForm.StartPosition = FormStartPosition.CenterScreen;
loginForm.FormBorderStyle = FormBorderStyle.FixedDialog;
//loginForm.ControlBox = false;
loginForm.MinimizeBox = false; // Отключить кнопку "Свернуть"
loginForm.MaximizeBox = false; // Отключить кнопку "Развернуть"
loginForm.TopMost = true;
var label = new Label();
label.Text = $"The server: \"{host}\"\nasks for a Username and Password.\nThe server reports: \"{realm}\"";
label.Location = new System.Drawing.Point(10, 10);
label.AutoSize = true;
var usernameLabel = new Label();
usernameLabel.Text = "Username:";
usernameLabel.Location = new System.Drawing.Point(10, 61);
usernameLabel.AutoSize = true;
var usernameTextBox = new TextBox();
usernameTextBox.Location = new System.Drawing.Point(75, 59);
usernameTextBox.Size = new System.Drawing.Size(189, 20);
var passwordLabel = new Label();
passwordLabel.Text = "Password:";
passwordLabel.Location = new System.Drawing.Point(10, 93);
passwordLabel.AutoSize = true;
var passwordTextBox = new TextBox();
passwordTextBox.Location = new System.Drawing.Point(75, 91);
passwordTextBox.Size = new System.Drawing.Size(189, 20);
passwordTextBox.PasswordChar = '*';
var okButton = new Button();
okButton.Text = "OK";
okButton.Location = new System.Drawing.Point(110, 122);
okButton.Click += (sender, e) =>
{
var login = usernameTextBox.Text;
var password = passwordTextBox.Text;
callback.Continue(login, password);
loginForm.DialogResult = DialogResult.OK;
loginForm.Close();
};
var cancelButton = new Button();
cancelButton.Text = "Cancel";
cancelButton.Location = new System.Drawing.Point(190, 122);
cancelButton.Click += (sender, e) =>
{
loginForm.DialogResult = DialogResult.Cancel;
loginForm.Close();
};
loginForm.Controls.Add(label);
loginForm.Controls.Add(usernameLabel);
loginForm.Controls.Add(usernameTextBox);
loginForm.Controls.Add(passwordLabel);
loginForm.Controls.Add(passwordTextBox);
loginForm.Controls.Add(okButton);
loginForm.Controls.Add(cancelButton);
if (loginForm.ShowDialog() == DialogResult.OK)
{
return true;
}
else if (loginForm.DialogResult == DialogResult.Cancel)
{
callback.Cancel(); // Отменяем аутентификацию
return false;
}
}
}
return true;
}
public IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
return null;
}
public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect)
{
return false;
}
public bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
{
return false;
}
public void OnDocumentAvailableInMainFrame(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
}
public bool OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
{
return false;
}
public void OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status)
{
}
public void OnRenderViewReady(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
}
public bool OnSelectClientCertificate(IWebBrowser chromiumWebBrowser, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback)
{
return false;
}
}
}