다음을 통해 공유


ASP.NET Core의 Google 외부 로그인 설정

발레리 노벳스키, 릭 앤더슨, 샤라프 아바세리

이 자습서에서는 사용자가 이전 페이지 만든 ASP.NET Core 프로젝트를 사용하여 Google 계정으로 로그인할 수 있도록 하는 방법을 보여 줍니다.

Google OAuth 2.0 클라이언트 ID 및 비밀 만들기

  • 의 지침에 따라 Google Sign-In을 웹앱에 통합하십시오 (Google 설명서).

  • Google API & Services 이동합니다.

  • 프로젝트은 먼저 존재해야 하기 때문에, 필요하다면 하나를 만들어야 할 수도 있습니다. 프로젝트가 선택되면 대시보드입력합니다.

  • 대시보드OAuth 동의 화면에서.

    • 사용자 유형 - 외부을 선택하고 CREATE.
    • 앱 정보 대화 상자에서 앱에 대한 앱 이름, 사용자 지원 이메일개발자 연락처 정보을 제공합니다.
    • 범위 단계를 단계별로 실행합니다.
    • 테스트 사용자 단계를 단계별로 진행합니다.
    • OAuth 동의 화면을 검토한 후 앱 대시보드로 돌아가십시오.
  • 애플리케이션 대시보드의 자격 증명 탭에서 CREATE CREDENTIALS>OAuth 클라이언트 ID선택합니다.

  • 애플리케이션 유형>웹 애플리케이션선택하고 이름선택합니다.

  • 권한 있는 리디렉션 URI 섹션에서 추가 URI 선택하여 리디렉션 URI를 설정합니다. 리디렉션 URI 예: https://localhost:{PORT}/signin-google. 여기서 {PORT} 자리 표시자는 앱의 포트입니다.

  • 만들기 단추를 선택합니다.

  • 앱 구성에 사용할 클라이언트 ID클라이언트 비밀 저장합니다.

  • 사이트를 배포할 때 다음 중 하나를 수행합니다.

    • Google 콘솔에서 앱의 리디렉션 URI를 앱의 배포된 리디렉션 URI로 업데이트합니다.
    • 프로덕션 리디렉션 URI를 사용하여 프로덕션 앱에 대한 Google 콘솔 새 Google API 등록을 만듭니다.

Google 클라이언트 ID 및 비밀 저장

Secret ManagerGoogle 클라이언트 ID 및 비밀 값과 같은 중요한 설정을 저장합니다. 이 샘플의 경우 다음 단계를 사용합니다.

  1. 비밀 스토리지 사용지침에 따라 비밀 스토리지에 대한 프로젝트를 초기화합니다.

  2. 비밀 키 Authentication:Google:ClientIdAuthentication:Google:ClientSecret을 사용하여 민감한 설정을 로컬 비밀 저장소에 저장하십시오.

    dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"
    

: 구분 기호는 모든 플랫폼의 환경 변수 계층 키에서 작동하지 않습니다. 예를 들어 : 구분 기호는 Bash에서 지원되지 않습니다. 이중 밑줄 __은 다음과 같습니다.

  • 모든 플랫폼에서 지원됩니다.
  • 자동으로 콜론으로 대체됨, :.

API 콘솔API 자격 증명 및 사용량을 관리할 수 있습니다.

Google 인증 구성

AddIdentity 호출은 기본 체계 설정을 구성합니다. AddAuthentication(IServiceCollection, String) 오버로드는 DefaultScheme 속성을 설정합니다. AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) 오버로드를 사용하면 다양한 용도로 기본 인증 체계를 설정하는 데 사용할 수 있는 인증 옵션을 구성할 수 있습니다. AddAuthentication 대한 후속 호출은 이전에 구성된 AuthenticationOptions 속성을 재정의합니다.

인증 처리기를 등록하는 AuthenticationBuilder 확장 메서드는 인증 체계당 한 번만 호출할 수 있습니다. 구성표 속성, 구성표 이름 및 표시 이름을 구성할 수 있는 오버로드가 있습니다.

Google로 로그인

  • Google 개발자 라이브러리 의 링크를 가져옵니다.
  • 그런 다음 Google 개발자 버튼 생성로 이동합니다.
  • 성공적으로 로그인한 후 해당 링크로 전달되므로 컨트롤러가 data-login_uri="{HostName}/{ControllerName}/{actionName}" 특성과 일치하도록 설정합니다.
  • 로그인 프로세스를 완료하면 Google에서 반환하는 하나의 인수 string credential사용하는 컨트롤러 및 작업을 만듭니다.
  • 다음 코드 줄을 사용하여 credential 확인합니다. GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(credential);
  • 그러면 로그인한 사용자에 대한 사용 가능한 정보를 검색한 다음 데이터베이스에 저장할 수 있습니다.

기본 콜백 URI 변경

/signin-google URI 세그먼트는 Google 인증 공급자의 기본 콜백으로 설정됩니다. GoogleOptions 클래스의 상속된 RemoteAuthenticationOptions.CallbackPath 속성을 통해 Google 인증 미들웨어를 구성하는 동안 기본 콜백 URI를 변경할 수 있습니다.

문제 해결

  • 로그인이 작동하지 않고 오류가 발생하지 않는 경우 개발 모드로 전환하여 문제를 더 쉽게 디버그할 수 있습니다.
  • Identity가 ConfigureServices에서 services.AddIdentity을 호출하여 구성되지 않은 경우, 인증을 시도하면 ArgumentException: 'SignInScheme' 옵션이제공되어야 합니다. 이 자습서에서 사용하는 프로젝트 템플릿은 Identity이 설정되도록 보장합니다.
  • 초기 마이그레이션을 적용하여 사이트 데이터베이스를 만들지 않은 경우 요청 오류를 처리하는 동안 데이터베이스 작업이 실패한. 마이그레이션 적용을 선택하여 데이터베이스를 생성하고, 오류를 넘어가기 위해 페이지를 새로 고치세요.
  • Google과 같은 OAuth 2.0 공급자의 요청을 성공적으로 인증한 후 HTTP 500 오류 발생: 이 GitHub 문제 참조하세요.
  • React 및 기타 SPA 앱용 Google에서 외부 인증을 구현하는 방법: 이 GitHub 문제 참조하세요.

다음 단계

  • 이 문서에서는 Google에서 인증하는 방법을 보여 줬습니다. 유사한 접근 방식을 따라 이전 페이지 나열된 다른 공급자를 인증할 수 있습니다.
  • Azure에 앱을 게시한 후 Google API 콘솔에서 ClientSecret 다시 설정합니다.
  • Azure Portal에서 Authentication:Google:ClientIdAuthentication:Google:ClientSecret 애플리케이션 설정으로 설정합니다. 구성 시스템은 환경 변수에서 키를 읽도록 설정됩니다.