1

我正在尝试使用AppAuth从基于 OAuth2 的服务器获取 AccessToken 。

在下面的代码重定向到浏览器进行登录之后

AuthorizationService service = new AuthorizationService(this,
                new AppAuthConfiguration.Builder().setBrowserMatcher(blacklist).build());

    service.performAuthorizationRequest(request,
            PendingIntent.getActivity(this, request.hashCode(),new Intent(this,ReceiverActivity.class),0));
    service.dispose();

当我在上面的代码中使用 ReceiverActivity 从浏览器返回到应用程序时,然后在:

public viod onStart(){
     AuthorizationResponse response = AuthorizationResponse.fromIntent(getIntent()); //null
            AuthorizationException ex = AuthorizationException.fromIntent(getIntent());// exception below
}
{"type":0,"code":9,"errorDescription":"Response state param did not match request state"}

其他:

AuthorizationRequest request = new AuthorizationRequest.Builder(
                authorizationServiceConfiguration,
                "clientid",
                "token",
                Uri.parse(CONSTANTS.REDIRECT_URL)
        ).setScope("crm_read")
                .setAdditionalParameters(autoApprove)
                .build();

显现

 <activity android:name="net.openid.appauth.RedirectUriReceiverActivity">
            <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="${appAuthRedirectScheme}"
                    android:host="com.crm.crm"
                    android:path="/oauth2callback"/>
            </intent-filter>
        </activity>

那么,为什么我会收到此错误 {"type":0,"code":9,"errorDescription":"Response state param did not match request state"} 我需要在链接中设置一些内容?

4

2 回答 2

2

这里是 AppAuth 的主要维护者 - 我们不支持库中的隐式流,因为它不适合原生应用程序:它的安全属性很差,并且需要用户经常通过 Web 流重新进行身份验证(通常每个7-30 天)。建议使用可以获取刷新令牌的基于代码的流程,这将只要求应用程序通过 Web 流程进行一次身份验证,之后它可以使用刷新令牌透明地获取新的访问令牌。

于 2018-04-30T19:05:14.887 回答
0

根据 IdentityServer4 文档,隐式授权类型针对基于浏览器的应用程序进行了优化。因此不推荐用于移动应用程序。对于移动应用程序,您应该考虑混合流(代码 id_token)。

于 2019-02-11T18:05:39.027 回答