AppAuth-Android处理NOT分层URI回调意图的奇怪问题

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

我需要帮助。

我正在我的应用程序中使用AppAuth-Android来处理oAuth流程。流程开始时,我按startActivityForResults步骤中所述调用https://github.com/openid/AppAuth-Android#obtaining-an-authorization-code方法。调用此方法后,浏览器将弹出,等待用户登录。

我的清单上有

<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:scheme="com.app.name"
                android:host="oauth2redirect/login-callback" />
        </intent-filter>

完成登录步骤后需要处理重定向回调,如AppAuth文档中所指定。

在我的应用程序的渗透测试期间,发现在此特定时刻(当可见用于身份验证的浏览器时,您按照以下步骤操作,应用程序崩溃)>

  1. 切换应用(例如,我打开浏览器,而不是关闭我的应用)
  2. 单击非分层链接,在我的情况下为com.name.app:abcd(此URL已由测试人员准备好)
  3. 这是崩溃的堆栈跟踪。

E/AndroidRuntime: FATAL EXCEPTION: main
Process: io.app.mobile, PID: 29226
java.lang.RuntimeException: Unable to resume activity {com.app.name/net.openid.appauth.AuthorizationManagementActivity}: java.lang.UnsupportedOperationException: This isn't a hierarchical URI.
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3830)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3862)
    at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6854)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)
 Caused by: java.lang.UnsupportedOperationException: This isn't a hierarchical URI.
    at android.net.Uri.getQueryParameterNames(Uri.java:1590)
    at net.openid.appauth.AuthorizationManagementActivity.extractResponseData(AuthorizationManagementActivity.java:318)
    at net.openid.appauth.AuthorizationManagementActivity.handleAuthorizationComplete(AuthorizationManagementActivity.java:259)
    at net.openid.appauth.AuthorizationManagementActivity.onResume(AuthorizationManagementActivity.java:234)
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1413)
    at android.app.Activity.performResume(Activity.java:7307)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3822)

问题似乎是打开com.name.app:abcd,使应用程序认为该意图产生了结果,net.openid.appauth.AuthorizationManagementActivity试图处理它

private Intent extractResponseData(Uri responseUri) {
    if (responseUri.getQueryParameterNames().contains(AuthorizationException.PARAM_ERROR)) {
        return AuthorizationException.fromOAuthRedirect(responseUri).toIntent();
    } 

(...)
}

但是如果URL不是分层的,则类getQueryParameterNamesjava.net.URI引发异常。

我不确定这是否是与库本身有关的问题,或者是否有可以实现的解决方案(也许更改清单深链接处理)。事实是我不知道该如何解决。

如果问题看起来过于笼统,并且您需要一些其他信息来重现此问题,请随时询问更多详细信息。谢谢:)

我需要帮助。我在我的应用程序中使用AppAuth-Android处理oAuth流。流程开始时,我按https://github.com/openid/AppAuth -...

android android-intent deep-linking appauth
1个回答
0
投票

我假设您发布的intent-filter设置为RedirectUriReceiverActivity,但实际上您可以拥有自己的Activity,而不是中间人。如果您查看source code,基本上只不过是

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