Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A autenticação Básica é uma abordagem de autenticação que faz parte do protocolo HTTP.
A autenticação Básica para aplicativos WebView2 inclui uma sequência de etapas de autenticação e navegação para recuperar uma página da Web de um servidor HTTP. O controle WebView2 atua como um intermediário para a comunicação entre o aplicativo host e o servidor HTTP.
Usar HTTPS para enviar credenciais
Aviso: você deve usar HTTPS ao usar a Autenticação Básica. Caso contrário, o nome de usuário e a senha não são criptografados. Talvez você queira considerar outras formas de autenticação.
O padrão HTTP para autenticação básica inclui as credenciais de autenticação (nome de usuário e senha) não criptografadas. Portanto, você deve usar httpso , para garantir que as credenciais sejam criptografadas.
A ordem dos eventos de navegação
O evento de autenticação básica ocorre no meio da sequência de eventos:
-
NavigationStarting- evento de navegação -
ContentLoading- evento de navegação BasicAuthenticationRequestedDOMContentLoaded-
NavigationCompleted- evento de navegação
Para obter mais informações, consulte Eventos de navegação para aplicativos WebView2.
Comunicação entre o servidor HTTP, o controle WebView2 e o aplicativo host
O servidor HTTP verifica a autenticação (credenciais de nome de usuário e senha) e retorna um documento de erro ou a página da Web solicitada.
A instância de controle do WebView2 gera os eventos. O controle WebView2 fica entre o servidor HTTP e o aplicativo host. O controle WebView2 serve como um intermediário para a comunicação entre o aplicativo host e o servidor HTTP.
Você escreve o aplicativo host. O aplicativo host define o nome de usuário e a senha nos objetos de resposta arguments (
EventArgs) do evento.
BasicAuthenticationRequestedEventArgs tem uma Response propriedade. A Response propriedade é um objeto que contém as propriedades de nome de usuário e senha.
Sequência de eventos de navegação
O diagrama a seguir mostra o fluxo de eventos de navegação para autenticação básica para aplicativos WebView2:
O aplicativo host diz ao controle WebView2 para navegar até um URI.
O controle WebView2 se comunica com o servidor HTTP solicitando a obtenção do documento em um URI especificado.
O servidor HTTP responde ao controle WebView2, dizendo "Você não pode obter esse URI (documento) sem autenticação".
O controle WebView2 informa ao aplicativo host "A autenticação é necessária" (que é o
BasicAuthenticationRequestedevento).O aplicativo host responde a esse evento fornecendo o nome de usuário e a senha para o controle WebView2.
O controle WebView2 solicita novamente o URI do servidor HTTP, mas desta vez com a autenticação (nome de usuário e senha).
O servidor HTTP avalia as credenciais (nome de usuário e senha).
O servidor HTTP pode negar as credenciais e solicitar novas credenciais.
O servidor HTTP pode rejeitar o nome de usuário e a senha; ele pode informar ao controle WebView2 "Você não tem permissão para obter esse URI/documento".
O controle WebView2 renderiza a página de erro retornada pelo servidor HTTP. A renderização ocorre entre o evento e
DOMContentLoadedoContentLoadingevento.O servidor HTTP pode aceitar as credenciais de autenticação e retornar o documento solicitado.
O controle WebView2 renderiza o documento retornado. A renderização ocorre entre o evento e
DOMContentLoadedoContentLoadingevento.
Código de exemplo: Aplicativo que fornece credenciais conhecidas antecipadamente
O exemplo simplificado a seguir mostra o aplicativo host fornecendo credenciais (nome de usuário e senha) que são conhecidas antecipadamente. Este exemplo é uma versão ligeiramente modificada do código que está no repositório > WebView2Samples WebView2APISample > ScenarioAuthentication.cpp.
Este exemplo não é realista, porque:
- Na prática, você solicitaria ao usuário o nome de usuário e a senha em vez de codificá-los como
"user"e"pass". - Esse código é síncrono, mas você provavelmente usaria código assíncrono.
Para um código mais realista, veja a seção subsequente.
// Prerequisite: Before using this code, make sure you read the section "Use HTTPS
// for sending credentials" in this article.
webView.CoreWebView2.BasicAuthenticationRequested += delegate (
object sender,
CoreWebView2BasicAuthenticationRequestedEventArgs args)
{
args.Response.UserName = "user";
args.Response.Password = "pass";
};
de relatórios:
Código de exemplo: Solicitando credenciais ao usuário
Este exemplo demonstra um aplicativo host solicitando ao usuário credenciais (nome de usuário e senha) e usa código assíncrono.
Este exemplo baseia-se no exemplo acima, adicionando os seguintes recursos:
- Exibe uma caixa de diálogo para solicitar ao usuário seu nome de usuário e senha.
- Chama o
GetDeferralmétodo noeventargumento.
// Prerequisite: Before using this code, make sure you read the section "Use HTTPS
// for sending credentials" in this article.
webView.CoreWebView2.BasicAuthenticationRequested += delegate (
object sender,
CoreWebView2BasicAuthenticationRequestedEventArgs args)
{
// We need to show UI asynchronously so we obtain a deferral.
// A deferral will delay the CoreWebView2 from
// examining the properties we set on the event args until
// after we call the Complete method asynchronously later.
// This gives us time to asynchronously show UI.
CoreWebView2Deferral deferral = args.GetDeferral();
// We avoid potential reentrancy from running a message loop in the
// event handler by showing our download dialog later when we
// complete the deferral asynchronously.
System.Threading.SynchronizationContext.Current.Post((_) =>
{
using (deferral)
{
// When prompting the end user for authentication its important
// to show them the URI or origin of the URI that is requesting
// authentication so the end user will know who they are giving
// their username and password to.
// Its also important to display the challenge to the end user
// as it may have important site specific information for the
// end user to provide the correct username and password.
// Use an app or UI framework method to get input from the end user.
TextInputDialog dialog = new TextInputDialog(
title: "Authentication Request",
description: "Authentication request from " + args.Uri + "\r\n" +
"Challenge: " + args.Challenge,
defaultInput: "username\r\npassword");
bool userNameAndPasswordSet = false;
if (dialog.ShowDialog().GetValueOrDefault(false))
{
string[] userNameAndPassword = dialog.Input.Text.Split(
new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
if (userNameAndPassword.Length > 1)
{
args.Response.UserName = userNameAndPassword[0];
args.Response.Password = userNameAndPassword[1];
userNameAndPasswordSet = true;
}
}
// If we didn't get a username and password from the end user then
// we cancel the authentication request and don't provide any
// authentication.
if (!userNameAndPasswordSet)
{
args.Cancel = true;
}
}
}, null);
};
de relatórios:
-
Classe CoreWebView2BasicAuthenticationRequestedEventArgs
- Propriedades:
CancelChallengeResponseUri
- Métodos:
GetDeferral()
- Propriedades:
Como funcionam as navegações
Esta seção fornece informações básicas opcionais sobre como as navegações funcionam.
Uma navegação corresponde a vários eventos de navegação. Por navegação, queremos dizer cada tentativa, começando com a NavigationStarting caixa do diagrama acima, até a NavigationCompleted caixa.
Quando uma nova navegação começa, uma nova ID de navegação é atribuída. Para a nova navegação, o servidor HTTP forneceu um documento ao controle WebView2. Esta é a navegação "tem documento".
Como parte da navegação, o controle WebView2 renderiza a página correspondente (a página solicitada ou uma página de erro, o que for retornado pelo servidor HTTP) e um resultado de "êxito" ou "falha" gera um evento bem-sucedido ou com falha NavigationCompleted .
Para obter mais informações, consulte Eventos de navegação para aplicativos WebView2.
Navegações para autenticação básica
Existem dois tipos de navegação no fluxo:
- Uma navegação de "autenticação solicitada pelo servidor".
- Uma navegação "o servidor deu ao controle WebView2 um documento".
Após o primeiro tipo de navegação, o servidor solicitou autenticação e o aplicativo precisa tentar esse tipo de navegação novamente (com uma nova ID de navegação). A nova navegação usará tudo o que o aplicativo host obtiver dos objetos de resposta de eventos, argumentos.
Um servidor HTTP pode exigir autenticação HTTP. Nesse caso, há uma primeira navegação, que contém os eventos de navegação listados acima. O servidor HTTP retorna uma resposta HTTP 401 ou 407 e, portanto, o NavigationCompleted evento tem uma falha correspondente. Em seguida, o WebView2 renderiza uma página em branco e gera o BasicAuthenticationRequested evento, o que potencialmente solicitará credenciais ao usuário.
Se o BasicAuthenticationRequested evento for cancelado, não haverá navegação subsequente e o WebView2 permanecerá para exibir a página em branco.
Se o BasicAuthenticationRequested evento não for cancelado, o WebView2 executará a navegação inicial novamente, mas desta vez, usando as credenciais fornecidas. Você verá novamente os mesmos eventos de navegação de antes.
Se as credenciais não forem aceitas pelo servidor HTTP, a navegação falhará novamente com 401 ou 407. Nesse caso, a instância da CoreWebView2 classe novamente gera o evento e a BasicAuthenticationRequested navegação continua como acima.
A navegação terá êxito se as credenciais forem aceitas pelo servidor HTTP. A navegação falhará se o servidor HTTP negar a autenticação (o servidor normalmente retorna uma página de erro).
As navegações antes e depois do BasicAuthenticationRequested evento são navegações distintas e têm IDs de navegação distintas.
A navegação event args tem uma propriedade: o NavigationId. Os NavigationId eventos de navegação que correspondem a uma única navegação. O NavigationId permanece o mesmo durante cada navegação, como uma nova tentativa. Durante a próxima passagem pelo fluxo de eventos, um diferente NavigationId é usado.
Visão geral de referência de API
Confira também
- Autenticação HTTP no MDN.