简体   繁体   English

Android上的Cognito UserPool登录超时

[英]Cognito UserPool signin timeout on Android

I'm trying to use Cognito for authenticating users in my Android app. 我正在尝试使用Cognito对我的Android应用程序中的用户进行身份验证。 I created a UserPool (with mfa disabled) and an app. 我创建了一个UserPool(禁用了MFA)和一个应用。 Signup and confirmation works fine from the app, so I would assume the network connection itself is OK, but the signin fails. 注册和确认可以从该应用程序正常工作,因此我认为网络连接本身正常,但登录失败。

This is the code I'm using for the signin: 这是我用于登录的代码:

AuthenticationHandler authenticationHandler = new AuthenticationHandler() {

    @Override
    public void onSuccess(CognitoUserSession cus, CognitoDevice cd) {
        // do something
    }

    @Override
    public void getAuthenticationDetails(AuthenticationContinuation authenticationContinuation, String userId) {
        AuthenticationDetails authenticationDetails = new AuthenticationDetails(p.getUserName(), p.getPassword(), null);
        authenticationContinuation.setAuthenticationDetails(authenticationDetails);
        authenticationContinuation.continueTask();
    }

    @Override
    public void getMFACode(MultiFactorAuthenticationContinuation multiFactorAuthenticationContinuation) {

    }

    @Override
    public void onFailure(Exception exception) {
        LOG.log(Level.SEVERE, "Failure of Login", exception);
    }

    @Override
    public void authenticationChallenge(ChallengeContinuation cc) {

    }
};
user = userPool.getCurrentUser();
user.getSessionInBackground(authenticationHandler);

This fails after a couple of seconds with the Exception below. 几秒钟后,以下失败将导致失败。 The getAuthenticationMethod is called, the other methods (getMFACode and authenticationChallenge aren't, as I would have expected): 调用了getAuthenticationMethod,其他方法(如我所料,没有getMFACode和authenticationChallenge):

01-25 16:55:35.806  8218  8218 E AndroidMain: com.amazonaws.AmazonClientException: Unable to execute HTTP request: timeout
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:441)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:212)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.amazonaws.services.cognitoidentityprovider.AmazonCognitoIdentityProviderClient.invoke(AmazonCognitoIdentityProviderClient.java:5203)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.amazonaws.services.cognitoidentityprovider.AmazonCognitoIdentityProviderClient.respondToAuthChallenge(AmazonCognitoIdentityProviderClient.java:4145)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser.respondToChallenge(CognitoUser.java:2273)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser.startWithUserSrpAuth(CognitoUser.java:2334)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser.initiateUserAuthentication(CognitoUser.java:772)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.AuthenticationContinuation$1.run(AuthenticationContinuation.java:100)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at java.lang.Thread.run(Thread.java:784)
01-25 16:55:35.806  8218  8218 E AndroidMain: Caused by: java.net.SocketTimeoutException: timeout
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.okio.Okio$3.newTimeoutException(Okio.java:212)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.okio.AsyncTimeout.exit(AsyncTimeout.java:261)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:215)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:186)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:127)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:737)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:609)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:471)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseMessage(HttpURLConnectionImpl.java:534)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseMessage(DelegatingHttpsURLConnection.java:109)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseMessage(HttpsURLConnectionImpl.java:26)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.amazonaws.http.UrlHttpClient.createHttpResponse(UrlHttpClient.java:92)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:85)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:371)
01-25 16:55:35.806  8218  8218 E AndroidMain:   ... 8 more
01-25 16:55:35.806  8218  8218 E AndroidMain: Caused by: java.net.SocketException: socket is closed
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:551)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.okio.Okio$2.read(Okio.java:136)
01-25 16:55:35.806  8218  8218 E AndroidMain:   at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:211)
01-25 16:55:35.806  8218  8218 E AndroidMain:   ... 23 more

Used versions of aws APIs: 使用过的aws API版本:

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-android-sdk-core</artifactId>
        <version>2.11.0</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-android-sdk-cognitoidentityprovider</artifactId>
        <version>2.11.0</version>
    </dependency>

What could be the reason for this? 这可能是什么原因?

I solved the issue by testing with the JavaScript API. 我通过使用JavaScript API进行测试解决了该问题。 Authentication also failed, but the error object gave me a detailed message why the issue occurred. 身份验证也失败了,但是错误对象给了我一条详细的消息,说明问题发生的原因。 The problem was a lambda triggered post-authentication. 问题是lambda触发了身份验证。 This lambda failed. 此lambda失败。 After removing the lambda in question, authentication worked. 删除有问题的lambda之后,身份验证就可以了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM