別のアプリケーションのトークンを取得しようとしたときに、このエラーが発生しました。アサーションがAspNetCore認証で有効な時間範囲内にないOpenIdConnect
追加情報:AADSTS70002:資格情報の検証中にエラーが発生しました。 AADSTS50013:アサーションが有効な時間範囲内にありません。
これは、AspNetCore 1.0.1から1.1.0にアップグレードした後に発生しました。私がクッキーをクリアすれば、このエラーはしばらく続きます。
以下は、このトークンを取得するために使用するコードです。これは、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