사용자가 로그인하는 웹앱: 코드 구성
이 문서에서는 사용자를 로그인하는 웹앱에 대한 코드를 구성하는 방법을 설명합니다.
웹앱을 지원하는 Microsoft 라이브러리
웹앱(및 웹 API)을 보호하는 데 사용되는 Microsoft 라이브러리는 다음과 같습니다.
언어 / 프레임워크 | 프로젝트 설정 GitHub |
Package(패키지) | 가져오기 시작됨 |
사용자 로그인 | 웹 API 액세스 | GA(일반 공급) 또는 공개 미리 보기1 |
|
---|---|---|---|---|---|---|---|
.NET | MSAL.NET | Microsoft.Identity.Client | — | GA | |||
.NET | Microsoft.IdentityModel | Microsoft.IdentityModel | — | 2 | 2 | GA | |
ASP.NET Core | Microsoft.Identity.Web | Microsoft.Identity.Web | 빠른 시작 | GA | |||
Java | MSAL4J | msal4j | 빠른 시작 | GA | |||
Spring | spring-cloud-azure-starter-active-directory | spring-cloud-azure-starter-active-directory | 자습서 | GA | |||
Node.js | MSAL 노드 | msal-node | 빠른 시작 | GA | |||
Python | MSAL Python | msal | GA | ||||
Python | identity | identity | 빠른 시작 | -- |
(1)온라인 서비스에 대한 유니버설 사용 조건은 공개 미리 보기의 라이브러리에 적용됩니다.
(2)Microsoft.IdentityModel 라이브러리는 토큰의 유효성 검사만 수행하고 ID 또는 액세스 토큰은 요청할 수 없습니다.
관심 있는 플랫폼에 해당하는 탭을 선택합니다.
이 문서 및 다음 항목의 코드 조각은 ASP.NET Core 웹앱 증분 자습서의 1장에서 추출되었습니다.
전체 구현에 대한 자세한 내용은 해당 자습서를 참조하는 것이 좋습니다.
구성 파일
Microsoft ID 플랫폼을 사용하여 사용자가 로그인하는 웹 애플리케이션은 구성 파일을 통해 구성됩니다. 해당 파일은 다음 값을 지정해야 합니다.
- 국가 클라우드 등에서 앱을 실행하려는 경우 클라우드 인스턴스. 다양한 옵션에는 다음이 포함됩니다.
- Azure 퍼블릭 클라우드의 경우
https://login.microsoftonline.com/
https://login.microsoftonline.us/
(Azure 미국 정부의 경우)- Microsoft Entra 독일용
https://login.microsoftonline.de/
- 21Vianet에서 운영하는 Microsoft Entra 중국용
https://login.partner.microsoftonline.cn/common
- Azure 퍼블릭 클라우드의 경우
- 테넌트 ID의 대상 그룹. 옵션은 앱이 단일 테넌트인지 다중 테넌트인지에 따라 달라집니다.
- 조직의 사용자를 로그인하기 위해 Azure Portal에서 가져오는 테넌트 GUID입니다. 도메인 이름을 사용할 수도 있습니다.
organizations
: 회사 또는 학교 계정의 사용자 로그인common
: 회사 또는 학교 계정 또는 Microsoft 개인 계정으로 사용자 로그인consumers
: Microsoft 개인 계정으로만 사용자 로그인
- Azure Portal에서 복사한 애플리케이션의 클라이언트 ID.
또한 인스턴스와 테넌트 ID 값을 연결한 권한에 대한 참조를 볼 수도 있습니다.
ASP.NET Core에서 해당 설정은 "Microsoft Entra ID" 섹션의 appsettings.json 파일에 있습니다.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "[Enter the tenantId here]",
// Client ID (application ID) obtained from the Azure portal
"ClientId": "[Enter the Client Id here]",
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-oidc"
}
}
ASP.NET Core에서 다른 파일(properties\launchSettings.json)에는 애플리케이션 및 다양한 프로필에 대한 URL(applicationUrl
) 및 TLS/SSL 포트(sslPort
)가 포함되어 있습니다.
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:3110/",
"sslPort": 44321
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"webApp": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:3110/"
}
}
}
Azure Portal에서 애플리케이션의 인증 페이지에 등록하는 리디렉션 URL은 해당 URL과 일치해야 합니다. 위의 두 구성 파일은 https://localhost:44321/signin-oidc
입니다. 그 이유는 applicationUrl
이 http://localhost:3110
인데 sslPort
가 지정되었기 때문입니다(44321
). CallbackPath
는 appsettings.json
에 정의된 대로 /signin-oidc
입니다.
동일한 방식으로 로그아웃 URL은 https://localhost:44321/signout-oidc
로 설정됩니다.
참고 항목
SignedOutCallbackPath는 이벤트를 처리하는 동안 충돌을 방지하기 위해 포털 또는 애플리케이션으로 설정해야 합니다.
초기화 코드
초기화 코드 차이는 플랫폼에 따라 다릅니다. ASP.NET Core 및 ASP.NET의 경우 사용자 로그인은 OpenID Connect 미들웨어에 위임됩니다. ASP.NET 또는 ASP.NET Core 템플릿은 Azure AD v1.0 엔드포인트에 대한 웹 애플리케이션을 생성합니다. Microsoft ID 플랫폼에 맞게 조정하려면 몇 가지 구성이 필요합니다.
ASP.NET Core 웹앱(및 웹 API)의 경우 컨트롤러 또는 컨트롤러 작업에 Authorize
특성이 있으므로 애플리케이션이 보호됩니다. 이 특성은 사용자가 인증되었는지 확인합니다. .NET 6 릴리스 이전에는 코드 초기화가 Startup.cs 파일에 있었습니다. .NET 6이 포함된 새 ASP.NET Core 프로젝트에는 더 이상 Startup.cs 파일이 포함되지 않습니다. 대신 Program.cs 파일이 포함됩니다. 이 자습서의 나머지 부분은 .NET 5 이하와 관련이 있습니다.
참고 항목
Microsoft.Identity.Web을 활용하는 Microsoft ID 플랫폼용 새 ASP.NET Core 템플릿을 사용하여 직접 시작하려는 경우에는 .NET 5.0용 프로젝트 템플릿이 포함된 미리 보기 NuGet 패키지를 다운로드할 수 있습니다. 설치가 완료되면 ASP.NET Core 웹 애플리케이션(MVC 또는 Blazor)을 직접 인스턴스화할 수 있습니다. 자세한 내용은 Microsoft.Identity.Web 웹앱 프로젝트 템플릿을 참조하세요. 이는 다음 단계를 모두 수행하므로 가장 간단한 방식입니다.
Visual Studio 내에서 현재의 기본 ASP.NET Core 웹 프로젝트를 사용하거나 dotnet new mvc --auth SingleOrg
또는 dotnet new webapp --auth SingleOrg
를 사용하여 프로젝트를 시작하려는 경우 다음과 같은 코드가 표시됩니다.
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
이 코드는 Azure Active Directory v1.0 애플리케이션을 만드는 데 사용되는 레거시 Microsoft.AspNetCore.Authentication.AzureAD.UI NuGet 패키지를 사용합니다. 이 문서에서는 해당 코드를 바꾸는 Microsoft ID 플랫폼 v2.0 애플리케이션을 만드는 방법을 설명합니다.
프로젝트에 Microsoft.Identity.Web 및 Microsoft.Identity.Web.UI NuGet 패키지를 추가합니다.
Microsoft.AspNetCore.Authentication.AzureAD.UI
NuGet 패키지가 있는 경우 제거합니다.AddMicrosoftIdentityWebApp
및AddMicrosoftIdentityUI
메서드를 사용하도록ConfigureServices
의 코드를 업데이트합니다.public class Startup { ... // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(Configuration, "AzureAd"); services.AddRazorPages().AddMvcOptions(options => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(policy)); }).AddMicrosoftIdentityUI();
Startup.cs의
Configure
메서드에서app.UseAuthentication();
및app.MapControllers();
를 호출하여 인증을 사용하도록 설정합니다.// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // more code here app.UseAuthentication(); app.UseAuthorization(); app.MapRazorPages(); app.MapControllers(); // more code here }
이 코드의 경우 다음과 같습니다.
AddMicrosoftIdentityWebApp
확장 메서드는 Microsoft.Identity.Web에 정의되어 있습니다.- 옵션을 구성하여 구성 파일을 읽습니다(이 경우 "Microsoft Entra ID" 섹션에서).
- Microsoft ID 플랫폼에 권한이 부여되도록 OpenID Connect 옵션을 구성합니다.
- 토큰 발급자의 유효성을 검사합니다.
- 이름에 해당하는 클레임이 ID 토큰의
preferred_username
클레임에서 매핑되었는지 확인합니다.
구성 개체 외에도
AddMicrosoftIdentityWebApp
을 호출할 때 구성 섹션의 이름을 지정할 수 있습니다. 기본적으로AzureAd
입니다.AddMicrosoftIdentityWebApp
에는 고급 시나리오에 대한 다른 매개 변수가 있습니다. 예를 들어 OpenID Connect 미들웨어 이벤트를 추적하면 인증이 작동하지 않을 때 웹 애플리케이션의 문제 해결을 지원할 수 있습니다. 선택적 매개 변수subscribeToOpenIdConnectMiddlewareDiagnosticsEvents
를true
로 설정하면 ASP.NET Core 미들웨어 집합이 HTTP 응답으로부터HttpContext.User
의 사용자 ID로 진행할 때 정보를 처리하는 방법을 보여줍니다.AddMicrosoftIdentityUI
확장 메서드는 Microsoft.Identity.Web.UI에 정의되어 있습니다. 로그인 및 로그아웃을 처리하는 기본 컨트롤러를 제공합니다.
Microsoft.Identity.Web을 사용하여 웹앱을 만드는 방법에 대한 자세한 내용은 microsoft-identity-web의 웹앱을 참조하세요.