[Kotlin] Google AccessToken 발급받기

Hand·2022년 7월 26일
0

Android

목록 보기
1/17

제가 만든 어플리케이션의 인증방식은 구글이나 카카오를 통해서 발급받은 accessToken을 서버에 전달하여 새로운 accessToken과 refreshToken을 발생하여 이를 다시 서버에 전달하여 인증에 사용하는 방식으로 구현하였습니다.

주의: 이 모든 것은 Firebase console에 어플리케이션이 등록되어 있고, client_id 및 client_secret을 발급받은 상태에서 하실 수 있습니다. 그냥하면 빨간줄 뜹니다!

Google AccessToken

Google 로그인의 경우, 라이브러리를 통해 accessToken을 바로 발급받을 수 있는 것이 아닌, 로그인의 결과로 나온 AuthCode를 구글API를 통해 전달하여 발급받을 수 있었습니다.

authCode 받기
gso에서 옵션을 설정할 때, 다양한 옵션이 존재하는데 이 중 requestServerAuthCode()가 설정되어야 AuthCode를 받을 수 있습니다.

저는 StackOverflow에서 하라는데로 했는데 계속 null값만 들어와서 며칠을 찾다가 알게된 내용이였습니다ㅠ

// 구글 로그인 시 받을 옵션을 설정하는 단계
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
	.requestServerAuthCode("serverClientId")
// 인텐트를 통해 실행할 클라이언트를 설정
var googleSignInClient = GoogleSignIn.getClient(requreActivity(), gso)

// 인텐트를 통해 클라이언트 실행
val signInIntent = googleSignInClient.signInIntent
startActivityForResult(signInIntent, 9001)

이렇게 실행하면, 9001이라는 requestCode로 만들어진 intent가 실행되며, 구글 로그인 페이지를 사용할 수 있습니다.
실행한 결과 requestCode가 9001인 결과를 onActivityResult()를 통해서 그 다음 단계를 받을 수 있습니다.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

				// requestCode가 9001인 결과를 확인
        if (requestCode == 9001) {
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)

            try {
				// 실행한 결과를 account 변수에 넣음
				// 이 결과 안에 위에서 설정한 authCode가 담겨있다.
                val account = task.getResult(ApiException::class.java)!!
				
                // 구글에 전달하여 accessToken을 받기위한 함수
                getGoogleAccessToken(account.serverAuthCode!!)
            } catch (e: ApiException) {
                Log.e("account", "$e")
            }

        }
}

Google AccessToken
baseUrl이 "https://www.googleapis.com/oauth2/v4/token" 에 authCode를 Post하면 됩니다.

Request Data

{
	"grant_type": String,
	"client_id": String,
	"Client_secret": String,
	"redirect_uri": String,
	"code": String
}

Response Data

{
	"access_token": String,
	"expires_in": Int,
	"scope": String,
	"token_type": String,
	"id_token": String
}

grant_type에는 “authrization_code”라고 넣으면 되고,

client_id, client_secret의 경우 파이어베이스 콘솔 내에서 Authentication의 Sign-in method 내에서 확인할 수 있습니다.

redirect_uri는 만약 사용자가 인증이 성공했을 경우 사용자를 보내는 위치에 해당합니다.
필요의 경우 기입하면 되고, 저의 경우 공백을 기입했습니다.

code에 위에서 발급받은 authCode를 기입하여 전달해주면 완료!

이제 Response Data를 통해서 accessToken을 확인할 수 있습니다.

profile
화이팅!

0개의 댓글