读取cookie值:使用URL Rewrite Provider模块 – 无法在System.Web.Configuration.MachineKeySection.EncryptOrDecryptDatavalidation

我要求使用URL Rewrite模块将USERNAME附加到服务器端的URL。

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

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

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

namespace PlatformAnalysisUrlProvider.PlatformAnalysisProvider { class AnalysisRewriteProvider: IRewriteProvider, IProviderDescriptor { public void Initialize(IDictionary 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值。 但解密并没有发生

我收到了以下错误

  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重写的设置

  • 请求的URL:匹配模式
  • 使用:正则表达式
  • 忽略案例 – 已检查
  • 条件 – 输入:{HTTP_COOKIE}类型:匹配模式模式:。*
  • 动作类型 – 重写
  • 重写url – http://11.155.011.123 {HTTP_URL}&USERNAME = {PlatformAnalysisUrlProvider:{C:0}}

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

我已将这篇文章提到发展中

其中一个堆栈溢出post表明它可能是防火墙或防病毒问题。 但我没有安装防病毒软件或启用了防火墙。

如果有人指导我使用IIS和URL重写提供程序中托管的网站的代码示例 ,这确实很有帮助。

更新错误日志

MODULE_SET_RESPONSE_ERROR_STATUS通知 – “PRE_BEGIN_REQUEST”HttpReason – “URL重写模块错误”

使用机器密钥信息更新post

   

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

更新 – 我已将机器密钥添加到Machine.config,但它仍然无法正常工作:(

替代方案

  • 将App.config添加到类库

              
  • 将配置复制到GAC请访问此博客 – http://techphile.blogspot.in/2007/02/2.html

  • 加密值( 请参阅此处 )并在登录期间创建自定义cookie

  • 在自定义重写提供程序中使用Decrption逻辑

这样做的好处是错误是一般的解密错误而不是URL Rewrite本身的错误,因此这为您提供了更广泛的区域来搜索帮助。 URL Rewrite的机制似乎是正确的。

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

由于您没有检查您正在读取的cookie,如果错误的cookie是cookie列表中的第一个,您可能会得到意外的结果。

以下是我建议对此进行故障排除的一些步骤:

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