안녕하세요. 도깨비 개발자입니다.
오늘은 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#에서 사용자 인증과 사용자 정보를 가져오는 예제를 다루어 보았습니다.
감사합니다.
'Development > Google API' 카테고리의 다른 글
Google cloud function : Firestore 데이터 조회/수정하기 (0) | 2024.01.12 |
---|---|
Google cloud function(2/2): 함수 만들기 및 동작테스트 (0) | 2024.01.10 |
Google cloud function(1/2): 소개 및 환경설정 (0) | 2024.01.10 |