빠른 시작: ASP.NET 앱에서 사용자 로그인 및 Microsoft Graph API 호출
이 빠른 시작에서는 Microsoft Entra 계정이 있는 사용자가 로그인할 수 있는 ASP.NET 웹 애플리케이션을 보여 주는 코드 샘플을 다운로드하고 실행합니다.
자세한 내용은 샘플 작동 방식을 참조하세요.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- Visual Studio 2022
- .NET Framework 4.7.2 이상
앱 등록 및 다운로드
팁
이 문서의 단계는 시작하는 포털에 따라 약간 다를 수 있습니다.
애플리케이션 빌드를 시작할 수 있는 두 가지 옵션, 즉 자동 구성 또는 수동 구성이 있습니다.
자동 구성
앱을 자동으로 구성한 다음, 코드 샘플을 다운로드하려면 다음 단계를 수행합니다.
- 최소한 클라우드 애플리케이션 관리자로 Microsoft Entra 관리 센터 빠른 시작 환경에 로그인합니다.
- 애플리케이션 이름을 입력하고 등록을 선택합니다.
- 지침에 따라 한 번의 클릭으로 새 애플리케이션을 다운로드하고 자동으로 구성합니다.
수동 구성
애플리케이션 및 코드 샘플을 수동으로 구성하려면 다음 절차를 사용합니다.
1단계: 애플리케이션 등록
- 최소한 클라우드 애플리케이션 관리자로 Microsoft Entra 관리 센터에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 설정 아이콘을 사용하여 디렉터리 + 구독 메뉴에서 애플리케이션을 등록하려는 테넌트로 전환합니다.
- ID>애플리케이션>앱 등록으로 이동하고 신규 등록을 선택합니다.
- 이름에 대해 애플리케이션 이름을 입력합니다. 예를 들어 ASPNET-Quickstart를 입력합니다. 이 이름은 앱의 사용자에게 표시되며 나중에 변경할 수 있습니다.
- 리디렉션 URI 형식을 웹으로 설정하고 값을
https://localhost:44368/
로 설정합니다. - 등록을 선택합니다.
- 관리에서 인증을 선택합니다.
- 암시적 권한 부여 및 하이브리드 흐름 섹션에서 ID 토큰을 선택합니다.
- 저장을 선택합니다.
2단계: 프로젝트 다운로드
팁
Windows의 경로 길이 제한으로 인해 발생하는 오류를 방지하려면 보관 파일의 압축을 풀거나 리포지토리를 드라이브 루트에 가까운 디렉터리에 복제하는 것이 좋습니다.
3단계: 프로젝트 실행
.zip 보관 파일의 압축을 루트 폴더에 가까운 로컬 폴더에 풉니다. 예를 들어 파일의 압축을 C:\Azure-Samples에 풉니다.
Windows의 경로 길이 제한으로 인해 발생하는 오류를 방지하려면 보관 파일의 압축을 드라이브 루트에 가까운 디렉터리에 푸는 것이 좋습니다.
Visual Studio에서 솔루션(AppModelv2-WebApp-OpenIDConnect-DotNet.sln)을 엽니다.
Visual Studio 버전에 따라 마우스 오른쪽 단추로 AppModelv2-WebApp-OpenIDConnect-DotNet 프로젝트를 클릭한 다음, NuGet 패키지 복원을 선택해야 할 수도 있습니다.
보기>다른 창>패키지 관리자 콘솔을 차례로 선택하여 패키지 관리자 콘솔을 엽니다. 그런 다음
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
를 실행합니다.appsettings.json을 편집하고 매개 변수
ClientId
,Tenant
및redirectUri
을 다음으로 바꿉니다."ClientId" :"Enter_the_Application_Id_here" /> "TenantId": "Enter_the_Tenant_Info_Here" /> "RedirectUri" :"https://localhost:44368/" />
이 코드의 경우 다음과 같습니다.
Enter_the_Application_Id_here
는 이전에 만든 앱 등록의 애플리케이션(클라이언트) ID입니다. Microsoft Entra 관리 센터의 앱 등록에 있는 앱의 개요 페이지에서 애플리케이션(클라이언트) ID를 확인합니다.Enter_the_Tenant_Info_Here
는 다음 옵션 중 하나입니다.- 애플리케이션에서 내 조직만을 지원하는 경우 이 값을 디렉터리(테넌트) ID 또는 테넌트 이름(예:
contoso.onmicrosoft.com
)으로 바꿉니다. Microsoft Entra 관리 센터의 앱 등록에 있는 앱의 개요 페이지에서 디렉터리(테넌트) ID를 확인합니다. - 애플리케이션에서 모든 조직 디렉터리의 계정을 지원하는 경우 이 값을
organizations
로 바꿉니다. - 애플리케이션에서 모든 Microsoft 계정 사용자를 지원하는 경우 이 값을
common
으로 바꿉니다.
- 애플리케이션에서 내 조직만을 지원하는 경우 이 값을 디렉터리(테넌트) ID 또는 테넌트 이름(예:
redirectUri
는 이전에 Microsoft Entra 관리 센터의 앱 등록에서 입력한 리디렉션 URI입니다.
자세한 정보
이 섹션에서는 로그인 사용자에 필요한 코드에 대한 개요를 제공합니다. 이 개요는 코드의 작동 방식, 기본 인수의 개념 및 로그인을 기존 ASP.NET 애플리케이션에 추가하는 방법을 이해하는 데 유용할 수 있습니다.
샘플 작동 방법
OWIN 미들웨어 NuGet 패키지
OWIN 미들웨어 패키지가 있는 ASP.NET에서 OpenID Connect를 사용하여 쿠키 기반 인증이 포함된 인증 파이프라인을 설정할 수 있습니다. 이러한 패키지는 Visual Studio의 패키지 관리자 콘솔에서 다음 명령을 실행하여 설치할 수 있습니다.
Install-Package Microsoft.Identity.Web.Owin
Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Owin.Security.Cookies
OWIN 시작 클래스
OWIN 미들웨어는 호스팅 프로세스가 시작될 때 실행되는 시작 클래스를 사용합니다. 이 빠른 시작에서 startup.cs 파일은 루트 폴더에 있습니다. 다음 코드는 이 빠른 시작에서 사용하는 매개 변수를 보여 줍니다.
public void Configuration(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
OwinTokenAcquirerFactory factory = TokenAcquirerFactory.GetDefaultInstance<OwinTokenAcquirerFactory>();
app.AddMicrosoftIdentityWebApp(factory);
factory.Services
.Configure<ConfidentialClientApplicationOptions>(options => { options.RedirectUri = "https://localhost:44368/"; })
.AddMicrosoftGraph()
.AddInMemoryTokenCaches();
factory.Build();
}
Where | 설명 |
---|---|
ClientId |
Azure Portal에 등록된 애플리케이션의 애플리케이션 ID입니다. |
Authority |
사용자가 인증하는 STS(보안 토큰 서비스) 엔드포인트입니다. 퍼블릭 클라우드의 경우 일반적으로 https://login.microsoftonline.com/{tenant}/v2.0 입니다. 이 URL에서 {tenant}는 테넌트 이름, 테넌트 ID 또는 공통 엔드포인트에 대한 참조의 common 입니다. (공통 엔드포인트는 다중 테넌트 애플리케이션에 사용됩니다.) |
RedirectUri |
Microsoft ID 플랫폼에 대해 인증한 후 사용자가 전송되는 URL입니다. |
PostLogoutRedirectUri |
로그오프한 후 사용자가 전송되는 URL입니다. |
Scope |
공백으로 구분된 요청되는 범위 목록입니다. |
ResponseType |
인증의 응답에 권한 부여 코드 및 ID 토큰이 포함되는 요청입니다. |
TokenValidationParameters |
토큰 유효성 검사에 대한 매개 변수 목록입니다. 이 경우 개인, 회사 또는 학교 계정 유형의 로그인을 수락할 수 있음을 나타내기 위해 ValidateIssuer 가 false 로 설정됩니다. |
Notifications |
OpenIdConnect 메시지에서 실행할 수 있는 대리자의 목록입니다. |
인증 질문
컨트롤러에서 다른 사용자에게 인증 질문을 요청하여 로그인하게 할 수 있습니다.
public void SignIn()
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties{ RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
팁
이 메서드를 사용하여 인증 질문을 요청하는 것은 선택 사항입니다. 인증된 사용자와 인증되지 않은 사용자 모두에서 보기에 액세스할 수 있도록 하려면 일반적으로 이 옵션을 사용합니다. 또는 다음 섹션에 설명된 메서드를 사용하여 컨트롤러를 보호할 수 있습니다.
컨트롤러 또는 컨트롤러 작업을 보호하기 위한 특성
컨트롤러 또는 컨트롤러 작업은 [Authorize]
특성을 사용하여 보호할 수 있습니다. 이 특성은 인증된 사용자만 허용하여 컨트롤러의 작업에 액세스할 수 있도록 허용하여 컨트롤러 또는 작업에 대한 액세스를 제한합니다. 그러면 인증되지 않은 사용자가 [Authorize]
특성으로 데코레이팅된 작업 또는 컨트롤러 중 하나에 액세스하려고 할 때 인증 질문이 자동으로 수행됩니다.
컨트롤러에서 Microsoft Graph 호출
다음 코드와 같이 컨트롤러의 GetGraphServiceClient
확장 메서드를 사용하여 GraphServiceClient의 인스턴스를 가져와 컨트롤러에서 Microsoft Graph를 호출할 수 있습니다.
try
{
var me = await this.GetGraphServiceClient().Me.GetAsync();
ViewBag.Username = me.DisplayName;
}
catch (ServiceException graphEx) when (graphEx.InnerException is MicrosoftIdentityWebChallengeUserException)
{
HttpContext.GetOwinContext().Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
return View();
}
도움말 및 지원
도움이 필요하거나, 문제를 보고하거나, 지원 옵션에 대해 알아보려면 개발자를 위한 도움말 및 지원을 참조하세요.
다음 단계
이 빠른 시작의 전체 설명을 포함하여 애플리케이션 및 새로운 기능 빌드에 대한 전체 단계별 가이드는 ASP.NET 자습서를 사용해 보세요.