【问题标题】:OpenId AppAuth not returning result from custom tab with cross applicationOpenId AppAuth 未从跨应用程序的自定义选项卡返回结果
【发布时间】:2020-05-18 09:17:19
【问题描述】:

我正在使用 AppAuth 库 (net.openid:appauth:0.7.1) 在 chrome 自定义选项卡中对用户进行身份验证。

我有两个应用程序,比如说,App-A 和 App-B。 App-A 有一个活动(App-A-MainActivity),它启动一个 App-B 的活动(App-B-MainActivity)。 App-B-MainActivity 有一个按钮,用于启动自定义选项卡以对我的 OIDC 端点进行身份验证。身份验证成功后,我们需要在 App-B-MainActivity 中获取 authCode,即在 onActivityResult 覆盖的方法中。

工作:

在这种情况下,我直接启动 App-B-MainActivity,而不是通过 App-A 启动。在自定义选项卡中成功进行身份验证后,它被重定向到 App-B-MainActivity 并且我能够在应用程序 App-B 的 onActivityResult 覆盖方法中获得所需的 authCode

不工作:

在此,我从 App-A-MainActivity 启动 App-B-MainActivity。在自定义选项卡中成功验证后,它不会被重定向到 App-B-MainActivity,因此我无法在应用程序 App-B 的 onActivityResult 覆盖方法中获得所需的 authCode

那么,我在第二种情况下是否缺少任何东西,或者我在AuthorizationService 中提供的context(applicationContext) 有什么相关的吗?

请帮助我解决这个问题。

这是我的AuthApp 代码,用于启动自定义选项卡以进行身份​​验证(在 Kotlin 中):

val authenticate_button = findViewById<Button>(R.id.authenticate_button)
authenticate_button.setOnClickListener {

    val authServiceConfig = AuthorizationServiceConfiguration(
        Uri.parse(COGNITO_AUTH_ENDPOINT),
        Uri.parse(COGNITO_TOKEN_ENDPOINT)
    )
    val authRequestBuilder = AuthorizationRequest.Builder(
        authServiceConfig, CLIENT_ID,
        ResponseTypeValues.CODE, Uri.parse(REDIRECT_URI)
    )
    val authRequest = authRequestBuilder.setScope("openid").build()

    val appAuthConfig = AppAuthConfiguration.Builder().setBrowserMatcher(
        BrowserWhitelist(VersionedBrowserMatcher.CHROME_CUSTOM_TAB)
    ).build()
    val authService = AuthorizationService(applicationContext, appAuthConfig)

    startActivityForResult(authIntent, RC_AUTH)
}

重写onActivityResult方法:

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

    if (requestCode == RC_AUTH && data != null) {
        val resp = AuthorizationResponse.fromIntent(data)
        if (resp != null && resp.authorizationCode != null) {
            // auth code
            val authCode = resp.authorizationCode
            ...
        }
    }
}

【问题讨论】:

    标签: android kotlin openid chrome-custom-tabs


    【解决方案1】:

    请注意以下是命中和试用解决方案。

    net.openid:appauth:0.7.1 似乎有问题。请查看this questionthis (My) question。我也是从 0.7.1 开始的,花了 6 天后,我偶然发现了@Kerry 提出的问题。

    在尝试了一切之后,我想为什么不试试这个。所以我改变了我的版本,瞧,“它工作了”,也许这也是你的问题。也请让我知道它是否有效。

    【讨论】:

    • 是的,appauth 有问题!我一直在遇到各种奇怪的问题,这些问题要么出现要么消失,具体取决于版本。而且我发现的所有示例代码都不起作用,因为它取决于一些已更改、已“修复”或现在有错误的特定内容。呜呜。
    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多