我们有一个基于WIF的自定义活动STS。它通常通过客户端请求发出标准的安全令牌。在STS服务配置中,我们已将DefaultTokenLifetime参数设置为1分钟。
之后,我们每15秒调用应用令牌的服务器。但是在1分钟之后,我们对服务器的调用成功完成。这是奇怪的行为!谁必须验证安全令牌的ValidTo参数?
在RP(业务逻辑服务)中验证安全令牌的最佳实践是什么?
乌利希期刊指南:看来我们找到了解决办法。顺便说一下,我们在客户端使用了以下代码:
ChannelFactory<ICalculator> calcFactory = new ChannelFactory<ICalculator>( GetClientBinding(), ServiceAddress );
calcFactory.ConfigureChannelFactory();
ICalculator calc = calcFactory.CreateChannelWithIssuedToken(token);
for (int i = 0; i < 300; i++)
{
double sum = calc.Add(40.0, 2.0);
Console.WriteLine("Called. Token ValidTo: {0} but now: {1}", token.ValidTo.ToLongTimeString(), DateTime.UtcNow.ToLongTimeString());
Thread.Sleep(5000);
}
此代码一次性创建通道工厂并在每次调用时使用它。如果我们将在每个调用上创建通道工厂,则安全令牌将被正确验证:当令牌过期时,服务调用将无法进行身份验证,并且将抛出安全异常。这是工作,但这是好的做法吗?
谢谢
IIRC, WIF使用5分钟的时钟偏差来适应机器时钟。这可以解释为什么您的令牌在1分钟过期后仍然被接受。