2010-11-15 94 views
0

使用ASP.NET 2.0和表单身份验证。 只是一个试验,我配置了角色在web.config中使用网站是这样的:.ASPXROLES成员资格角色Cookie到期

<roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPXROLES" cookieTimeout="2"></roleManager> 

我想看看当缓存的角色饼干过期会发生什么。 使用Fiddler,过了2分钟后,我可以看到角色cookie的原始值已更改。

我期待在到期时ASP.NET会重新读取数据库中的角色信息,并使用相同的值重新填充cookie。所以我的问题是,为什么cookie的原始价值会在到期后发生变化?这个cookie值不是人类可读的(base64编码和/或加密的?),所以我不能分辨它中的信息是否相同,尽管应用程序似乎仍然工作正常。

编辑:

它看起来每个角色进行加密,并在Cookie中缓存的时间一样,它得到一个不同的原始值。

例如如果您运行以下代码:

RolePrincipal rp = (RolePrincipal) User; 
    string str = rp.ToEncryptedTicket(); 
    Label1.Text = str; 

您每次获得不同的值。 所以这种行为看起来很正常。

+0

是的,在某种程度上,这将对加密有意义。这可能取决于您在web.config中使用加密密钥时所做的操作。我将编辑我的问题并添加一些内容。 – jcolebrand 2010-11-16 00:39:24

回答

1

那么aspxroles cookie只适用于用户的角色查询。除非你正在做的角色会导致它的功能不同(web.config auth?),否则你不会通过过期cookie来看到任何东西。

你可以分享你的web.config和你用来测试的基本页面吗?

您是否尝试过特定配置以查看到期后发生了哪些更改?

<location path="img/logo.png"> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
      <allow roles="CanSeeLogo"/> 
     </authorization> 
    </system.web> 
</location> 

基于问题编辑:

在我的web.config​​下,我有这样的关键:

<machineKey decryption="AES" decryptionKey="{64bits random hex}" validation="SHA1" validationKey="{128 bits random hex}"/> 

我很好奇,如果你设置 “手动”如果你将有一个不断变化的加密字符串。此外,这是在默认情况下在C:\ Windows \ Microsoft.Net \ Framework \ etc文件夹中设置的,但您可以在web.config中重新定义它(显然)以覆盖每个应用程序。这也可以让你在你的域名中共享同一个Cookie跨应用程序。

链接生成随机字符串十六进制

https://www.grc.com/passwords.htm

CONCAT从第二页的第一个结果刷新了第二个。稍后移除web.config键不会对您的应用程序产生负面影响(当然不会)

+0

感谢回复drachenstern。看看我的编辑 - 看起来这就是加密算法的工作原理。 – 2010-11-16 00:37:05

+0

我尝试按照建议添加机器密钥 - 它仍会给出不断变化的加密字符串。 – 2010-11-16 02:11:03

+0

@MoeSisko〜谢谢你的测试,我从来没有尝试过,也不确定。我想那是由引擎生成的哈希。我从未尝试反映该代码,但我确定它在RedGate反射器中可用。如果您愿意,我可以稍后查看它,看看生成该cookie的代码是什么,但现在按下按钮即可。如果你从未使用反射器,你可能会检查反射。 – jcolebrand 2010-11-16 15:05:03

相关问题