英文:
Trying to acquireTokenSilentAsync from android app
问题
我目前正在使用以下代码连接到 Azure 应用:
implementation 'com.microsoft.identity.client:msal:1.4.0'
通过 acquireToken()
方法成功连接到应用,我能够得到用户响应并将其保存在 SharedPrefs 中。
在下一次登录时,我尝试使用以下方式执行 acquireTokenSilentAsync
:
SharedPreferences pref = getSharedPreferences();
Gson gson = new Gson();
String json = pref.getString("IAccount", "");
if (!json.isEmpty()) {
Account account = gson.fromJson(json, Account.class);
AcquireTokenSilentParameters parameters = new AcquireTokenSilentParameters.Builder()
.withScopes(Arrays.asList(scopes))
.forAccount(account)
.fromAuthority(getAuthority())
.withCallback(getSilentAuthInteractiveCallback())
.build();
application.acquireTokenSilentAsync(parameters);
}
但是,我在 onError
回调中收到以下异常:
E/onError: exception : com.microsoft.identity.client.Account cannot be cast to com.microsoft.identity.client.MultiTenantAccount
有什么想法,是什么导致了这个问题?
非常感谢。
英文:
I'm currently using
> implementation 'com.microsoft.identity.client:msal:1.4.0'
to connect to the app via azure , my acquireToken() works fine and I get the user in response ( I save it in the SharedPrefs)
After that (next login) I'm trying to do acquireTokenSilentAsync like so :
SharedPreferences pref = getSharedPreferences();
Gson gson = new Gson();
String json = pref.getString("IAccount", "");
if(!json.isEmpty()){
Account account = gson.fromJson(json, Account.class);
AcquireTokenSilentParameters parameters = new AcquireTokenSilentParameters.Builder()
.withScopes(Arrays.asList(scopes))
.forAccount(account)
.fromAuthority(getAuthority())
.withCallback(getSilentAuthInteractiveCallback())
.build();
application.acquireTokenSilentAsync(parameters);
}
And get to the onError callback with the exception of :
> E/onError: exception : com.microsoft.identity.client.Account cannot be cast to com.microsoft.identity.client.MultiTenantAccount
Any ideas what's missing ?
Much Appreciated.
答案1
得分: 1
这个页面可能会有帮助:
<https://learn.microsoft.com/en-us/azure/active-directory/develop/accounts-overview>
特别是,他们不使用 Gson,并且他们进行了类型转换以防止你在他们的示例代码中遇到的异常。
我建议首先尝试像这样进行类型转换:
IMultiTenantAccount multiTenantAccount = (IMultiTenantAccount)account;
然后将其用作 forAccount() 方法的参数。
英文:
This page may help:
<https://learn.microsoft.com/en-us/azure/active-directory/develop/accounts-overview>
In particular, they don't use a Gson and they cast the account to prevent the exception you get in their example code.
I would start by trying to cast like this:
IMultiTenantAccount multiTenantAccount = (IMultiTenantAccount)account;
and using that as the argument in forAccount().
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论