我已经创建了一个使用.NET 4.5的新ASP.NET MVC应用程序。我已经成功地使用STS设置了身份验证。身份验证流正常运行,我能够在thread.currentprincipal上获得包含所需索赔的索赔。
现在,我需要Bootstrap令牌才能将呼叫确定到我的服务层。我已经将SavebootstrapContext设置为true true true。
<system.identityModel>
<identityConfiguration saveBootstrapContext="true">
然而,索赔认证上的bootstrapcontext属性始终为null。
var identity = Thread.CurrentPrincipal.Identity as ClaimsIdentity;
var context = identity.BootstrapContext; // context is always null
我在这里错过了什么吗?这应该很简单:(
通过这些解决:
<system.identityModel>
<identityConfiguration saveBootstrapContext="true" />
</system.identityModel>
还需要设置与jwtbeareroptions.savetokens :
不同的TokenValidationParameters.SaveSigninToken
, app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions {
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters {
SaveSigninToken = true,
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
}
}
);
我在IIS Express托管时遇到了这个问题。事实证明,这个问题是我的浏览器 - 我没有关闭所有浏览器窗口或清除的饼干,因此即使服务器已经重新启动了(现有的Fedauth Cookie仍在使用),即使服务器已经重新启动,也没有重新使用SessionseionSecurityToken。从浏览器发送)。
一旦我通过关闭所有浏览器窗口,重新启动浏览器并再次执行我的请求,强迫重新认证,则出现了BootstrapContext。
如果您使用消息处理程序来使用 JwtSecurityTokenHandler
来手动验证令牌,以提取索赔主体并将其附加到当前线程中,如此处所述,在使用使用JWT处理程序实现的JWT处理程序中所述"可怜的人"的代表团/actas,当您使用JwtSecurityTokenHandler.ValidateToken()
验证令牌时,TokenValidationParameters
上的设置之一是 SaveBootstrapContext
,设置true
可以做到这一点。
我正在使用microsoft.aspnetcore.authentication.openidconnect,版本= 5.0.4.0,设置为:
.AddOpenIdConnect(o =>
{
// . . .
o.TokenValidationParameters.SaveSigninToken = true;
})