claimprincipal中的BootstrapContext为null

时间:2013-08-02 11:25:22

标签: c# twitter-bootstrap wif

我们在MVC 4 Web应用程序中使用WIF。我们还使用STS设置了身份验证。

到目前为止,这么好。现在问题是:当我们登录并返回网站时,我们可以看到我们的用户名。我们也可以退出。 由于安全原因,我们使用引导令牌来保护对API的调用。问题是登录后引导令牌为NULL,而声明存在。 当回收apppool或在Visual Studio中重建网站时,该令牌会出现并显示在网站上。

这就是我们现在获取令牌的方式:

var claimsPrincipal = (ClaimsPrincipal)System.Web.HttpContext.Current.User;
var bootstrapContext = (BootstrapContext)claimsPrincipal.Identities.First().BootstrapContext;

ViewBag.Token = bootstrapContext.Token;

有没有人知道如何在不回收应用程序池或重建网站的情况下获取令牌?

1 个答案:

答案 0 :(得分:2)

有一种方法可以从BootstrapContext上的SecurityToken属性中检索它,假设属性值不为null。

以下代码段从安全令牌中提取SAML令牌并将其写入字符串构建器:

var builder = new StringBuilder();

using (var writer = XmlWriter.Create(builder)) {
    new SamlSecurityTokenHandler(new SamlSecurityTokenRequirement()).WriteToken(writer, bootstrapContext.SecurityToken);
}

var tokenXml = builder.ToString();