2010-11-15 129 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

相關問題