【问题标题】:How to decrypt the cookie inside custom URL rewrite provider?如何解密自定义 URL 重写提供程序中的 cookie?
【发布时间】:2016-01-07 10:49:09
【问题描述】:

我有一个网站,我在其中创建了一个自定义 cookie,我正在尝试读取在 IIS 中运行的自定义重写提供程序中的 cookie 值

简而言之:如何解密自定义 URL 重写提供程序中的 cookie?

以下是创建自定义 cookie 的代码

     FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
           1,                                    
           model.Email,                          
           DateTime.Now,                          
           DateTime.Now.AddDays(7),          
           true,                         
           "deepak",                             
           FormsAuthentication.FormsCookiePath);  

        string encryptedTicket = FormsAuthentication.Encrypt(ticket);
        HttpCookie fCookie = new HttpCookie("customCookie", encryptedTicket);
        fCookie.Expires = DateTime.Now.AddDays(7);
        fCookie.Path = "/";
        Response.Cookies.Add(fCookie);

下面的代码是读取我在 IIS 中运行的自定义重写提供程序中的 cookie 值

   public class ParseUserNameProvider : IRewriteProvider, IProviderDescriptor
   {
    public IEnumerable<SettingDescriptor> GetSettings()
    {
        throw new NotImplementedException();
    }

    public void Initialize(IDictionary<string, string> settings, IRewriteContext rewriteContext)
    {}

    public string Rewrite(string value)
    {
        string[] val = value.Split('=');
        string name = "";
        if (val != null)
        {
            FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(val[1]);
            if(authTicket!=null)
            {
                name = authTicket.Name;
            }
        }
        return name;
    }
}

错误如下所示

在 IIS 中重写设置 - 入站

重定向网址

http://1x2.xx.1x8.x8:1111/Report/Report?name={ParseUserNameProvider:{C:0}}

条件

我从 http://www.iis.net/learn/extensions/url-rewrite-module/developing-a-custom-rewrite-provider-for-url-rewrite-module 了解到这一点

注意:这篇文章与Custom Rewrite Provider for URL Rewrite Module 不重复,因为我遇到了不同的错误。

【问题讨论】:

    标签: iis cookies url-rewriting


    【解决方案1】:

    如果该域中存在任何其他 Cookie,它们将作为 val[1] 的一部分包含在一个长字符串中。我很难让 IIS 可靠地仅通过一个 cookie,因此我将所有 cookie 提取到 val[1] 字符串中,然后将其拆分为所有 cookie 值的数组,然后选择我需要的那个。如果有疑问,请让您的提供商将 val[1] 字符串作为客户错误输出,以便您查看它所看到的内容。

            throw new Exception(val[1]);
    

    一旦您可以看到实际收到的内容,您就可以计算出您需要如何拆分它。

    【讨论】:

    • HowD,没有多个 cookie,我按照您的建议抛出了异常,并看到它是正确的加密值。让我知道如何解密?
    • 嗨,Deepak,怀疑是因为它们是不同的应用程序,然后表单身份验证方法使用不同的加密密钥,因此您得到错误的结果。试试看这个msdn.microsoft.com/en-us/library/eb0zx8fc.aspx
    • 没错,但我的第二个应用程序是控制台应用程序,它没有 web 或 app.configurations 来添加 MachineKey。即使我尝试按照您提供的链接中的建议添加机器密钥,但没有奏效。我很高兴您能理解我的要求。如果我破解它,我会更新帖子。
    • 已考虑创建自己的加密实用程序,然后您可以将密钥直接硬编码到代码中。
    • 是的,试过了,效果很好,但由于时间限制,我更信任微软加密而不是我的加密逻辑。是的,正如你所说的那样,这将是我的最后选择。也很想知道为什么它在技术上不起作用。希望这是一个有效的问题,并得到投票,以便更多的人可以看到它并帮助我。
    猜你喜欢
    • 2014-07-17
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多