6

浏览我的 mvc3 azure web 角色时,我随机收到 base 64 编码错误。我正在使用带有被动身份验证的 WIF 对我的 ADFS 服务器进行身份验证。我无法确定这是从哪里来的,但我有一个想法,希望得到一些反馈/帮助。

从调用堆栈来看,它看起来像是来自一个坏 cookie。当我从 chrome 开发人员控制台查看我的 cookie 时,来自 wif/adfs 的“FedAuth”cookie 是唯一出现的东西。所以我在想这些 cookie 不知何故被损坏或其中包含无效字符。我正在努力验证这一点,但由于错误是随机发生的,因此需要一些时间。有没有人经历过类似的事情或有任何可能导致这种情况的倾向?任何帮助表示赞赏!

这是一个例外:

The input is not a valid Base-64 string as it contains a non-base 64 character, more      than two padding characters, or a non-white space character among the padding characters.
[FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. ]
   System.Convert.FromBase64String(String s) +0
   Microsoft.IdentityModel.Web.ChunkedCookieHandler.ReadInternal(String name, HttpCookieCollection requestCookies) +613
   Microsoft.IdentityModel.Web.ChunkedCookieHandler.ReadCore(String name, HttpContext context) +174
   Microsoft.IdentityModel.Web.CookieHandler.Read(String name, HttpContext context) +133
   Microsoft.IdentityModel.Web.CookieHandler.Read(HttpContext context) +59
   Microsoft.IdentityModel.Web.CookieHandler.Read() +65
   Microsoft.IdentityModel.Web.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken& sessionToken) +84
   Microsoft.IdentityModel.Web.SessionAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs) +119
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270

我一直在对我的 cookie 进行更多测试,我可以看到每次请求我的 fedauth cookie 都会变得越来越大。这可能是问题的一部分或全部。最终,随机地添加了一些坏字符。令牌以这些结束标记“”结尾。我可以看到,当安全上下文令牌关闭标记后出现一些额外字符时,它会失败。每次发生错误时,额外的字符都不同。

4

2 回答 2

3

弄清楚了。哎呀...程序员错误...

当用户第一次登录我的应用程序时,我从我的数据库中提取一些角色信息并为他们创建声明。我每次都重新添加这些声明,所以我的会话令牌正在增长......并且增长......最终这导致令牌分成 2、3、4、5、6 个 cookie,最终有些东西只是窒息这。我不再每次都添加索赔。不再看到这个问题。

感谢你的帮助。

于 2012-10-05T20:58:17.597 回答
1

我有一个类似的错误消息,使用 base64 对查询字符串中的参数进行编码,我有一个 %3d 在查询字符串中显示良好,但是当我在代码中检索它时,asp.net 将它转换为一个 = 符号。我在解密 base64 之前通过调用 Server.UrlEncode() 解决了这个问题。可能是 cookie 中的 base64 值在被解密之前被解码。

于 2012-10-05T19:03:25.423 回答