OpenId AppAuth 不从具有跨应用程序的自定义选项卡返回结果



我正在使用 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 的覆盖方法中获得所需的authCodeonActivityResult

不工作:

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

那么,我在第二种情况下是否缺少任何内容,或者是否与我在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
...
}
}
}

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

看起来net.openid:appauth:0.7.1有问题。请看这个问题或这个(我的(问题。我也从 0.7.1 开始,花了 6 天的时间后,我偶然发现了@Kerry提出的问题。

在尝试了所有方法之后,我想为什么不也尝试一下。所以我改变了我的版本,瞧">它奏效了",也许这也是你情况的问题。也请让我知道它是否有效。

相关内容

  • 没有找到相关文章

最新更新