Azure AD B2C令牌到期本机Android中的MSAL



我使用MSAL在我的原生android应用程序上集成azure adb2c。我的代币到期时间在门户中设置为60分钟。目前,每次应用程序启动时,我都会打电话给acquireTokenSilentAsync,以确保access token is not expired。但是有没有办法避免每次呼叫acquireTokenSilentAsync,并使呼叫仅在access token到期时发生?这是为了避免每次调用acquireTokenSilentAsync,从而使应用程序加载速度更快。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.microsoft_azure);
context = MicrosoftAzureActivity.this;
initializeUI();
// Creates a PublicClientApplication object with res/raw/auth_config_single_account.json
PublicClientApplication.createSingleAccountPublicClientApplication(MicrosoftAzureActivity.this,
R.raw.auth_config_single_account,
new IPublicClientApplication.ISingleAccountApplicationCreatedListener() {
@Override
public void onCreated(ISingleAccountPublicClientApplication application) {
/**
* This test app assumes that the app is only going to support one account.
* This requires "account_mode" : "SINGLE" in the config json file.
**/
loadAccount();
}
@Override
public void onError(MsalException exception) {
displayError(exception);
}

});
}

Interactively fetching Token:

mSingleAccountApp.signIn(MicrosoftAzureActivity.this, null, getScopes(), getAuthInteractiveCallback());

Load Account when already token is fetched Interactively and account is already Loaded:

private void loadAccount() {
if (mSingleAccountApp == null) {
Log.d("SKT","Account Not Signed In");
return;
}
Log.d("SKT","Account Not Signed In#1");
mSingleAccountApp.getCurrentAccountAsync(new ISingleAccountPublicClientApplication.CurrentAccountCallback() {
@Override
public void onAccountLoaded(@Nullable IAccount activeAccount) {
// You can use the account data to update your UI or your app database.
mAccount = activeAccount;
if (activeAccount != null) {
Log.d("SKT","Account Already Signed In");

mSingleAccountApp.acquireTokenSilentAsync(getScopes(), B2CConfiguration.getAuthorityFromPolicyName("B2C_1_SignInSignUp"), getAuthSilentCallback());
}
}
@Override
public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable IAccount currentAccount) {
if (currentAccount == null) {
// Perform a cleanup task as the signed-in account changed.
showToastOnSignOut();
}
}
@Override
public void onError(@NonNull MsalException exception) {
displayError(exception);
}
});
}

否,您必须为此调用acquireTokenAsync,它会评估缓存中的令牌是否过期,或者是否用于与请求不同的范围。如果两者都不正确,MSAL将从缓存中返回令牌,它不会进行任何网络调用,并且应该是即时的。做任何不同的事情都不会获得任何性能优势,因为这是最低限度的。

最新更新