Development/Google API

Google API OAuth2를 C#으로 구현하는 예제

dokevee 2023. 2. 15. 09:34

안녕하세요. 도깨비 개발자입니다.

오늘은 Google OAuth2를 C#으로 구현하는 방법에 대해서 알아보겠습니다.

 

첫번째로 구글클라우드콘솔(https://console.cloud.google.com)으로 접속해주세요.

 

 

여기서 "프로젝트 선택" 을 클릭해서"새 프로젝트" 를 클릭해주세요.

 

그러면 아래와 같이 새프로젝트 만들기 페이지가 나타납니다.

프로젝트 이름을 기입하고 "만들기" 를 클릭해주세요.

 

프로젝트가 생성이 되면 윗쪽에서 "프로젝트 선택" 드롭박스를 클릭하고 방금 생성한 프로젝트를 선택해주세요.

 

그 다음,  대시보드에서 "API 및 서비스"를 클릭하세요.

 

왼쪽 목록에서 "OAuth 동의화면" 을 클릭해주세요.

 

UserType을 선택해야 하는데요.

불특정다수를 위한 앱을 만든다는 가정하에(일반적으로) "외부"를 선택하겠습니다.

"만들기" 버튼을 클릭해주세요.

 

 

앱이름, 사용자지원 이메일, 개발자 연락처 정보 총 3개가 필수입력입니다.

입력을 하고 "저장 후 계속" 버튼을 클릭합니다.

"범위 추가 또는 삭제" 를 클릭하고 사용자로부터 허용받을 권한을 골라주고 "업데이트" 를 클릭합니다.

 

예제에서는 이메일주소확인 권한만 골랐습니다.

"저장 후 계속" 클릭해주세요.

테스트할 계정을 추가하고 "저장 후 계속" 클릭해주세요.

 

다음엔 "요약" 페이지가 최종적으로 표시되고 확인후 이상없으면 "대시보드로 돌아가기" 클릭해주세요.

 

위의 그림과 같이 게시상태가 보이는데 "테스트"로 되어 있습니다.

개발을 모두 마치고 앱배포에 대한 준비가 모드 끝났을 때 "앱 게시"를 눌러서 구글로부터 심사를 받으시면 됩니다.

따라서 일단 그대로 두시면 됩니다.

 

이제 OAuth를 위한 API키와 시크릿키를 발급 받아야합니다.

왼쪽 메뉴에서 "사용자 인증 정보" 를 클릭해주세요.

 

"사용자 인증 정보 만들기" 를 클릭하고 "OAuth클라이언트 ID"를 클릭해주세요.

 

애플리케이션 유형을 골라야 하는데요.

저는 "데스크톱 앱"에서 테스트를 할 예정이므로 "데스크톱 앱" 을 클릭해보겠습니다.

위와 같이 설정하고 "만들기" 를 클릭해보겠습니다.

"JSON 다운로드" 를 클릭하여 다운로드를 하고 "확인" 버튼을 눌러줍니다.

이제 구글 클라우드 콘솔에서의 준비작업은 마쳤습니다.

 

이제 프로젝트에서 진행해보겠습니다.

먼저 개발환경은 Console 이며 .NET6(LTS) 환경입니다.

 

1. Google.Apis.Auth 패키지 설치

  • NuGet 패키지 관리자를 열고, Google.Apis.Auth 패키지를 설치합니다.
  • 그리고 테스트로 로그인한 사용자 정보를 가져오는 예제를 구현하기 위해 nuget을 하나더 추가합니다.

2. 인증 정보 가져오기

  • 다음 코드를 사용하여 인증 및 이메일 정보를 가져옵니다
using Google.Apis.Auth.OAuth2;
using Google.Apis.Oauth2.v2;
using Google.Apis.Oauth2.v2.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        UserCredential credential = await GetUserCredentialAsync();

        // OAuth2 API 클라이언트를 생성합니다.
        var oauth2Service = new Oauth2Service(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential
        });

        // 사용자의 정보를 가져옵니다.
        Userinfo userInfo = await oauth2Service.Userinfo.Get().ExecuteAsync();

        // 이메일 주소를 출력합니다.
        Console.WriteLine("User's email: " + userInfo.Email);

        Console.ReadLine();
    }

    static async Task<UserCredential> GetUserCredentialAsync()
    {
        UserCredential credential;

        using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
        {
            string credPath = "token.json";
            credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                new[] { "https://www.googleapis.com/auth/userinfo.email" },
                "user",
                CancellationToken.None,
                new FileDataStore(credPath, true)
            );
        }

        return credential;
    }
}

 

4. 실행결과

실행을 하면 자동으로 브라우저에서 아래와 같이 계정 선택 화면이 나타납니다.

여기서 테스트 사용자로 등록했던 계정으로 로그인해주세요.

 

다시 아래와 같이 확인하지 않은 앱이라고 뜹니다.

정식으로 앱 게시를 한 상태가 아니니 당연한 메세지입니다.

여기서 "계속" 을 눌러주세요.

이제 아래와 같이 권한에 대한 동의화면이 나타납니다.

"계속"을 눌러주세요.

 

이제 실행 결과를 확인해보면 응답받은 토큰이 저장된 걸 확인할 수 있습니다.

 

그리고 실행결과 화면에서 아래와 같이 사용자의 이메일을 취득한 걸 확인할 수 있습니다.

 

이상으로 구글 OAuth2 설정 및 C#에서 사용자 인증과 사용자 정보를 가져오는 예제를 다루어 보았습니다.

감사합니다.