ASP.NET Core를 사용 하 여 Microsoft 계정 외부 로그인 설정Microsoft Account external login setup with ASP.NET Core

작성자: Valeriy NovytskyyRick AndersonBy Valeriy Novytskyy and Rick Anderson

이 샘플에서 만든 ASP.NET Core 2.2 프로젝트를 사용 하 여 Microsoft 계정으로 로그인 할 수 있도록 하는 방법을 보여 줍니다.는 이전 페이지합니다.This sample shows you how to enable users to sign in with their Microsoft account using the ASP.NET Core 2.2 project created on the previous page.

Microsoft 개발자 포털에서 앱 만들기Create the app in Microsoft Developer Portal

Microsoft 계정이 없다면 선택 만드십시오합니다.If you don't have a Microsoft account, select Create one. 로그인 한 후 리디렉션됩니다 합니다 앱 등록 페이지:After signing in you are redirected to the App registrations page:

  • 선택 새 등록Select New registration
  • 입력 한 이름을입니다.Enter a Name.
  • 에 대 한 옵션을 선택 지원 되는 계정 유형합니다.Select an option for Supported account types.
  • 아래 리디렉션 URI를 사용 하 여 개발 URL 입력 /signin-microsoft 추가 합니다.Under Redirect URI, enter your development URL with /signin-microsoft appended. 예를 들어, https://localhost:44389/signin-microsoft을 입력합니다.For example, https://localhost:44389/signin-microsoft. 이 샘플의 뒷부분에 나오는 구성 Microsoft 인증 체계에서 요청을 자동으로 처리 됩니다 /signin-microsoft OAuth 흐름을 구현 하는 경로입니다.The Microsoft authentication scheme configured later in this sample will automatically handle requests at /signin-microsoft route to implement the OAuth flow.
  • 선택 등록Select Register

클라이언트 비밀 만들기Create client secret

  • 왼쪽된 창에서 선택 인증서 및 비밀합니다.In the left pane, select Certificates & secrets.

  • 아래 클라이언트 비밀, 선택 새 클라이언트 암호Under Client secrets, select New client secret

    • 클라이언트 암호에 대 한 설명을 추가 합니다.Add a description for the client secret.
    • 선택 된 추가 단추입니다.Select the Add button.
  • 아래 클라이언트 비밀, 클라이언트 암호의 값을 복사 합니다.Under Client secrets, copy the value of the client secret.

참고

URI 세그먼트 /signin-microsoft Microsoft 인증 공급자의 기본 콜백으로 설정 됩니다.The URI segment /signin-microsoft is set as the default callback of the Microsoft authentication provider. 상속을 통해 Microsoft 인증 미들웨어를 구성 하는 동안 기본 콜백 URI를 변경할 수 있습니다 RemoteAuthenticationOptions.CallbackPath 의 속성을 MicrosoftAccountOptions 클래스입니다.You can change the default callback URI while configuring the Microsoft authentication middleware via the inherited RemoteAuthenticationOptions.CallbackPath property of the MicrosoftAccountOptions class.

Microsoft 클라이언트 ID 및 클라이언트 암호를 저장 합니다.Store the Microsoft client ID and client secret

안전 하 게 저장 하려면 다음 명령을 실행 ClientId 하 고 ClientSecret 사용 하 여 암호 관리자:Run the following commands to securely store ClientId and ClientSecret using Secret Manager:

dotnet user-secrets set Authentication:Microsoft:ClientId <Client-Id>
dotnet user-secrets set Authentication:Microsoft:ClientSecret <Client-Secret>

Microsoft와 같은 중요 한 설정이 연결 ClientId 하 고 ClientSecret 사용 하 여 응용 프로그램 구성에는 암호 관리자합니다.Link sensitive settings like Microsoft ClientId and ClientSecret to your application configuration using the Secret Manager. 이 샘플에서는 토큰 이름을 Authentication:Microsoft:ClientIdAuthentication:Microsoft:ClientSecret입니다.For the purposes of this sample, name the tokens Authentication:Microsoft:ClientId and Authentication:Microsoft:ClientSecret.

환경 변수에서 계층적 키를 사용할 경우 일부 플랫폼에서 콜론 구분 기호(:)가 작동하지 않을 수 있습니다(예: Bash).When working with hierarchical keys in environment variables, a colon separator (:) may not work on all platforms (for example, Bash). 두 개의 밑줄(__)은 모든 플랫폼에서 지원되며 콜론으로 바뀝니다.A double underscore (__) is supported by all platforms and is replaced by a colon.

Microsoft 계정 인증 구성Configure Microsoft Account Authentication

Microsoft 계정 서비스에 추가 합니다 ConfigureServices 의 메서드 Startup.cs 파일:Add the Microsoft Account service in the ConfigureServices method in Startup.cs file:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlite(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>()
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
    {
        microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
        microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
    });

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

에 대 한 호출 AddDefaultIdentity 기본 체계 설정을 구성 합니다.The call to AddDefaultIdentity configures the default scheme settings. 합니다 AddAuthentication(String) 집합 오버 로드는 DefaultScheme 속성입니다.The AddAuthentication(String) overload sets the DefaultScheme property. 합니다 AddAuthentication (동작<AuthenticationOptions>) 오버 로드를 통해 다양 한 용도 대 한 기본 인증 체계를 설정 하려면 사용할 수 있는 인증 옵션을 구성 합니다.The AddAuthentication(Action<AuthenticationOptions>) overload allows configuring authentication options, which can be used to set up default authentication schemes for different purposes. 에 대 한 후속 호출 AddAuthentication 이전에 구성 재정의 AuthenticationOptions 속성입니다.Subsequent calls to AddAuthentication override previously configured AuthenticationOptions properties.

AuthenticationBuilder 인증 처리기를 등록 하는 확장 메서드 수만 수 마다 한 번씩 호출 인증 체계입니다.AuthenticationBuilder extension methods that register an authentication handler may only be called once per authentication scheme. 오버 로드를 사용 하 여 스키마 속성, 스키마 이름, 구성을 허용 하 고 표시 이름 수 있는 합니다.Overloads exist that allow configuring the scheme properties, scheme name, and display name.

여러 인증 공급자Multiple authentication providers

앱에 여러 공급자가 필요한 경우 AddAuthentication 뒤에 공급자 확장 메서드를 연결합니다.When the app requires multiple providers, chain the provider extension methods behind AddAuthentication:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

참조 된 MicrosoftAccountOptions Microsoft 계정 인증에서 지 원하는 구성 옵션에 대 한 자세한 내용은 API 참조.See the MicrosoftAccountOptions API reference for more information on configuration options supported by Microsoft Account authentication. 이 사용 하 여 사용자에 대 한 다른 정보를 요청할 수 수 있습니다.This can be used to request different information about the user.

Microsoft 계정으로 로그인Sign in with Microsoft Account

실행을 클릭 하 고 로그인합니다.Run the and click Log in. Microsoft에 로그인 하는 옵션이 표시 됩니다.An option to sign in with Microsoft appears. Microsoft를 클릭 하면 리디렉션됩니다 Microsoft 인증에 대 한 합니다.When you click on Microsoft, you are redirected to Microsoft for authentication. (아직 로그인 하지 않은) 하는 경우 Microsoft 계정으로 로그인 한 후 앱 정보에 액세스할 수 있도록 라는 메시지가 표시 됩니다.After signing in with your Microsoft Account (if not already signed in) you will be prompted to let the app access your info:

및 전자 메일을 설정할 수 있는 웹 사이트로 다시 리디렉션됩니다.Tap Yes and you will be redirected back to the web site where you can set your email.

이제 Microsoft 자격 증명을 사용 하 여 로그인 됩니다.You are now logged in using your Microsoft credentials:

프록시 또는 부하 분산 장치를 사용하여 요청 정보 전달Forward request information with a proxy or load balancer

앱이 프록시 서버 또는 부하 분산 장치 뒤에 배포되는 경우 원래 요청 정보의 일부가 요청 헤더로 앱에 전달될 수 있습니다.If the app is deployed behind a proxy server or load balancer, some of the original request information might be forwarded to the app in request headers. 이 정보에는 일반적으로 보안 요청 체계(https), 호스트 및 클라이언트 IP 주소가 포함됩니다.This information usually includes the secure request scheme (https), host, and client IP address. 앱은 원래 요청 정보를 검색 및 사용하기 위해 이 요청 헤더를 자동으로 읽지 않습니다.Apps don't automatically read these request headers to discover and use the original request information.

이 체계는 외부 공급자의 인증 흐름에 영향을 주는 링크 생성에 사용됩니다.The scheme is used in link generation that affects the authentication flow with external providers. 보안 체계(https)가 손실되면 앱이 잘못되고 안전하지 않은 리디렉션 URL을 생성합니다.Losing the secure scheme (https) results in the app generating incorrect insecure redirect URLs.

전달된 헤더 미들웨어를 사용하여 요청 처리를 위한 원본 요청 정보를 앱에 제공합니다.Use Forwarded Headers Middleware to make the original request information available to the app for request processing.

자세한 내용은 프록시 서버 및 부하 분산 장치를 사용하도록 ASP.NET Core 구성을 참조하세요.For more information, see 프록시 서버 및 부하 분산 장치를 사용하도록 ASP.NET Core 구성.

문제 해결Troubleshooting

  • Microsoft 계정 공급자는 로그인 오류 페이지로 리디렉션됩니다, 하는 경우 오류 제목과 설명을 쿼리 문자열 매개 변수 바로 다음을 유의 합니다 # (해시 태그) Uri에 있습니다.If the Microsoft Account provider redirects you to a sign in error page, note the error title and description query string parameters directly following the # (hashtag) in the Uri.

    가장 일반적인 원인은 응용 프로그램의 모든 일치 하지 않는 Uri 오류 메시지는 Microsoft 인증에 문제가 있음을 나타낼 것 처럼 보이지만, 합니다 리디렉션 Uri 에 대해 지정 된 된 플랫폼 .Although the error message seems to indicate a problem with Microsoft authentication, the most common cause is your application Uri not matching any of the Redirect URIs specified for the Web platform.

  • 호출 하 여 구성 되어 있지 않으면 Identity services.AddIdentityConfigureServices를 인증 하려고 하면 ArgumentException: 'SignInScheme' 옵션을 제공 해야합니다.If Identity isn't configured by calling services.AddIdentity in ConfigureServices, attempting to authenticate will result in ArgumentException: The 'SignInScheme' option must be provided. 이 샘플에 사용 되는 프로젝트 템플릿이이 수행 되도록 보장 합니다.The project template used in this sample ensures that this is done.

  • 사이트 데이터베이스를 초기 마이그레이션을 적용 하 여 만들어지지 않은, 경우 받습니다 요청을 처리 하는 동안 데이터베이스 작업이 실패 했습니다. 오류입니다.If the site database has not been created by applying the initial migration, you will get A database operation failed while processing the request error. 마이그레이션 적용 데이터베이스를 만들고 오류 지 나 새로 고침 합니다.Tap Apply Migrations to create the database and refresh to continue past the error.

다음 단계Next steps

  • 이 문서에서는 Microsoft를 사용 하 여 인증 하는 보여 주었습니다.This article showed how you can authenticate with Microsoft. 에 나열 된 다른 공급자를 사용 하 여 인증 하는 유사한 방법을 따를 수 있습니다 합니다 이전 페이지합니다.You can follow a similar approach to authenticate with other providers listed on the previous page.

  • Azure 웹 앱에 웹 사이트를 게시 하면 새 클라이언트 만들기 암호는 Microsoft 개발자 포털에서.Once you publish your web site to Azure web app, create a new client secrets in the Microsoft Developer Portal.

  • 설정 된 Authentication:Microsoft:ClientIdAuthentication:Microsoft:ClientSecret Azure portal에서 응용 프로그램 설정 합니다.Set the Authentication:Microsoft:ClientId and Authentication:Microsoft:ClientSecret as application settings in the Azure portal. 구성 시스템 환경 변수에서 키를 읽을 수 설정 됩니다.The configuration system is set up to read keys from environment variables.