Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 断言不在AspNetCore身份验证OpenIdConnect中的有效时间范围内_Asp.net Core_Openid Connect_Adal - Fatal编程技术网

Asp.net core 断言不在AspNetCore身份验证OpenIdConnect中的有效时间范围内

Asp.net core 断言不在AspNetCore身份验证OpenIdConnect中的有效时间范围内,asp.net-core,openid-connect,adal,Asp.net Core,Openid Connect,Adal,我在尝试为另一个应用程序获取令牌时开始收到此错误 其他信息:AADSTS70002:验证凭据时出错。 AADSTS50013:断言不在其有效时间范围内 这是在我将AspNetCore从1.0.1升级到1.1.0之后开始的。如果我清除我的cookies,那么这个错误会消失一段时间 下面是我用来获取此令牌的代码。它主要是根据GitHub上示例中的代码改编的 var userObjectId=(user.FindFirst(AuthSettings.userobjecticlaimname))?.Va

我在尝试为另一个应用程序获取令牌时开始收到此错误

其他信息:AADSTS70002:验证凭据时出错。 AADSTS50013:断言不在其有效时间范围内

这是在我将AspNetCore从1.0.1升级到1.1.0之后开始的。如果我清除我的cookies,那么这个错误会消失一段时间

下面是我用来获取此令牌的代码。它主要是根据GitHub上示例中的代码改编的

var userObjectId=(user.FindFirst(AuthSettings.userobjecticlaimname))?.Value;
AuthenticationResult authResult=null;
var authContext=GetAuthContext(userObjectId);
ClientCredential=新的ClientCredential(AuthSettings.ClientId,AuthSettings.ClientSecret);
var claimsIdentity=user.Identity作为claimsIdentity;
var token=claimsIdentity?.BootstrapContext作为字符串;
if(令牌!=null)
{
尝试
{
authResult=等待authContext.AcquireTokenAsync(appId、凭据、,
new UserAssertion(token));//此处出错
}
捕获(异常){}
}
如果(authResult==null)
{
//错误:此处缓存中没有令牌
authResult=等待authContext.AcquireTokenSilentAsync(appId、凭据、,
新的UserIdentifier(userObjectId,UserIdentifierType.UniqueId));
}
返回authResult.AccessToken;
您知道有趣的是,第一次尝试失败时发生的
AcquireTokenSilentAsync
,由于令牌缓存为空,因此永远无法工作。在我的启动中,我在
OnAuthorizationCodeReceived
中有一段代码,它将继续运行并在令牌缓存中存储令牌。此回调永远不会执行。假设第一批代码不起作用,那么如果该代码起作用,回退将处理它

app.UseOpenIdConnectAuthentication(新的OpenIdConnectOptions
{
ClientId=authSettings.ClientId,
Authority=authSettings.Authority,
ResponseType=OpenIdConnectResponseType.IdToken,
PostLogoutRedirectUri=authSettings.PostLogoutUrl,
TokenValidationParameters=新的TokenValidationParameters()
{
SaveSigninToken=true
},
事件=新的OpenIdConnectEvents
{
OnRemoteFailure=authHelper.CreateOnRemoteFailureRedirectHandler(“/Home/Error”),
OnAuthorizationCodeReceived=
authHelper.CreateoAuthorizationCodeReceivedAcquireAdditionalTokenHandler(新[]{CustomerManager})
},
});
这是当前未针对已接收的AuthorizationCodeReceived执行的代码:

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();

由于您将
ResponseType
设置为
OpenIdConnectResponseType.IdToken
而不会将授权代码发送到客户端,因此未激发
OnAuthorizationCodeReceived
的原因

其他信息:AADSTS70002:验证凭据时出错。AADSTS50013:断言不在其有效时间范围内


对于这个错误,在将访问令牌用于用户断言发送令牌请求之前,请确保访问令牌未过期。

未激发
OnAuthorizationCodeReceived
的原因是,您将
ResponseType
设置为
OpenIdConnectResponseType.IdToken
,这将不会向用户发送授权代码客户

其他信息:AADSTS70002:验证凭据时出错。AADSTS50013:断言不在其有效时间范围内


对于此错误,请确保访问令牌未过期,然后再将其用于用户断言发送令牌请求。

在交换用户断言以获取Microsoft Graph API scope令牌时,我遇到了相同的问题,我发现.Net Core Web API允许过期令牌在过期后再使用5分钟,由于默认的5分钟令牌验证时钟偏移属性


因此,我将TokenValidationParameters的ClockSkew属性设置为TimeSpan.Zero,这阻止了过期的令牌请求,也解决了断言有效时间范围问题。

在交换用户断言以获取Microsoft Graph API scope令牌时,我也面临同样的问题,我发现,由于默认的5分钟令牌验证时钟偏差属性,.Net核心Web API允许过期令牌在到期后再使用5分钟


因此,我将TokenValidationParameters的ClockSkew属性设置为TimeSpan.Zero,这阻止了过期的令牌请求,也解决了断言有效时间范围问题。

我降级回Microsoft.AspNetCore.Authorization 1.0.0,所有问题都消失了。我现在还意识到,OnAuthorizationCodeReceived甚至不是必需的,示例正在使用它登录查询GraphApi。我认为这只是一个错误。请在安全报告中记录一个问题:)我降级回Microsoft.AspNetCore.Authorization 1.0.0,所有问题都消失了。我现在还意识到,OnAuthorizationCodeReceived甚至不是必需的,示例正在使用它登录查询GraphApi。我认为这只是一个bug。请在安全报告中记录一个问题:)