자습서: 권한 부여 및 인증을 위한 ASP.NET Core 웹앱 구성
적용: 흰색 확인 표시 기호가 있는 녹색 원 Workforce 테넌트는 흰색 확인 표시 기호가 있는 녹색 원을
외부 테넌트(자세한알아보기)
이 자습서에서는 인증 및 권한 부여 요소를 ASP.NET Core 웹앱에 추가합니다. 이전 자습서 ASP.NET Core 프로젝트를 만들고 인증하도록 구성했습니다.
이 자습서에서는 다음을 수행합니다.
- 코드에 권한 부여 및 인증 요소 추가
- ID 토큰에서 클레임 보기 사용
- 로그인 및 로그아웃 환경 추가
필수 구성 요소
- 자습서의 필수 구성 요소 및 단계 완료:사용자를 인증하는 ASP.NET Core 웹앱을 설정합니다.
인증 및 권한 부여 요소 추가
HomeController.cs 및 Program.cs 파일을 수정하여 인증 및 권한 부여 요소를 ASP.NET Core 웹앱에 추가해야 합니다. 여기에는 홈페이지 관리, 올바른 네임스페이스 추가 및 로그인 구성이 포함됩니다.
HomeController.cs 권한 부여 추가
애플리케이션의 홈페이지에는 사용자에게 권한을 부여하는 기능이 있어야 합니다.
Microsoft.AspNetCore.Authorization
네임스페이스는 웹앱에 대한 권한 부여를 구현하기 위한 클래스 및 인터페이스를 제공합니다.
[Authorize]
특성은 인증된 사용자만 웹앱을 사용할 수 있도록 지정하는 데 사용됩니다.
웹앱에서 Controllers/HomeController.cs열고 파일 맨 위에 다음 코드 조각을 추가합니다.
using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
다음 코드 조각과 같이
HomeController
클래스 정의 위에[Authorize]
특성을 추가합니다.[Authorize] public class HomeController : Controller { ...
Program.cs 인증 및 권한 부여 요소 추가
Program.cs
파일은 애플리케이션의 진입점이며, 웹앱에 인증 및 권한 부여를 추가하려면 수정해야 합니다. 앱이 인증을 위해 appsettings.json 정의된 설정을 사용할 수 있도록 서비스를 추가해야 합니다.
파일 맨 위에 다음 네임스페이스를 추가합니다.
using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc.Authorization; using Microsoft.Identity.Web; using Microsoft.Identity.Web.UI; using System.IdentityModel.Tokens.Jwt;
다음으로, 인증에 Microsoft ID를 사용하도록 앱을 구성하는 Microsoft Id 웹앱 인증 서비스를 추가합니다.
// Add services to the container. builder.Services.AddControllersWithViews(); // This is required to be instantiated before the OpenIdConnectOptions starts getting configured. // By default, the claims mapping will map claim names in the old format to accommodate older SAML applications. // This flag ensures that the ClaimsIdentity claims collection will be built from the claims in the token JwtSecurityTokenHandler.DefaultMapInboundClaims = false; // Sign-in users with the Microsoft identity platform builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration) .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(); builder.Services.AddControllersWithViews(options => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(policy)); }).AddMicrosoftIdentityUI();
다음으로, 인증 기능을 사용하도록 미들웨어를 구성해야 합니다. 코드의 나머지 부분을 다음 코드 조각으로 바꿉다.
var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
로그인 및 로그아웃 환경 추가
로그인 및 로그아웃을 위한 보다 사용자에게 친숙한 환경을 제공하려면 UI가 업데이트되어야 합니다. 이 섹션에서는 사용자의 인증 상태에 따라 탐색 항목을 표시하는 새 파일을 만드는 방법을 보여 줍니다. 이 코드는 ID 토큰 클레임을 읽고 사용자가 인증되어 있는지 확인하고 User.Claims
사용하여 ID 토큰 클레임을 추출합니다.
Pages/Shared 새 파일을 만들고 _LoginPartial.cshtml이름을 지정합니다.
파일을 열고 로그인 및 로그아웃 환경을 추가하기 위한 다음 코드를 추가합니다.
@using System.Security.Principal <ul class="navbar-nav"> @if (User.Identity is not null && User.Identity.IsAuthenticated) { <li class="nav-item"> <span class="nav-link text-dark">Hello @User.Claims.First(c => c.Type == "preferred_username").Value!</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>
Pages/Shared/_Layout.cshtml 열고 이전 단계에서 만든
_LoginPartial
대한 참조를 추가합니다. 다음 코드 조각과 같이navbar-nav
클래스의 끝에 배치합니다.<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a> </li> </ul> <partial name="_LoginPartial" /> </div>
사용자 지정 URL 도메인 사용(선택 사항)
적용: Workforce 테넌트는 녹색 원에 흰색 확인 표시 기호가
외부 테넌트(자세한 사항은에서 확인하십시오).
사용자 지정 도메인을 사용하여 인증 URL을 완전히 브랜드화합니다. 사용자 관점에서 사용자는 ciamlogin.com 도메인 이름으로 리디렉션되지 않고 인증 프로세스 중에 도메인에 남아 있습니다.
사용자 지정 도메인을 사용하려면 다음 단계를 수행합니다.
외부 테넌트 앱에 대한 사용자 지정 URL 도메인을 사용하도록 설정하여 외부 테넌트에 대한 사용자 지정 URL 도메인을 사용하도록 설정하는 단계를 사용합니다.
appsettings.json 파일을 엽니다.
-
Instance
및TenantId
매개 변수를Authority
속성으로 업데이트합니다. - 다음 문자열을
Authority
값에 추가하여https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here
에 적용하십시오.Enter_the_Custom_Domain_Here
사용자 지정 URL 도메인으로 바꾸고Enter_the_Tenant_ID_Here
테넌트 ID로 대체합니다. 테넌트 ID가 없는 경우 테넌트 세부 정보를읽는 방법을 알아봅니다. -
knownAuthorities
속성을 [Enter_the_Custom_Domain_Here]값으로 추가합니다.
-
appsettings.json 파일을 변경한 후, 사용자 지정 URL 도메인이 login.contoso.com이고 테넌트 ID가 aaaabbbb-0000-cccc-1111-dddd2222eeee인 경우, 파일은 다음 코드 조각과 유사하게 표시됩니다.
{
"AzureAd": {
"Authority": "https://login.contoso.com/aaaabbbb-0000-cccc-1111-dddd2222eeee",
"ClientId": "Enter_the_Application_Id_Here",
"ClientCertificates": [
{
"SourceType": "StoreWithThumbprint",
"CertificateStorePath": "CurrentUser/My",
"CertificateThumbprint": "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"
}
],
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-callback-oidc",
"KnownAuthorities": ["login.contoso.com"]
...