Share via


사용자가 로그인하는 웹앱: 로그인 및 로그아웃

사용자를 로그인하는 웹앱의 코드에 로그인을 추가하는 방법을 알아봅니다. 그런 다음, 로그아웃하는 방법을 알아봅니다.

로그인

로그인은 다음과 같은 두 부분으로 구성됩니다.

  • HTML 페이지의 로그인 단추
  • 컨트롤러에서 코드 숨김의 로그인 동작

로그인 단추

ASP.NET Core에서 Microsoft ID 플랫폼 애플리케이션의 경우 로그인 단추가 Views\Shared\_LoginPartial.cshtml(MVC 앱) 또는 Pages\Shared\_LoginPartial.cshtm(Razor 앱)에 표시됩니다. 사용자가 인증되지 않은 경우에만 표시됩니다. 즉, 사용자가 아직 로그인하지 않았거나 로그아웃했을 때 표시됩니다. 반대로 사용자가 이미 로그인한 경우 로그아웃 단추가 표시됩니다. 계정 컨트롤러는 MicrosoftIdentity라는 영역에 있는 Microsoft.Identity.Web.UI NuGet 패키지에 정의되어 있습니다.

<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>

컨트롤러의 SignIn 동작

ASP.NET에서 웹앱의 로그인 단추를 선택하면 AccountController 컨트롤러에서 SignIn 동작이 트리거됩니다. 이전 버전의 ASP.NET Core 템플릿 Account 에서 컨트롤러는 웹앱에 포함되었습니다. 이제는 컨트롤러가 Microsoft.Identity.Web.UI NuGet 패키지의 일부이기 때문에 더 이상 포함되지 않습니다. 자세한 내용은 AccountController.cs를 참조하세요.

또한 이 컨트롤러는 Azure AD B2C 애플리케이션을 처리합니다.

사용자가 앱에 로그인한 후 로그아웃하도록 설정하려고 합니다.

로그아웃

웹앱에서 로그아웃하는 것은 웹앱의 상태에서 로그인한 계정에 대한 정보를 제거하는 것 이상을 포함합니다. 또한 웹앱은 로그아웃할 사용자를 Microsoft ID 플랫폼 logout 엔드포인트로 리디렉션해야 합니다.

웹앱이 사용자를 logout 엔드포인트에 리디렉션하면 이 엔드포인트가 브라우저에서 사용자의 세션을 지웁니다. 앱이 logout 엔드포인트로 이동하지 않은 경우 사용자는 자격 증명을 다시 입력하지 않고 앱에 다시 인증합니다. 그 이유는 Microsoft ID 플랫폼을 사용하는 유효한 단일 로그인 세션이 있기 때문입니다.

자세히 알아보려면 Microsoft ID 플랫폼 및 OpenID Connect 프로토콜 설명서에서 로그아웃 요청 보내기 섹션을 참조하세요.

애플리케이션 등록

애플리케이션을 등록하는 동안 전면 채널 로그아웃 URL을 등록합니다. 이 자습서에서는 인증 페이지의 전면 채널 로그아웃 URL 필드에 https://localhost:44321/signout-oidc를 등록했습니다. 자세한 내용은 WebApp 앱 등록을 참조하세요.

로그아웃 단추

ASP.NET에서 웹앱의 로그아웃 단추를 선택하면 AccountController 컨트롤러에서 SignOut 동작이 트리거됩니다(아래 참조).

<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>

컨트롤러의 SignOut 동작

이전 버전의 ASP.NET Core 템플릿 Account 에서 컨트롤러는 웹앱에 포함되었습니다. 이제는 컨트롤러가 Microsoft.Identity.Web.UI NuGet 패키지의 일부이기 때문에 더 이상 포함되지 않습니다. 자세한 내용은 AccountController.cs를 참조하세요.

  • Microsoft Entra ID가 로그아웃을 완료하면 컨트롤러가 다시 호출되도록 OpenID 리디렉션 URI를 /Account/SignedOut으로 설정합니다.

  • Signout()을 호출합니다. 이는 OpenID Connect 미들웨어가 Microsoft ID 플랫폼 logout 엔드포인트에 연결할 수 있도록 합니다. 그런 다음 엔드포인트는 다음을 수행합니다.

    • 브라우저에서 세션 쿠키를 지웁니다.
    • 사후 로그아웃 리디렉션 URI를 다시 호출합니다. 기본적으로 사후 로그아웃 리디렉션 URI는 로그아웃된 보기 페이지인 SignedOut.cshtml.cs를 표시합니다. 이 페이지는 Microsoft.Identity.Web의 일부로도 제공됩니다.

logout 엔드포인트에 대한 호출 가로채기

사후 로그아웃 URI를 사용하면 애플리케이션이 전체 로그아웃에 참여할 수 있습니다.

ASP.NET Core OpenID Connect 미들웨어를 사용하면 앱에서 OnRedirectToIdentityProviderForSignOut이라는 OpenID Connect 이벤트를 제공하여 Microsoft ID 플랫폼 logout 엔드포인트에 대한 호출을 가로챌 수 있습니다. 이는 Microsoft.Identity.Web에서 자동으로 처리됩니다(웹앱이 Web API를 호출하는 경우 계정을 지움).

프로토콜

로그아웃에 대해 자세히 알아보려면 OpenID Connect에서 사용할 수 있는 프로토콜 설명서를 읽습니다.

다음 단계