Android:Google OAuth 2.0 与应用程序链接:redirect_uri_mismatch

问题描述 投票:0回答:1

我的任务是设置Google OAuth 2.0以获取授权码(不是令牌)以供以后使用。 不建议在 Google Cloud Console 中启用自定义 Uri 架构。 因此,为此我使用 App Links

问题是我收到了redirect_uri_mismatch异常。

我做了什么:

使用我的调试指纹添加了 https://example.com/.well-known/assetlinks.json

{
"relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mypackage.app",
    "sha256_cert_fingerprints":
    ["FB:34:15:34:8F:6B:[...]"]
  }
}]

添加意图过滤器:

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data android:scheme="http" />
    <data android:scheme="https" />
    <data android:host="example.com" />
</intent-filter>

使用AppAuth-Android创建请求:

    val serviceConfiguration = AuthorizationServiceConfiguration(
        Uri.parse("https://accounts.google.com/o/oauth2/v2/auth"),  // Authorization endpoint
        Uri.parse("https://www.googleapis.com/oauth2/v4/token")     // Token endpoint
    )

    val redirect = "https://example.com"

    val authRequestBuilder = AuthorizationRequest.Builder(
        serviceConfiguration,  // the authorization service configuration
        GOOGLE_CLIENT_ID,  // the client ID
        ResponseTypeValues.CODE,  // the response_type value: we want a code
        Uri.parse(redirect)) // the redirect URI to which the auth response is sent

    val authRequest = authRequestBuilder
        .setScope("openid email profile")
        .setState(state)
        .build()

    val authService = AuthorizationService(this)

    // An Intent that will handle the redirect result
    val redirectIntent = Intent(this, SignUpActivity::class.java)
        .setAction(redirect)

    authService.performAuthorizationRequest(
        authRequest,
        PendingIntent.getActivity(this, 0, redirectIntent, PendingIntent.FLAG_IMMUTABLE)
    )

我还按照 Android 文档所述测试了 App Link,它表明 App Link 有效(直接将我重定向到我的应用程序):

adb shell am start -a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d "http://example.com"

在 Google Cloud Console 中,我的 Android 客户端 ID 页面如下所示(我不知道在这里要做什么): enter image description here

你能帮我找到问题的根源吗?

android oauth-2.0 google-oauth applinks
1个回答
0
投票

对于 Android OAuth 客户端禁用自定义 uri 方案(根据建议,由于安全风险,您应该这样做),Google 的替代方案是使用他们的 SDK:

使用 Google Sign-In for Android SDK,它将 OAuth 2.0 响应直接传递到您的应用程序,无需重定向 URI

https://developers.google.com/identity/protocols/oauth2/native-app#alternative-to-using-custom-uri-schemes-on-android

© www.soinside.com 2019 - 2024. All rights reserved.