2016-11-18 10 views
0

別のアプリケーションのトークンを取得しようとしたときに、このエラーが発生しました。アサーションが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(); 

答えて

0

理由あなたが設定されているためOnAuthorizationCodeReceivedが発射されなかったことをクライアントに認証コードを送信しませんOpenIdConnectResponseType.IdTokenからResponseType

追加情報:AADSTS70002:資格情報の検証中にエラーが発生しました。 AADSTS50013:アサーションが有効な時間範囲内にありません。

このエラーのために、ユーザーアサーション用にトークンリクエストを送信する前に、アクセストークンが期限切れでないことを確認してください。

+0

私はMicrosoft.AspNetCore.Authorization 1.0.0にダウングレードして、すべての問題が解決しました。また、OnAuthorizationCodeReceivedが必要でもなく、GraphApiを照会するためにログインする例を使用していたこともわかりました。これは単なるバグだと思う。 –

+0

セキュリティレポに問題を記録してください:) – blowdart

関連する問題