안드로이드/개발 공부

[Android / Kotlin] Naver, Github Oauth2 (ACCESSTOKEN 발급)

감자 바보 2023. 4. 8. 15:40
반응형

[Android / Kotlin] Naver, Github Oauth2 (ACCESSTOKEN 발급)

 이번 게시글에서는 프로젝트 진행 중 사용한 안드로이드에서 NAVER와 깃허브 Oauth2를 통해 AccessToken을 발급받는 방법을 정리할 것 입니다.

 

NAVER Oauth2

 프로젝트를 진행하면서 Naver Oauth2를 이용해 로그인 처리를 하기 위해 아래와 같은 순서를 거쳤습니다.

 

1. naver developer 어플리케이션 등록
2. 라이브러리 설정 (dependency 및 naver sdk 설정)
https://developers.naver.com/docs/login/android/android.md
3. 네아로 SDK 초기화

NaverIdLoginSDK.initialize(requireContext(), NAVER_CLIENT_ID, NAVER_CLIENT_SECRET, "앱 이름")

4. Callback 설정 (성공 시 accessToken 가져오기)

val oAuthLoginCallback = object : OAuthLoginCallback {
    override fun onSuccess() {
                val naverAccessToken = NaverIdLoginSDK.getAccessToken()
    }

    override fun onError(errorCode: Int, message: String) {
        requireView().showSnackBarMessage("네이버 로그인에 실패했습니다.")
        binding.progressbar.isVisible = false
    }

    override fun onFailure(httpStatus: Int, message: String) {
        requireView().showSnackBarMessage("네이버 로그인에 실패했습니다.")
        binding.progressbar.isVisible = false
    }
}


5. 네이버 로그인 인증

NaverIdLoginSDK.authenticate(requireContext(), oAuthLoginCallback)

 

GITHUB Oauth2

 프로젝트를 진행하면서 Naver Oauth2를 이용해 로그인 처리를 하기 위해 아래와 같은 순서를 거쳤습니다.

 

1. Github - Setting-Developer Setting - Oauth Apps 설정

어플리케이션 이름, Hompage Url, Callback URL 설정

2. Manifest 설정

<manifest>
	<uses-permission android:name="android.permission.INTERNET" />
    <activity
        ... >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data
                    android:host="github-auth"
                    android:scheme="callback URL" />
            </intent-filter>
    <activity />
<manifest>


3. 깃허브 로그인 실행 코드 (인터넷 로그인)

val githubLoginUri = Uri.Builder().scheme("https").authority("github.com")
.appendPath("login")
.appendPath("oauth")
.appendPath("authorize")
.appendQueryParameter("client_id", BuildConfig.GITHUB_CLIENT_ID)
.build()

startActivity(Intent(Intent.ACTION_VIEW, githubLoginUri).apply {
    addCategory(Intent.CATEGORY_BROWSABLE)
    addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
})


4. 액티비티 콜백 부분 (accessToken 발급)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityLoginBinding.inflate(layoutInflater)
    setContentView(binding.root)

    val uri = intent?.data
    // Oauth 로그인 인지 아닌지 확인
    when (uri?.scheme.toString()) {
        "Callback URL scheme" -> { // 깃허브
            loginActivityViewModel.isTriedGithubLogin = true
            loginActivityViewModel.githubCode = uri?.getQueryParameter("code") ?: ""
        }
        else -> {}
    } // End of when
}

 

참고

 

1. 네이버 Oauth2 개발가이드
https://developers.naver.com/docs/login/android/android.md
2. Github Oauth2 개발가이드
https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps