8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Android Kotlin - Google Credential Manager - 获取访问令牌

Satyajay Prabhakar 2月前

27 0

我正在使用 CredentialManager 在 android 上登录 Google,credentialMnager 没有给我 AccessToken 来将其发送到我的服务器以使用 app-secret 和 clinet-idif (credential...) 进行身份验证。

我正在使用 CredentialManager 在 Android 上使用 Google 登录,credentialMnager 没有给我 AccessToken 以将其发送到我的服务器以使用 app-secret 和 clinet-id 进行身份验证

if (credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
    try {

        val googleIdTokenCredential = GoogleIdTokenCredential
            .createFrom(credential.data)

        val idToken = googleIdTokenCredential.idToken
        val id = googleIdTokenCredential.id
        val displayName = googleIdTokenCredential.displayName
        val personPhoto = googleIdTokenCredential.profilePictureUri

    } catch (e: GoogleIdTokenParsingException) {
        Log.d("pikaboo", "Received an invalid google id token response", e)
    }
}

任何人都可以帮助我如何使用这种或其他方法获取 AccessToken

帖子版权声明 1、本帖标题:Android Kotlin - Google Credential Manager - 获取访问令牌
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Satyajay Prabhakar在本站《kotlin》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您在 Android 中提到的“CredentialManager”不直接提供访问令牌。它用于存储用户凭据,例如 Google ID 令牌,用于用户识别,而不是使用您的应用密钥和客户端 ID 进行服务器端身份验证。

    你的代码:

    if (credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
    try {
        val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credential.data)   
    
    
        val idToken = googleIdTokenCredential.idToken
        val id = googleIdTokenCredential.id
        val displayName = googleIdTokenCredential.displayName
        val personPhoto = googleIdTokenCredential.profilePictureUri
    
    } catch (e: GoogleIdTokenParsingException) {
        Log.d("pikaboo", "Received an invalid google id token response", e)
    }
    

    }

    此代码成功从存储在 CredentialManager 中的 Google ID 令牌中检索用户信息。但是,它未提供访问令牌。

    服务器端身份验证的方法:

    使用 Google 登录 API:

    与 CredentialManager 一起实现 Google Sign-In API。此 API 提供在成功登录后检索访问令牌的方法。以下是一般流程:

    使用 Google 登录活动或自定义流程在您的应用中实现 Google 登录。成功登录后,使用 getSignInAccountFromIntent(data) 获取 SignInAccount 对象。使用 getAccount().serverAuthCode 检索访问令牌。将访问令牌连同您的应用密钥和客户端 ID 一起发送到您的服务器进行身份验证。使用 Google ID 令牌进行服务器端身份验证:

    虽然 CredentialManager 提供了 Google ID 令牌,但您可以利用它通过服务器上的应用程序密钥和客户端 ID 进行服务器端身份验证。方法如下:

    按照上述方法(步骤 1 和 2)实现 Google 登录。使用 CredentialManager 中的 googleIdTokenCredential.idToken 检索 Google ID 令牌。将 ID 令牌连同应用程序密钥和客户端 ID 一起发送到您的服务器。然后,您的服务器可以使用 Google 的身份平台验证 ID 令牌,以对用户进行身份验证,并可能发出自己的访问令牌。资源:

    Google Sign-In API:[https://developers.google.com/identity/sign-in/web/sign-in][1]验证 Google ID 令牌:[https://developers.google.com/identity/gsi/web/guides/verify-google-id-token][2]代码示例(使用 Google Sign-In API):

    类你的活动:AppCompatActivity(){

    // Initialize the Google Sign-In client
    private val googleSignInClient by lazy {
        GoogleSignIn.getClient(
            this,
            GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.server_client_id))
                .requestEmail()
                .build()
        )
    }
    
    // Create a launcher for starting the sign-in activity
    private val signInResultLauncher = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { result ->
        val task = GoogleSignIn.getSignedInAccountFromIntent(result.data)
        handleSignInResult(task)
    
    }
    
    // Handle the sign-in result
    private fun handleSignInResult(task: Task<GoogleSignInAccount>) {
        try {
            val account = task.getResult(ApiException::class.java)!!
            val accessToken = account.serverAuthCode
            // Send access token to your server for authentication
            sendAccessTokenToServer(accessToken)
        } catch (e: ApiException) {
            // Handle sign-in errors
            Log.e("SignInActivity", "Google sign-in failed", e)
        }
    }
    
    // Function to send the access token to your server
    private fun sendAccessTokenToServer(accessToken: String) {
        // Implement your server communication logic here
        // For example, you can use an HTTP client to send a POST request
        // with the access token as a parameter
    }
    
    // Start the sign-in activity
    fun signIn() {
        val signInIntent = googleSignInClient.signInIntent
        signInResultLauncher.launch(signInIntent)
    }
    

    }

    请记住用适合您活动的函数调用替换 startActivityForResult。

    选择最适合您应用程序需求的方法。如果您需要更多灵活性和对访问令牌的控制,请直接实施 Google Sign-In API。否则,使用 Google ID 令牌和您的应用程序密钥进行服务器端验证也可以。

返回
作者最近主题: