我正在使用新的4.5 WIF内容来验证网站用户并确保我的MVC网站和WCF服务之间的通信.
我将网站配置为保存引导上下文,以便我可以为服务层的所有请求重用相同的安全令牌.
在正常情况下,一切正常,每个网站请求都经过身份验证,并且SecurityToken通过上下文可用来保护WCF调用.
但是,如果网站应用程序域被重置(例如,在开发时构建应用程序),对网站的任何请求仍将被认证,但在上下文中不再提供SecurityToken以传递给WCF调用.
调试BootstrapContext它有4个有用的属性:
SecurityToken
SecutiryTokenHandler
Token
TokenBytes
Run Code Online (Sandbox Code Playgroud)
预应用程序域重置SecurityToken和SecurityTokenHandler具有值,并且重置后Token具有值.
在重置之后注意Token的值,它看起来像是原始的SAML XML,所以我可以从它中重新整合一个完整的SecutiryToken,但这似乎是奇怪的行为,我找不到任何文档.
任何想法,我可以做什么来确保SecurityToken始终可以保存我乱码令牌XML?
更新
使用dotPeek来查看框架源代码中发生了什么,我可以看到导致这种行为的执行路径,但我无法确定为什么需要这样做以及如何进行avioded的任何原因.
最后我放弃了尝试解决它现在使用以下代码来确保我有一个令牌
if (context.SecurityToken != null)
{
token = context.SecurityToken;
}
else if (context.Token.IsNotEmpty())
{
var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers;
token = handlers.ReadToken(new XmlTextReader(new StringReader(context.Token)));
}
Run Code Online (Sandbox Code Playgroud)
我现在担心的是我错过了这个behaiour背后的一些推理,我上面的解决方案会在某些时候爆发.
我们的Teamcity构建当前生成的格式为1.0.0.[SVN REVISION],它传递给MSBUILD.
我需要将其更改为格式1.0.[DLL VERSION].[SVN REVISION]我们在其中插入依赖dll的去点版本.例如,如果我们的依赖dll是版本1.2.3.4,则生成的构建编号将是1.0.1234.[SVN REVSION].
依赖dll是构建源的一部分,所以我希望我可以使用构建参数和一个小的exe来做一些事情,将它与版本信息进行整合,但是看不到任何通过UI合并它的方法.
任何想法,如果这是可能的?