microsoft-authentication-library-for-android
microsoft-authentication-library-for-android copied to clipboard
[Bug] Acquire Token Silent Async time out 4 minutes when block endpointUrl ,using block(IP device) to WAN on router wireless
Describe the bug: I have an android app that uses get token silent async, in normal network state, it works without any problem. However, when blocking the device's IP (block WAN) on the wireless router, getting the token is taking about 4 minutes to return an error Block ip to WAN, I'm doing as instructed here : https://www.asus.com/in/support/FAQ/1013636/
The following information:
- Device: Table Android
- Android Version: API Level 28
- MSAL Version : 2.0.10
Stacktrace:
com.microsoft.identity.client.exception.MsalServiceException: IOException while requesting metadata at com.microsoft.identity.client.internal.controllers.MsalExceptionAdapter.msalExceptionFromBaseException(MsalExceptionAdapter.java:74) at com.microsoft.identity.client.PublicClientApplication$18.onError(PublicClientApplication.java:1903) at com.microsoft.identity.client.PublicClientApplication$18.onError(PublicClientApplication.java:1894) at com.microsoft.identity.client.PublicClientApplication$15$1.run(PublicClientApplication.java:1643) at android.os.Handler.handleCallback(Handler.java:836) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:208) at android.app.ActivityThread.main(ActivityThread.java:6304) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924) Caused by: com.microsoft.identity.common.exception.ServiceException: IOException while requesting metadata at com.microsoft.identity.common.internal.providers.oauth2.OpenIdProviderConfigurationClient.loadOpenIdProviderConfiguration(OpenIdProviderConfigurationClient.java:168) at com.microsoft.identity.common.internal.authorities.AzureActiveDirectoryAudience.loadOpenIdProviderConfigurationMetadata(AzureActiveDirectoryAudience.java:152) at com.microsoft.identity.common.internal.authorities.AzureActiveDirectoryAudience.getTenantUuidForAlias(AzureActiveDirectoryAudience.java:95) at com.microsoft.identity.client.PublicClientApplication.selectAccountRecordForTokenRequest(PublicClientApplication.java:1713) at com.microsoft.identity.client.PublicClientApplication.access$400(PublicClientApplication.java:202) at com.microsoft.identity.client.PublicClientApplication$15.run(PublicClientApplication.java:1609) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:761) Caused by: java.net.SocketTimeoutException: connect timed out at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:341) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356) at java.net.Socket.connect(Socket.java:616) at com.android.okhttp.internal.Platform.connectSocket(Platform.java:113) at com.android.okhttp.Connection.connectSocket(Connection.java:221) at com.android.okhttp.Connection.connect(Connection.java:197) at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:392) at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:356) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:273) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:474) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:422) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:243) at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java) at com.microsoft.identity.common.internal.net.UrlConnectionHttpClient.executeHttpSend(UrlConnectionHttpClient.java:279) at com.microsoft.identity.common.internal.net.UrlConnectionHttpClient.access$100(UrlConnectionHttpClient.java:79) at com.microsoft.identity.common.internal.net.UrlConnectionHttpClient$2.call(UrlConnectionHttpClient.java:182) at com.microsoft.identity.common.internal.net.UrlConnectionHttpClient$2.call(UrlConnectionHttpClient.java:180) at com.microsoft.identity.common.internal.net.NoRetryPolicy.attempt(NoRetryPolicy.java:42) at com.microsoft.identity.common.internal.net.NoRetryPolicy.attempt(NoRetryPolicy.java:36) at com.microsoft.identity.common.internal.net.UrlConnectionHttpClient.method(UrlConnectionHttpClient.java:180) at com.microsoft.identity.common.internal.net.AbstractHttpClient.get(AbstractHttpClient.java:47) at com.microsoft.identity.common.internal.providers.oauth2.OpenIdProviderConfigurationClient.loadOpenIdProviderConfiguration(OpenIdProviderConfigurationClient.java:145)
To Reproduce: 1/ Get token with PublicClientApplication.AcquireToken() 2/ Block IP to WAN of wireless router 3/ Call PublicClientApplication.AcquireTokenSilentAsync()
=> appear timeout phenomenon up to more than 4 minutes
Code I am using is as below:
// Create PublicClientApplication PublicClientApplication.create(context , applicationId , endpointUrl , RedirectURL , new PublicClientApplication.ApplicationCreatedListener() { ... }); ... // acquire Token PublicClientApplication.acquireToken(new AcquireTokenParameters.Builder() .startAuthorizationFromActivity(activity) .withScopes(Arrays.asList(SCOPES)) .withCallback(callback).build()); ... // acquire Token Silent Async PublicClientApplication.acquireTokenSilentAsync(new AcquireTokenSilentParameters.Builder() .forAccount(IAccount) .withScopes(SCOPES) .fromAuthority(endpointUrl) .forceRefresh(true) .withCallback(callback).build());
Note: Regarding endpointUrl, it's http://login.microsoftonline.com/common/ I tried setting ConnectTimeout and ReadTimeout values for MSAL, however, the actual timeout time is still 4 minutes (timeout must be the configured value or default to 30 seconds to be correct) I tried testing with the application sample here: https://github.com/Azure-Samples/ms-identity-android-java (MSAL for the newest 3+) => Also getting the same error, error log is Connect Timeout 30000ms but I have to wait more than 4 minutes to return exception
@vinhdp195 - Can you tell us more about what you're trying to do in this scenario. It looks like the network is blocked. Are you expecting it to be blocked, but don't want to wait 4 minutes?
@negoe - If the configuration settings are not being respected in this case it is a bug.
@vinhdp195 Please let us know if your query was solved? Closing due to no response.