Aplicativo Web que conecta usuários: entrada e saída

Saiba como adicionar a entrada ao código do aplicativo Web que conecta usuários. Em seguida, saiba como permitir a desconexão deles.

Conexão

A entrada consiste em duas partes:

  • O botão de entrada na página HTML
  • A ação de entrada no code-behind do controlador

Botão Entrar

No ASP.NET Core, para aplicativos da plataforma de identidade da Microsoft, o botão Entrar é exposto em Views\Shared\_LoginPartial.cshtml (em um aplicativo MVC) ou Pages\Shared\_LoginPartial.cshtm (em um aplicativo Razor). Ele só é exibido quando o usuário não foi autenticado. Ou seja, ele é exibido quando o usuário ainda não se conectou ou quando ele se desconectou. Por outro lado, o botão Sair é exibido quando o usuário já está conectado. Observe que o controlador de conta está definido no pacote NuGet Microsoft.Identity.Web.UI, na área chamada MicrosoftIdentity

<ul class="navbar-nav">
  @if (User.Identity.IsAuthenticated)
  {
    <li class="nav-item">
        <span class="navbar-text text-dark">Hello @User.Identity.Name!</span>
    </li>
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
    </li>
  }
  else
  {
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
    </li>
  }
</ul>

Ação SignIn do controlador

No ASP.NET, a seleção do botão Entrar no aplicativo Web dispara a ação SignIn no controlador AccountController. Nas versões anteriores dos modelos do ASP.NET Core, o controlador Account era incorporado ao aplicativo Web. Isso não ocorre mais, porque o controlador agora faz parte do pacote NuGet Microsoft.Identity.Web.UI. Confira AccountController.cs para obter detalhes.

Esse controlador também lida com os aplicativos Azure AD B2C.

Depois que o usuário entrar no seu aplicativo, o ideal será permitir que ele saia dele.

Sair

A saída de um aplicativo Web envolve mais aspectos do que a remoção das informações sobre a conta conectada do estado do aplicativo Web. O aplicativo Web também precisa redirecionar o usuário para o ponto de extremidade logout da plataforma de identidade da Microsoft para que ele saia dele.

Quando seu aplicativo Web redireciona o usuário para o ponto de extremidade logout, esse ponto de extremidade limpa a sessão do usuário do navegador. Se o seu aplicativo não for para o ponto de extremidade logout, o usuário será autenticado novamente no aplicativo sem inserir as credenciais novamente. O motivo disso é que ele terá uma sessão de logon único válida na plataforma de identidade da Microsoft.

Para saber mais, confira a seção Enviar uma solicitação de saída na documentação Plataforma de identidade da Microsoft e protocolo OpenID Connect.

Registro de aplicativo

Durante o registro de aplicativo, registre uma URL de logoff de front-channel. No tutorial, você registrou https://localhost:44321/signout-oidc no campo URL de logoff de front-channel na página Autenticação. Para obter detalhes, confira Registrar o aplicativo webApp.

Botão Sair

No ASP.NET, a seleção do botão Sair no aplicativo Web dispara a ação SignOut no controlador AccountController (confira abaixo)

<ul class="navbar-nav">
  @if (User.Identity.IsAuthenticated)
  {
    <li class="nav-item">
        <span class="navbar-text text-dark">Hello @User.Identity.Name!</span>
    </li>
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
    </li>
  }
  else
  {
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
    </li>
  }
</ul>

Ação SignOut do controlador

Nas versões anteriores dos modelos do ASP.NET Core, o controlador Account era incorporado ao aplicativo Web. Isso não ocorre mais, porque o controlador agora faz parte do pacote NuGet Microsoft.Identity.Web.UI. Confira AccountController.cs para obter detalhes.

  • Define um URI de redirecionamento do OpenID como /Account/SignedOut para que o controlador seja chamado novamente quando o Microsoft Entra ID concluir a saída.

  • Chama Signout(), que permite ao middleware do OpenID Connect entrar em contato com o ponto de extremidade logout da plataforma de identidade da Microsoft. Em seguida, o ponto de extremidade:

    • Limpará o cookie de sessão do navegador.
    • Chamará novamente o URI de redirecionamento pós-logoff. Por padrão, o URI de redirecionamento pós-logoff mostra a página de exibição de desconexão SignedOut.cshtml.cs. Essa página também é fornecida como parte do Microsoft.Identity.Web.

Como interceptar a chamada ao ponto de extremidade logout

O URI pós-logoff permite que os aplicativos participem da saída global.

O middleware do OpenID Connect para ASP.NET Core permite que o seu aplicativo intercepte a chamada ao ponto de extremidade logout da plataforma de identidade da Microsoft fornecendo um evento do OpenID Connect chamado OnRedirectToIdentityProviderForSignOut. Isso é tratado automaticamente pelo Microsoft.Identity.Web (que limpa as contas caso o aplicativo Web chame APIs Web)

Protocolo

Caso deseje saber mais sobre a saída, leia a documentação do protocolo disponível em Open ID Connect.

Próximas etapas