Я начал получать эту ошибку при попытке получить токен для другого приложения.Утверждение не соответствует допустимому диапазону времени в аутентификации AspNetCore OpenIdConnect
Дополнительная информация: AADSTS70002: Ошибка проверки учетных данных. AADSTS50013: Утверждение не соответствует допустимому диапазону времени.
Это началось после того, как я обновился с 1.0.1 до 1.1.0 AspNetCore. Если я очищу свои файлы cookie, эта ошибка исчезнет некоторое время.
Ниже приведен код, который я использую, чтобы получить этот токен. Это в значительной степени адаптировано из кода в примерах на GitHub.
var userObjectId = (user.FindFirst(AuthSettings.UserObjectIdClaimName))?.Value;
AuthenticationResult authResult = null;
var authContext = GetAuthContext(userObjectId);
ClientCredential credential = new ClientCredential(AuthSettings.ClientId, AuthSettings.ClientSecret);
var claimsIdentity = user.Identity as ClaimsIdentity;
var token = claimsIdentity?.BootstrapContext as string;
if (token != null)
{
try
{
authResult = await authContext.AcquireTokenAsync(appId, credential,
new UserAssertion(token)); // Error here
}
catch (Exception) { }
}
if (authResult == null)
{
// Error no token in cache here
authResult = await authContext.AcquireTokenSilentAsync(appId, credential,
new UserIdentifier(userObjectId, UserIdentifierType.UniqueId));
}
return authResult.AccessToken;
Вы знаете, что интересно, что AcquireTokenSilentAsync
, что происходит, если первая попытка не удается и не работает, потому что кэш Токен пуст. В моем старте у меня есть код в OnAuthorizationCodeReceived
, который идет вперед и сохраняет токен в кеше токенов. Этот обратный вызов никогда не выполнен. Предположительно, если эта первая партия кода не работает, тогда резерв будет обрабатываться, если этот код сделал.
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
ClientId = authSettings.ClientId,
Authority = authSettings.Authority,
ResponseType = OpenIdConnectResponseType.IdToken,
PostLogoutRedirectUri = authSettings.PostLogoutUrl,
TokenValidationParameters = new TokenValidationParameters()
{
SaveSigninToken = true
},
Events = new OpenIdConnectEvents
{
OnRemoteFailure = authHelper.CreateOnRemoteFailureRedirectHandler("/Home/Error"),
OnAuthorizationCodeReceived =
authHelper.CreateOnAuthorizationCodeRecievedAcquireAdditionalTokenHandler(new[] { CustomerManagerApi })
},
});
Это код, который в настоящее время не выполняется для OnAuthorizationCodeRecieved
:
var userObjectId = (context.Ticket?.Principal?.FindFirst(AuthSettings.UserObjectIdClaimName))?.Value;
var clientCred = new ClientCredential(AuthSettings.ClientId, AuthSettings.ClientSecret);
var authContext = new AuthenticationContext(AuthSettings.Authority, TokenCacheCreator(userObjectId));
var redirectAddressForAuthCode = new Uri(context.Properties.Items[OpenIdConnectDefaults.RedirectUriForCodePropertiesKey]);
authContext.AcquireTokenByAuthorizationCodeAsync(context.ProtocolMessage.Code, redirectAddressForAuthCode, clientCred, applicationId);
context.HandleCodeRedemption();
Я отказался от Microsoft.AspNetCore.Authorization 1.0.0, и все мои проблемы ушли. Кроме того, теперь я понимаю, что OnAuthorizationCodeReceived даже не нужен, что в этом примере используется логин для запроса GraphApi. Я думаю, что это всего лишь ошибка. –
Пожалуйста, зарегистрируйте проблему в репозитории безопасности :) – blowdart