我们在MVC 4 web应用程序中使用WIF。我们还设置了一个STS身份验证。
到目前为止,一切都很好。现在的问题是:当我们登录并返回网站时,我们可以看到我们的用户名。我们还可以注销。由于安全原因,我们使用引导令牌来保护对API的调用。问题是登录后引导令牌为NULL,而声明存在。当在Visual Studio中回收应用程序池或重建网站时,令牌会出现并显示在网站上。
这就是我们现在获得代币的方式:
var claimsPrincipal = (ClaimsPrincipal)System.Web.HttpContext.Current.User;
var bootstrapContext = (BootstrapContext)claimsPrincipal.Identities.First().BootstrapContext;
ViewBag.Token = bootstrapContext.Token;
有人知道如何在不回收应用程序池或重建网站的情况下获得代币吗?
有一种方法可以从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();