ASP.NET Core를 사용하여 Microsoft 계정 외부 로그인 설정
이 샘플에서는 사용자가 이전 페이지 만든 ASP.NET Core 프로젝트를 사용하여 회사, 학교 또는 개인 Microsoft 계정으로 로그인할 수 있도록 하는 방법을 보여 줍니다.
Microsoft Entra 관리 센터에서 앱 만들기
- Microsoft.AspNetCore.Authentication.MicrosoftAccount NuGet 패키지를 프로젝트에 추가합니다.
- Microsoft Entra 관리 센터에 애플리케이션을 등록하려면 Microsoft ID 플랫폼에 애플리케이션 등록 단계를 따르십시오.
클라이언트 암호 만들기
Microsoft ID 플랫폼에 애플리케이션 등록: 자격 증명 추가 단계에 따라 Microsoft Entra 관리 센터에서 클라이언트 암호를 생성합니다.
Microsoft 클라이언트 ID 및 비밀 저장
Secret Manager사용하여 이전 단계에서 만든 Microsoft 애플리케이션(클라이언트) ID 및 클라이언트 비밀 같은 중요한 설정을 저장합니다. 이 샘플의 경우 다음 단계를 사용합니다.
지침 비밀 스토리지 사용에 따라 비밀 저장소에 대한 프로젝트를 초기화합니다.
비밀 키
Authentication:Microsoft:ClientId
Authentication:Microsoft:ClientSecret
로컬 비밀 저장소에 중요한 설정을 저장합니다. Azure 앱 등록 블레이드에서 애플리케이션(클라이언트) ID에<client-id>
이(가) 나열됩니다.<client-secret>
는 비밀 ID이 아닌 인증서 & 비밀 아래의 값로 나열됩니다.dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
:
구분 기호는 모든 플랫폼의 환경 변수 계층 키에서 작동하지 않습니다. 예를 들어, :
구분 기호는 Bash에서 지원되지 않습니다. 이중 밑줄 __
는 다음과 같습니다.
- 모든 플랫폼에서 지원됩니다.
- 자동으로 콜론으로 대체됩니다,
:
.
Microsoft 계정 인증 구성
Program
에 인증 서비스를 추가합니다.
builder.Services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
});
AddAuthentication(IServiceCollection, String) 오버로드는 DefaultScheme 속성을 설정합니다.
AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) 오버로드를 사용하면 다양한 용도로 기본 인증 체계를 설정하는 데 사용할 수 있는 인증 옵션을 구성할 수 있습니다.
AddAuthentication
대한 후속 호출은 이전에 구성된 AuthenticationOptions 속성을 재정의합니다.
인증 처리기를 등록하는 AuthenticationBuilder 확장 메서드는 인증 체계당 한 번만 호출할 수 있습니다. 구성표 속성, 구성표 이름 및 표시 이름을 구성할 수 있는 오버로드가 있습니다.
Microsoft 계정 인증에서 지원하는 구성 옵션에 대한 자세한 내용은 MicrosoftAccountOptions API 참조를 참조하세요. 사용자에 대한 다른 정보를 요청하는 데 사용할 수 있습니다.
Microsoft 계정으로 로그인
- 앱을 실행하고 로그인을 선택합니다. Microsoft로 로그인하는 옵션이 나타납니다.
- 인증을 위해 Microsoft로 이동하려면 Microsoft로 로그인하려면 선택합니다. Microsoft 계정으로 로그인한 후 앱에서 정보에 액세스할 수 있도록 하라는 메시지가 표시됩니다.
- 예 선택하여 전자 메일을 설정할 웹 사이트로 다시 이동합니다.
이제 Microsoft 자격 증명을 사용하여 로그인했습니다.
여러 인증 공급자
앱에 여러 공급자가 필요한 경우 공급자 확장 메서드를 AddAuthentication뒤에 연결합니다.
services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });
프록시 또는 부하 분산 장치를 사용하여 요청 정보 전달
앱이 프록시 서버 또는 부하 분산 장치 뒤에 배포된 경우 원래 요청 정보 중 일부는 요청 헤더의 앱으로 전달될 수 있습니다. 이 정보에는 일반적으로 보안 요청 체계(https
), 호스트 및 클라이언트 IP 주소가 포함됩니다. 앱은 원래 요청 정보를 검색하고 사용하기 위해 이러한 요청 헤더를 자동으로 읽지 않습니다.
이 체계는 외부 공급자와의 인증 흐름에 영향을 주는 링크 생성에 사용됩니다. 보안 체계(https
)가 끊어지면 앱이 잘못된 안전하지 않은 리디렉션 URL을 생성합니다.
전달된 헤더 미들웨어를 사용하여 요청 처리를 위해 앱에서 원래 요청 정보를 사용할 수 있도록 합니다.
자세한 내용은 프록시 서버 및 부하 분산 장치 작동하도록 ASP.NET Core 구성참조하세요.
문제 해결
Microsoft 계정 공급자가 로그인 오류 페이지로 리디렉션하는 경우 Uri의
#
(해시 태그) 바로 다음에 오류 제목 및 설명 쿼리 문자열 매개 변수를 적어 둡니다.오류 메시지가 Microsoft 인증 문제를 나타내는 것처럼 보이지만 가장 일반적인 원인은 애플리케이션 URI가 웹 플랫폼에 지정된 리디렉션 URI 일치하지 않는 것입니다.
Identity이(가)
ConfigureServices
에서services.AddIdentity
을(를) 호출하여 구성되지 않으면, 인증을 시도할 때 ArgumentException이 발생합니다. 'SignInScheme' 옵션이제공되어야 합니다. 이 샘플에 사용된 프로젝트 템플릿은 이 작업을 수행하도록 합니다.초기 마이그레이션을 적용하여 사이트 데이터베이스를 만들지 않은 경우 요청 오류를 처리하는 동안 데이터베이스 작업이 실패했습니다. 마이그레이션 적용을 탭하여 데이터베이스를 만들고, 오류를 해결하려면 새로 고침을 하세요.
다음 단계
- 이 문서에서는 Microsoft로 인증하는 방법을 보여 줬습니다. 이전 페이지나열된 다른 공급자를 사용하여 인증하는 유사한 방법을 따릅니다.
- 웹 사이트가 Azure 웹앱에 게시되면 Microsoft Entra 관리 센터에서 새 클라이언트 비밀을 만듭니다.
- Microsoft Entra 관리 센터에서
Authentication:Microsoft:ClientId
및Authentication:Microsoft:ClientSecret
애플리케이션 설정으로 설정합니다. 구성 시스템은 환경 변수에서 키를 읽도록 설정됩니다.
이 샘플에서는 사용자가 이전 페이지 만든 ASP.NET Core 3.0 프로젝트를 사용하여 회사, 학교 또는 개인 Microsoft 계정으로 로그인할 수 있도록 하는 방법을 보여 줍니다.
Microsoft Entra 관리 센터에서 앱 만들기
- Microsoft.AspNetCore.Authentication.MicrosoftAccount NuGet 패키지를 프로젝트에 추가합니다.
- Microsoft Entra 관리 센터에서 애플리케이션을 등록하려면 Microsoft ID 플랫폼에 애플리케이션 등록 단계에 따라 진행하십시오.
클라이언트 암호 만들기
Microsoft ID 플랫폼에 애플리케이션 등록: 자격 증명 추가 단계에 따라 Microsoft Entra 관리 센터에서 클라이언트 암호를 생성합니다.
Microsoft 클라이언트 ID 및 비밀 저장
이전 단계에서 만든 Microsoft 애플리케이션(클라이언트) ID 및 클라이언트 비밀 같은 중요한 설정을 Secret Manager저장합니다. 이 샘플의 경우 다음 단계를 사용합니다.
비밀 스토리지를 활성화하라는지침에 따라 프로젝트를 초기화합니다.
비밀 키
Authentication:Microsoft:ClientId
및Authentication:Microsoft:ClientSecret
을 이용하여 민감한 설정을 로컬 비밀 저장소에 저장하십시오.dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
:
구분 기호는 모든 플랫폼의 환경 변수 계층 키에서 작동하지 않습니다. 예를 들어 :
구분 기호는 Bash에서 지원하지 않습니다. 이중 밑줄 __
은 다음과 같습니다.
- 모든 플랫폼에서 지원됩니다.
- 자동으로 콜론인 ':',
:
으로 대체됩니다.
Microsoft 계정 인증 구성
Microsoft 계정 서비스를 Startup.ConfigureServices
에 추가합니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
});
}
AddAuthentication(IServiceCollection, String) 오버로드는 DefaultScheme 속성을 설정합니다.
AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) 오버로드를 사용하면 다양한 용도로 기본 인증 체계를 설정하는 데 사용할 수 있는 인증 옵션을 구성할 수 있습니다.
AddAuthentication
대한 후속 호출은 이전에 구성된 AuthenticationOptions 속성을 재정의합니다.
인증 처리기를 등록하는 AuthenticationBuilder 확장 메서드는 인증 체계당 한 번만 호출할 수 있습니다. 구성표 속성, 구성표 이름 및 표시 이름을 구성할 수 있는 오버로드가 있습니다.
Microsoft 계정 인증에서 지원하는 구성 옵션에 대한 자세한 내용은 MicrosoftAccountOptions API 참조를 참조하세요. 사용자에 대한 다른 정보를 요청하는 데 사용할 수 있습니다.
Microsoft 계정으로 로그인
앱을 실행하고 로그인을 선택합니다. Microsoft로 로그인하는 옵션이 나타납니다. Microsoft 선택하여 인증을 위해 Microsoft로 이동합니다. Microsoft 계정으로 로그인한 후 앱에서 정보에 액세스할 수 있도록 하라는 메시지가 표시됩니다.
예 탭하면 전자 메일을 설정할 수 있는 웹 사이트로 다시 리디렉션됩니다.
이제 Microsoft 자격 증명을 사용하여 로그인했습니다.
여러 인증 공급자
앱에 여러 공급자가 필요한 경우 공급자 확장 메서드를 AddAuthentication뒤에 연결합니다.
services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });
프록시 또는 부하 분산 장치를 사용하여 요청 정보 전달
앱이 프록시 서버 또는 부하 분산 장치 뒤에 배포된 경우 원래 요청 정보 중 일부는 요청 헤더의 앱으로 전달될 수 있습니다. 이 정보에는 일반적으로 보안 요청 체계(https
), 호스트 및 클라이언트 IP 주소가 포함됩니다. 앱은 원래 요청 정보를 검색하고 사용하기 위해 이러한 요청 헤더를 자동으로 읽지 않습니다.
이 체계는 외부 공급자와의 인증 흐름에 영향을 주는 링크 생성에 사용됩니다. 보안 체계(https
)가 끊어지면 앱이 잘못된 안전하지 않은 리디렉션 URL을 생성합니다.
전달된 헤더 미들웨어를 사용하여 요청 처리를 위해 앱에서 원래 요청 정보를 사용할 수 있도록 합니다.
자세한 내용은 프록시 서버 및 부하 분산 장치 작동하도록 ASP.NET Core 구성참조하세요.
문제 해결
Microsoft 계정 공급자가 사용자를 로그인 오류 페이지로 리디렉션하는 경우 Uri의
#
(해시태그) 바로 다음에 오류 제목 및 설명 쿼리 문자열 매개 변수를 적어 둡니다.오류 메시지가 Microsoft 인증 문제를 나타내는 것처럼 보이지만 가장 일반적인 원인은 애플리케이션 URI가 웹 플랫폼에 지정된 리디렉션 URI 일치하지 않는 것입니다.
services.AddIdentity
을ConfigureServices
에서 호출하여 Identity가 구성되지 않은 경우, 인증을 시도하면 ArgumentException이 발생합니다: 'SignInScheme' 옵션이제공되어야 합니다. 이 샘플에 사용된 프로젝트 템플릿은 이 작업을 수행하도록 합니다.초기 마이그레이션을 적용하여 사이트 데이터베이스를 만들지 않은 경우 요청 오류를 처리하는 동안 데이터베이스 작업이 실패한 표시됩니다. 마이그레이션 적용을 탭하여 데이터베이스를 만들고, 새로 고침하여 오류를 넘어 계속 진행합니다.
다음 단계
ASP.NET Core