8

我用 .NET 4.5 创建了一个新的 ASP.NET MVC 应用程序。我已成功使用 STS 设置身份验证。身份验证流程运行良好,我能够在 Thread.CurrentPrincipal 上获取包含所需声明的 ClaimsIdentity。

现在我需要引导令牌来保护对我的服务层的调用。我已在 identityConfiguration 元素上将 saveBootstrapContext 设置为 true。

<system.identityModel>
    <identityConfiguration saveBootstrapContext="true">

但是,ClaimsIdentity 上的 BootstrapContext 属性始终为空。

var identity = Thread.CurrentPrincipal.Identity as ClaimsIdentity;
var context = identity.BootstrapContext; // context is always null

我在这里错过了什么吗?这应该很简单:(

4

4 回答 4

8

通过这些解决了它:

<system.identityModel>
    <identityConfiguration saveBootstrapContext="true" />
</system.identityModel>

还需要设置TokenValidationParameters.SaveSigninToken这与 JwtBearerOptions.SaveTokens 不同

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
    new WindowsAzureActiveDirectoryBearerAuthenticationOptions {
        Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
        TokenValidationParameters = new TokenValidationParameters {
            SaveSigninToken = true,               
            ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
        }
    }
);
于 2015-11-20T12:44:52.813 回答
3

我在 IIS Express 中托管时遇到了这个问题。事实证明,问题出在我的浏览器上——我没有关闭所有浏览器窗口或清除 cookie,因此即使服务器已重新启动(现有的 FedAuth cookie 仍在从浏览器发送)。

一旦我通过关闭所有浏览器窗口、重新启动浏览器并再次执行我的请求来强制重新身份验证,就会出现 BootstrapContext。

于 2013-01-22T18:43:32.140 回答
3

如果您使用消息处理程序来手动验证令牌,使用JwtSecurityTokenHandler提取声明主体并将其附加到当前线程,如使用 JWT 处理程序实现“穷人”的委托/ActAs中所述,当您'正在使用 验证令牌JwtSecurityTokenHandler.ValidateToken(),其中一个设置TokenValidationParametersSaveBootstrapContext,设置可以true解决问题。

于 2014-08-12T04:39:47.597 回答
0

我正在使用 Microsoft.AspNetCore.Authentication.OpenIdConnect,版本 = 5.0.4.0,设置是这样的:

.AddOpenIdConnect(o =>
{
    // . . .
    o.TokenValidationParameters.SaveSigninToken = true;
})
于 2021-03-16T10:33:55.753 回答