BootstrapContext在索赔方面无效



我已经创建了一个使用.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;
})

相关内容

  • 没有找到相关文章

最新更新