Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A autenticação básica é uma abordagem de autenticação que faz parte do protocolo HTTP.
A autenticação básica para aplicações WebView2 inclui uma sequência de passos de autenticação e navegação para obter uma página Web a partir de um servidor HTTP. O controlo WebView2 funciona como um intermediário de comunicação entre a aplicação anfitriã e o servidor HTTP.
Utilizar HTTPS para enviar credenciais
Aviso: tem de utilizar HTTPS ao utilizar a Autenticação Básica. Caso contrário, o nome de utilizador e a palavra-passe não são encriptados. Recomendamos que considere outras formas de autenticação.
O padrão HTTP para autenticação básica inclui as credenciais de autenticação (nome de utilizador e palavra-passe) não encriptadas. Por conseguinte, tem de utilizar https, para garantir que as credenciais estão encriptadas.
A ordem dos eventos de navegação
O evento de autenticação básico 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, veja Eventos de navegação para aplicações WebView2.
Comunicação entre o servidor HTTP, o controlo WebView2 e a aplicação anfitriã
O servidor HTTP verifica a autenticação (credenciais de nome de utilizador e palavra-passe) e devolve um documento de erro ou a página Web pedida.
A instância de controlo WebView2 gera os eventos. O controlo WebView2 situa-se entre o servidor HTTP e a aplicação anfitriã. O controlo WebView2 serve como intermediário para a comunicação entre a aplicação anfitriã e o servidor HTTP.
Escreve a aplicação anfitriã. A aplicação anfitriã define o nome de utilizador e a palavra-passe nos objetos de resposta () argumentos
EventArgsdo evento.
BasicAuthenticationRequestedEventArgs tem uma Response propriedade. A Response propriedade é um objeto que contém as propriedades de nome de utilizador e palavra-passe.
Sequência de eventos de navegação
O diagrama seguinte mostra o fluxo de eventos de navegação para autenticação básica para aplicações WebView2:
A aplicação anfitriã indica ao controlo WebView2 para navegar para um URI.
O controlo WebView2 comunica com o servidor HTTP que pede para obter o documento num URI especificado.
O servidor HTTP responde ao controlo WebView2, dizendo "Não pode obter esse URI (documento) sem autenticação".
O controlo WebView2 indica à aplicação anfitriã "A autenticação é necessária" (que é o
BasicAuthenticationRequestedevento).A aplicação anfitriã responde a esse evento ao fornecer o nome de utilizador e a palavra-passe ao controlo WebView2.
O controlo WebView2 pede novamente o URI do servidor HTTP, mas desta vez com a autenticação (nome de utilizador e palavra-passe).
O servidor HTTP avalia as credenciais (nome de utilizador e palavra-passe).
O servidor HTTP pode negar as credenciais e pedir novas credenciais.
O servidor HTTP pode rejeitar o nome de utilizador e a palavra-passe; poderá indicar ao controlo WebView2 "Não tem permissão para obter esse URI/documento".
O controlo WebView2 compõe a página de erro devolvida pelo servidor HTTP. A composição ocorre entre o evento e
DOMContentLoadedoContentLoadingevento.O servidor HTTP pode aceitar as credenciais de autenticação e devolver o documento pedido.
O controlo WebView2 compõe o documento devolvido. A composição ocorre entre o evento e
DOMContentLoadedoContentLoadingevento.
Código de exemplo: Aplicação que fornece credenciais que são conhecidas antecipadamente
O exemplo simplificado seguinte mostra a aplicação anfitriã a fornecer credenciais (nome de utilizador e palavra-passe) 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, pediria ao utilizador o nome de utilizador e a palavra-passe em vez de os codificar como
"user"e"pass". - Este código é síncrono, mas provavelmente utilizaria código assíncrono.
Para obter código mais realista, veja a secçã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";
};
APIs:
Código de exemplo: Pedir credenciais ao utilizador
Este exemplo demonstra uma aplicação anfitriã a pedir credenciais ao utilizador (nome de utilizador e palavra-passe) e utiliza código assíncrono.
Este exemplo baseia-se no exemplo acima, ao adicionar as seguintes funcionalidades:
- Apresenta uma caixa de diálogo para pedir ao utilizador o respetivo nome de utilizador e palavra-passe.
- 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);
};
APIs:
-
Classe CoreWebView2BasicAuthenticationRequestedEventArgs
- Propriedades:
CancelChallengeResponseUri
- Métodos:
GetDeferral()
- Propriedades:
Como funcionam as navegação
Esta secção fornece informações de fundo opcionais sobre como funcionam as navegação.
Uma navegação corresponde a vários eventos de navegação. Por navegação, significamos que cada repetição, começando com a NavigationStarting caixa do diagrama acima, através da NavigationCompleted caixa.
Quando uma nova navegação começa, é atribuído um novo ID de navegação. Para a nova navegação, o servidor HTTP deu um documento ao controlo WebView2. Esta é a navegação "ter documento".
Como parte da navegação, o controlo WebView2 compõe a página correspondente (a página pedida ou uma página de erro, o que for devolvido pelo servidor HTTP) e um resultado de "êxito" ou "falha" gera um evento com êxito ou com falha NavigationCompleted .
Para obter mais informações, veja Eventos de navegação para aplicações WebView2.
Navegação para autenticação básica
Existem dois tipos de navegação no fluxo:
- Uma navegação de "autenticação pedida pelo servidor".
- Um "servidor deu ao controlo WebView2 um documento".
Após o primeiro tipo de navegação, o servidor pediu autenticação e a aplicação tem de tentar esse tipo de navegação novamente (com um novo ID de navegação). A nova navegação utilizará o que a aplicação anfitriã obtiver dos objetos de resposta de argumentos de eventos.
Um servidor HTTP pode exigir autenticação HTTP. Neste caso, existe uma primeira navegação, que tem os eventos de navegação listados acima. O servidor HTTP devolve uma resposta 401 ou 407 HTTP, pelo que o NavigationCompleted evento tem uma falha correspondente. Em seguida, o WebView2 compõe uma página em branco e gera o evento, o BasicAuthenticationRequested que irá potencialmente pedir credenciais ao utilizador.
Se o BasicAuthenticationRequested evento for cancelado, não haverá navegação subsequente e o WebView2 permanecerá para apresentar a página em branco.
Se o BasicAuthenticationRequested evento não for cancelado, o WebView2 efetuará novamente a navegação inicial, mas desta vez com as credenciais fornecidas. Verá novamente todos os mesmos eventos de navegação que antes.
Se as credenciais não forem aceites pelo servidor HTTP, a navegação falhará novamente com 401 ou 407. Nesse caso, a instância de CoreWebView2 classe volta a gerar o BasicAuthenticationRequested evento e a navegação continua como acima.
A navegação é bem-sucedida se as credenciais forem aceites pelo servidor HTTP. A navegação falha se o servidor HTTP negar a autenticação (o servidor normalmente devolve uma página de erro).
As navegação antes e depois do BasicAuthenticationRequested evento são navegaçãos distintas e têm IDs de navegação distintos.
A navegação event args tem uma propriedade: o NavigationId. Os NavigationId ligam eventos de navegação que correspondem a uma única navegação. O NavigationId permanece o mesmo durante cada navegação, como uma repetição. Durante a próxima passagem pelo fluxo de eventos, é utilizado um diferente NavigationId .
Descrição geral da Referência da API
Confira também
- Autenticação HTTP na MDN.