【发布时间】:2013-04-18 07:32:07
【问题描述】:
我在 Windows Azure ACS 中使用 SWT,并且在依赖方应用程序中使用自定义 SwtHandler 来处理传入的 SWT 令牌。虽然它在依赖方重新创建 SWT 令牌,但在创建与 validFrom 属性值相关的 SessionSecurityToken 时出现错误。
我尝试了以下 ValidFrom 值,但没有解决问题。
- DateTime SwtBaseTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
- 日期时间.UtcNow
- 日期时间.MinValue 指定的参数超出了有效值的范围。 参数名称:validFrom
[ArgumentOutOfRangeException:指定的参数超出了有效值的范围。 参数名称:validFrom]
System.IdentityModel.Tokens.SessionSecurityToken..ctor(ClaimsPrincipal claimPrincipal, UniqueId contextId, String id, String context, Byte[] key, String endpointId, Nullable1 validFrom, Nullable1 validTo, UniqueId keyGeneration, Nullable1 keyEffectiveTime, Nullable1 keyExpirationTime , SctAuthorizationPolicy sctAuthorizationPolicy, Uri securityContextSecurityTokenWrapperSecureConversationVersion) +1009610
System.IdentityModel.Tokens.SessionSecurityToken..ctor(ClaimsPrincipal claimPrincipal, UniqueId contextId, String context, String endpointId, Nullable1 validFrom, Nullable1 validTo, SymmetricSecurityKey key) +317
System.IdentityModel.Tokens.SessionSecurityTokenHandler.CreateSessionSecurityToken(ClaimsPrincipal 主体,字符串上下文,字符串 endpointId,DateTime validFrom,DateTime validTo)+306
System.IdentityModel.Services.SessionAuthenticationModule.CreateSessionSecurityToken(ClaimsPrincipal 主体,字符串上下文,DateTime validFrom,DateTime validTo,Boolean isPersistent)+313
System.IdentityModel.Services.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequestBase 请求)+1079
System.IdentityModel.Services.WSFederationAuthenticationModule.OnAuthenticateRequest(对象发送者,EventArgs args)+123924
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165
【问题讨论】:
-
根据 MSDN,ArgumentOutOfRange 发生在 validFom 大于或等于 validTo 时。但是在比较值时我没有看到这种情况。
-
将 DateTime SwtBaseTime = new DateTime( 1970, 1, 1, 0, 0, 0, 0 ) 更改为 DateTime SwtBaseTime = new DateTime( 1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc ) 解决了这个问题。