首页 > 解决方案 > MSAL acquireTokenSilent 挂起且永不返回

问题描述

我有一个使用 Android Studio 开发的 Java Android 应用程序。在向配置了 OAuth2 的 Azure 托管 Web API 服务发送请求之前,我正在尝试获取缓存的令牌或在过期时获取新的令牌。我正在尝试使用 ISingleAccountPublicClientApplication.acquireTokenSilent() 方法同步获取令牌,因为我想确保在发送 Web 请求之前获得有效的令牌。但是,acquireTokenSilent() 调用挂起并且永远不会返回。有人可以解释为什么它会阻塞吗?

如果我使用 acquireTokenSilenAsync 方法,那么它可以正常工作,但我想避免必须从回调函数发送 Web 请求。

我曾尝试在主线程中使用 acquireTokenSilent() :

try {
    mAuthenticationResult = mSingleAccountApp.acquireTokenSilent(SCOPES, AUTHORITY);
} catch (MsalException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
    e.printStackTrace();
}

其中 mSingleAccountApp、munthenticationResult、SCOPES 和 AUTHORITY 在 MainActivity 类中声明:

public class MainActivity extends AppCompatActivity {
    private final static String[] SCOPES = {"<hidden>"};
    private final static String AUTHORITY = "<hidden>";
    private ISingleAccountPublicClientApplication mSingleAccountApp;
    private IAuthenticationResult mAuthenticationResult;

mSingleAccountApp 在 onCreate 方法中初始化:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    PublicClientApplication.createSingleAccountPublicClientApplication(getApplicationContext(),
                R.raw.auth_config_single_account, new IPublicClientApplication.ISingleAccountApplicationCreatedListener() {
                    @Override
                    public void onCreated(ISingleAccountPublicClientApplication application) {
                        mSingleAccountApp = application;
                    }
                    @Override
                    public void onError(MsalException exception) {
                        Toast.makeText(getApplicationContext (), exception.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });

我还在获取令牌之前对用户进行身份验证:

mSingleAccountApp.signIn(MainActivity.this, null, SCOPES, getAuthInteractiveCallback());

请注意,我还尝试在单独的线程中调用 acquireTokenSilent 并等待线程完成,并且得到相同的阻塞结果。

谢谢你的帮助。

标签: androidazuremsal

解决方案


推荐阅读