读取 cookie 值:使用 URL 重写提供程序模块 - 无法在 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData 进行验证

本文介绍了读取 cookie 值:使用 URL 重写提供程序模块 - 无法在 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData 进行验证的处理方法,对大家解决问题具有一定的参考价值

问题描述

我需要使用 URL 重写模块将 USERNAME 附加到服务器端的 URL.

I have requirement to append USERNAME to the URL in server side using URL Rewrite module.

为什么?:我有网站 site1,当用户登录到 site1 时,他会看到一个指向 site2. 的链接,这个链接是 URL 或报告.(表).已在 site1 中使用 FormAuthentication 创建了经过身份验证的票证.当 USER 单击链接时,应将经过身份验证的 用户名 传递给 site2.

Why?: I have website site1, when USER logs in to site1, he will see a link to site2., This link is URL or reports. (Tableau). Authenticated ticket has been created using FormAuthentication in site1. When USER clicks the link, authenticated username should be passed to site2.

我可以从客户端附加用户名,但由于安全问题,我必须在执行之前将用户名附加到服务器端的 URL.

I could append username from client side, but due to security issues I have to append username to URL in server side before it gets executed.

所以我决定使用 URL 重写提供程序,它通过解密 cookie 值来获取 用户名,如下所示

So I have decided to use URL rewrite provider, which grabs the username by decrypting the cookie value as shown below

     namespace PlatformAnalysisUrlProvider.PlatformAnalysisProvider
      {
       class AnalysisRewriteProvider: IRewriteProvider, IProviderDescriptor
       {
          public void Initialize(IDictionary<string, string> settings,
                                 IRewriteContext rewriteContext)
          {

          }

          public string Rewrite(string value)
          {
             string[] cookievalues = value.Spli('=');
             FormAuthentication ticket = FormAuthentication.Decrypt(cookievalues[1]);

              //Decrypt throws error as shown below
          } 
       }
      }

Cookie 值

        cookievalues [0] =  has the key

        cookievalues [1] =  has the value 

示例:

        233AWJDKSHFHFDSHFJKDFDKJFHDKJFKDJFHDHFDHFKJHDFKJHDFJHDKJFHDSKJFHDF

这是一个 cookie 值.但是解密没有发生

It's a cookie value. But decrypt is not happening

我收到以下错误

        Unable to validate data.
        at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(
        Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, 
        Int32 length, IVType ivType, Boolean useValidationSymAlgo, 
        Boolean signData)

这是我在 IIS 中用于 URL 重写的设置

Here is my settings in IIS for URL Rewrite

  • 请求的 URL:匹配模式
  • 使用:正则表达式
  • 忽略大小写 - 已检查
  • 条件 -输入:{HTTP_COOKIE}类型:匹配模式模式:.*
  • 操作类型 - 重写
  • 重写 URL - http://11.155.011.123{HTTP_URL}&USERNAME={PlatformAnalysisUrlProvider:{C:0}}
  • Requested URL: Matches the Patterns
  • Using: Regular Expression
  • Ignore Case - Checked
  • Conditions - Input : {HTTP_COOKIE} Type : Matches the Pattern Pattern : .*
  • Action Type - Rewrite
  • Rewrite URL - http://11.155.011.123{HTTP_URL}&USERNAME={PlatformAnalysisUrlProvider:{C:0}}

我也按照本论坛的建议设置了 MACHINE KEY

我已经推荐这篇文章用于开发

其中一个堆栈溢出帖子表明这可能是防火墙或防病毒问题.但是我没有安装杀毒软件或防火墙.

One of the stack overflow post suggested that it might be firewall or antivirus issue. But I do not have antivirus installed or firwall enabled.

如果有人将我引导到使用 IIS 和 URL 重写提供程序托管的网站的代码示例,这真的很有帮助.

It really helps if someone direct me to code sample where web site hosted in IIS and URL Rewrite provider is used.

更新错误日志

MODULE_SET_RESPONSE_ERROR_STATUS通知 - PRE_BEGIN_REQUEST"HttpReason - URL 重写模块错误"

MODULE_SET_RESPONSE_ERROR_STATUS Notification - "PRE_BEGIN_REQUEST" HttpReason - "URL Rewrite Module Error"

使用机器密钥信息更新帖子

     <MachineKey Description="AES" validation="SHA1"
      descriptionKey="******"
      validationKey="******" CompatibilityMode="Framework20SP2">

可能的原因 - 创建 cookie 的网站是使用 .NET Framework 4.5 开发的.我们读取 cookie 的提供者是 Framework 3.5.这可能是原因吗?或者我们是否需要 Provider 项目的配置文件?

Reason May be - The website where cookie getting created is developed using .NET Framework 4.5. The provider where we reading the cookie is Framework 3.5. Is this may be the cause? OR Do we need config file for Provider project?

更新 - 我已将机器密钥添加到 Machine.config ,但它仍然不起作用:(

Updates - I have added machine key to Machine.config , but it still did not work :(

替代解决方案

  • 将 App.config 添加到类库

  • Add App.config to class Library

 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
 <appSettings>
 <!-- ... -->
    <add key="SecurityKey" value="somevalue"/>
 <!-- ... -->
 </appSettings>
 </configuration>

  • 复制配置到 GAC关注此博客 - http://techphile.blogspot.in/2007/02/2.html

    加密值(参考这里) 并在登录时创建自定义 cookie

    Encrypt the value (refer here) and create custom cookie during Login

    推荐答案

    关于这个的好处是,这个错误是一个一般的解密错误,而不是 URL Rewrite 本身的错误,这样你就可以有更广泛的区域来搜索帮助.URL Rewrite 的机制似乎是正确的.

    The good thing about this is that the error is a general decryption error and not one with URL Rewrite itself, so that gives you a wider area to search for help. The mechanics of URL Rewrite seem to be right.

    解密意味着必须使用与解密相同的方法对其进行加密.所以它必须是正确的 cookie 和正确的解密方法.

    Decrypting means that it must be encrypted by the same method as you're decrypting it. So it has to be the right cookie and the right decryption method.

    由于您没有检查读取的是哪个 cookie,如果错误的 cookie 在 cookie 列表中排在第一位,您可能会得到意想不到的结果.

    Since you're not checking which cookie that you're reading from, you could get unexpected results if the wrong cookie is first in the list of cookies.

    以下是我建议的解决此问题的一些步骤:

    Here are some steps that I recommend to troubleshoot this:

    • 创建一个简单的 URL 重写规则,该规则将为您提供 cookie 的价值.我在下面的示例中创建了一个规则来做到这一点.您可以通过访问 yoursite.com/getcookie 来测试它.它应该重定向到 yoursite.com/?Cookie={cookievalue}
    • 然后,您可以在 URL 重写提供程序之外测试您的代码.您可以创建一个简单的控制台应用或 winforms 应用来测试其余代码.
    • 我建议先检查 cookie 是否存在,然后再次检查第二个值.例如:if (cookievalues[1] != null).
    • 在开发解密方法时,您不必担心 URL Rewrite.只要它在 .NET 中的测试应用程序中工作,那么你应该设置.

    <rule name="Get cookie value" stopProcessing="true">
        <match url="^getcookie" />
        <action type="Redirect" url="/?Cookie={HTTP_COOKIE}" appendQueryString="false" redirectType="Found" />
    </rule>

    这篇关于读取 cookie 值:使用 URL 重写提供程序模块 - 无法在 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData 进行验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,WP2

  • admin_action_{$_REQUEST[‘action’]}

    do_action( "admin_action_{$_REQUEST[‘action’]}" )动作钩子::在发送“Action”请求变量时激发。Action Hook: Fires when an ‘action’ request variable is sent.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$_REQUEST['action']引用从GET或POST请求派生的操作。源码(Source)更新版本源码位置使用被使用2.6.0 wp-admin/admin.php:...

    日期:2020-09-02 17:44:16 浏览:1169

    admin_footer-{$GLOBALS[‘hook_suffix’]}

    do_action( "admin_footer-{$GLOBALS[‘hook_suffix’]}", string $hook_suffix )操作挂钩:在默认页脚脚本之后打印脚本或数据。Action Hook: Print scripts or data after the default footer scripts.目录锚点:#说明#参数#源码说明(Description)钩子名的动态部分,$GLOBALS['hook_suffix']引用当前页的全局钩子后缀。参数(Parameters)参数类...

    日期:2020-09-02 17:44:20 浏览:1069

    customize_save_{$this->id_data[‘base’]}

    do_action( "customize_save_{$this-&gt;id_data[‘base’]}", WP_Customize_Setting $this )动作钩子::在调用WP_Customize_Setting::save()方法时激发。Action Hook: Fires when the WP_Customize_Setting::save() method is called.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_data...

    日期:2020-08-15 15:47:24 浏览:806

    customize_value_{$this->id_data[‘base’]}

    apply_filters( "customize_value_{$this-&gt;id_data[‘base’]}", mixed $default )过滤器::过滤未作为主题模式或选项处理的自定义设置值。Filter Hook: Filter a Customize setting value not handled as a theme_mod or option.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_date['base'],指的是设置...

    日期:2020-08-15 15:47:24 浏览:898

    get_comment_author_url

    过滤钩子:过滤评论作者的URL。Filter Hook: Filters the comment author’s URL.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/comment-template.php:32610...

    日期:2020-08-10 23:06:14 浏览:930

    network_admin_edit_{$_GET[‘action’]}

    do_action( "network_admin_edit_{$_GET[‘action’]}" )操作挂钩:启动请求的处理程序操作。Action Hook: Fires the requested handler action.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$u GET['action']引用请求的操作的名称。源码(Source)更新版本源码位置使用被使用3.1.0 wp-admin/network/edit.php:3600...

    日期:2020-08-02 09:56:09 浏览:876

    network_sites_updated_message_{$_GET[‘updated’]}

    apply_filters( "network_sites_updated_message_{$_GET[‘updated’]}", string $msg )筛选器挂钩:在网络管理中筛选特定的非默认站点更新消息。Filter Hook: Filters a specific, non-default site-updated message in the Network admin.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分$_GET['updated']引用了非默认的...

    日期:2020-08-02 09:56:03 浏览:863

    pre_wp_is_site_initialized

    过滤器::过滤在访问数据库之前是否初始化站点的检查。Filter Hook: Filters the check for whether a site is initialized before the database is accessed.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/ms-site.php:93910...

    日期:2020-07-29 10:15:38 浏览:833

    WordPress 的SEO 教学:如何在网站中加入关键字(Meta Keywords)与Meta 描述(Meta Description)?

    你想在WordPress 中添加关键字和meta 描述吗?关键字和meta 描述使你能够提高网站的SEO。在本文中,我们将向你展示如何在WordPress 中正确添加关键字和meta 描述。为什么要在WordPress 中添加关键字和Meta 描述?关键字和说明让搜寻引擎更了解您的帖子和页面的内容。关键词是人们寻找您发布的内容时,可能会搜索的重要词语或片语。而Meta Description则是对你的页面和文章的简要描述。如果你想要了解更多关于中继标签的资讯,可以参考Google的说明。Meta 关键字和描...

    日期:2020-10-03 21:18:25 浏览:1721

    谷歌的SEO是什么

    SEO (Search Engine Optimization)中文是搜寻引擎最佳化,意思近于「关键字自然排序」、「网站排名优化」。简言之,SEO是以搜索引擎(如Google、Bing)为曝光媒体的行销手法。例如搜寻「wordpress教学」,会看到本站的「WordPress教学:12个课程…」排行Google第一:关键字:wordpress教学、wordpress课程…若搜寻「网站架设」,则会看到另一个网页排名第1:关键字:网站架设、架站…以上两个网页,每月从搜寻引擎导入自然流量,达2万4千:每月「有机搜...

    日期:2020-10-30 17:23:57 浏览:1308