Вызов, который вызывает ошибку:
result = await app.AcquireTokenSilent(scopes, accounts)
.ExecuteAsync();
AcquireTokenSilent
требует двух переменных: IEnumerable<String>
(scops) и string
(loginHint). То, что вы принимаете за loginHist
- это массив учетных записей, когда предполагается, что это одна строка (одна учетная запись).
var accounts = await app.GetAccountsAsync();
GetAccountsAsyn c () return тип IEnumerable
, поэтому он выдает ошибку при этом вызове.
В примере здесь учетная запись была найдена в списке.
// Get the account
IAccount account = await application.GetAccountAsync(accountIdentifier).ConfigureAwait(false);
// Special case for guest users as the Guest oid / tenant id are not surfaced.
if (account == null)
{
if (loginHint == null)
throw new ArgumentNullException(nameof(loginHint));
var accounts = await application.GetAccountsAsync().ConfigureAwait(false);
account = accounts.FirstOrDefault(a => a.Username == loginHint);
}
Добавьте эту строку в свой код:
var accounts = await app.GetAccountsAsync();
IAccount account = accounts.FirstOrDefault(a => a.Username == loginHint); // <--- Get Account from accounts
result = await app.AcquireTokenSilent(scopes, account) // Use account instead of accounts.
.ExecuteAsync();
token = result.AccessToken;