问题标签 [machinekey]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
676 浏览

c# - 不同 Web 应用程序的不同机器密钥

我有两个在 .NET4 下运行的 Web 应用程序。两个 Web 应用程序都托管在同一台服务器上。我在这里有两个问题:

这两个应用程序会共享相同的机器密钥吗?如何为不同的应用程序提供不同的机器密钥

0 投票
1 回答
4816 浏览

c# - 为什么我只是*随机*在单个服务器环境中获得“视图状态 MAC 验证失败”?

是的,关于这个特定错误有一百万个问题和线索,有许多有据可查的解决方案,我一定会尝试。但首先我想了解我的特定情况/环境的问题。

在我的情况下,这个错误似乎完全是随机的。我会几周都看不到它,然后有一天我会登录我的网站并得到错误。刷新页面,再次登录,没有问题。在事件之间的这段时间里,Web 服务器没有发生什么特别的事情。

这是另一件事,错误显示“如果此应用程序由 Web Farm 或集群托管......”,但事实并非如此。它只是一个单一的 Windows Server 2008。

所以,我知道一般的解决方案是在 web.config 文件中添加一组静态机器密钥 --- 但为什么这似乎是随机发生的,为什么它会发生在我位于单个 Windows Server 2008 上的站点上机器?

我正在使用 ASP.NET 4,我的网站是在 IIS 上运行的 Web 应用程序。

错误信息:

堆栈跟踪:

0 投票
1 回答
2185 浏览

asp.net - Asp.Net 会员登录和机器密钥

我有一个使用 ASP.Net 成员登录控件进行身份验证的 .Net 应用程序。我将我的应用程序作为网站 ( www.mysite.com ) 发布在 IIS7 上。一切正常。

现在我创建了一个新网站,并在其中添加了一个包含我的发布 ( www.site.com/mysite ) 的应用程序。在此发布中,我无法再登录(我收到“失败”错误)。在互联网上进行大量搜索后,我发现问题是由我的应用程序中自动生成的机器密钥引起的(我没有在 web.config 中设置机器密钥)。现在我无法设置机器密钥,因为我已经在我的应用程序中创建了用户,如果设置机器密钥,他们将无法再登录。

我的问题是如何强制新网站 (www.site.com/mysite) 使用与第一个相同的机器密钥?我尝试设置相同的 AppPool 但没有运气。

备注:我有其他发布工作正常并使用相同的机器密钥,但它们都是网站上的根应用程序(如 www.mysecondsite.com)。此配置 wwww.site.com/mysite 会发生什么/有什么不同导致应用程序生成新密钥?

0 投票
1 回答
1348 浏览

asp.net - 在新服务器上迁移到 IIS7 后,由于 MachineKey IIS6 用户密码不起作用

我们不得不紧急从 Windows 2003 + IIS6 迁移到新的 Windows 2008 + IIS7

我有几个带有散列密码的 ASP.NET 成员数据库的网站,在未使用的新服务器用户上工作正常,但最近使用它的用户无法登录(错误是密码无效)即使设置新密码相同发生。

我可以读到问题在于 MachineKey(它没有设置,所以它使用的是计算机 MachineKey) 我正在尝试将 IIS7 机器密钥设置为与以前相同,以便让用户再次工作。

我们有超过 500 个用户,我们不知道他们的密码或任何东西,因此我们无法重新创建它们。

关于我在哪里可以从以前的服务器(win 2003)中找到旧的 MachineKey 的任何想法?

问候,

乔治

0 投票
2 回答
1278 浏览

amazon-ec2 - 如何在 AWS EC2 中同步机器密钥?

由于自动缩放不允许缓冲期和/或不够智能,不能只允许“新请求”进入由于自动缩放而计划关闭的实例,因此我试图避免使用粘性-ELB 提供的会话。否则,这种行为会给一些客户留下登录屏幕。

该网站和其他 RESTful Web 服务在 IIS7 中运行。该网站正在使用基于经典表单的身份验证(MVC3 中的内置成员资格提供程序),但很快将迁移到自定义成员资格提供程序以查看 cookie 并解密然后给出判断。RESTful Web 服务已经在使用自定义成员资格提供程序。

在这种情况下,我认为对于该网站,如果不通过其 ELB 使用粘性会话,我将无法通过。

RESTful Web 服务的 ELB 可以配置为非粘性,因为它们单独观察每个请求上的 cookie,以查看是否存在具有某些加密值的身份验证令牌。但是,这里的问题是 FormsAuthentication.Enrypt 和 FormsAuthentication.Decrypt 方法,它们在后台使用 MachineKeys。对 ?!如果不是,那么它不是问题,但是如果他们这样做了,那么如何在 EC2 中的自动缩放实例之间同步机器密钥?

0 投票
1 回答
1119 浏览

iis - Web.config machinekey 陷阱 - 使用概念中是否有机器密钥?

我担心 IIS 管理员用户可能会意外按下生成键,从而导致 web.config 中的机器键被覆盖。人们不那么担心,因为你只是从备份中得到它吗?还是每个人都有可靠的管理流程或优秀的管理员不这样做?

我在 IIS 的开发机器上,只是按下了错误站点上的按钮。测试用户被冲洗,直到从备份中恢复机器密钥..

我现在想知道我是否应该有一个客户 web.config 属性?

这里有什么好的管理实践?还有什么智慧之言?除了我是 IIS 管理员 Donk。是否有一些正常的方式来指示正在使用的密钥,不能/不能再生?

0 投票
1 回答
2081 浏览

asp.net - SSO 表单身份验证问题。无法解密身份验证 cookie

我正在尝试在 2 个 Web 应用程序、应用程序 A 和应用程序 B 之间开发 SSO 身份验证。应用程序 A 是 MVC 4 应用程序,应用程序 B 是 MVC 3 应用程序。

应该发生的是:

  1. 当用户尝试访问应用程序 B 时,他将被重定向到应用程序 A 的登录页面
  2. 在他登录到应用程序 A 后,他将被重定向到应用程序 B

实际发生的是:

  1. 用户尝试访问应用程序 B,他被重定向到应用程序 A 进行登录
  2. 用户登录到应用程序 A,他被重定向到应用程序 B
  3. 这里出了点问题,因为应用程序 B 将用户重定向回应用程序 A 进行登录,就好像他还没有登录一样

我已经完成了这些步骤来找出问题所在:

  1. 确认身份验证 cookie 正在传递给应用程序 B
  2. 确认 web.config 中两个应用程序的机器密钥验证和解密密钥相同
  3. 确认在 web.config 中启用了 enableCrossAppRedirects
  4. 我使用此论坛帖子中的代码来确定两个应用程序是否能够解密身份验证 cookie:http ://forums.asp.net/t/1762166.aspx/1
  5. 身份验证 cookie 在应用程序 A 中成功解密,但在应用程序 B 中未成功解密。应用程序 B 在 FormsAuthentication.Decrypt 方法期间给出“无法验证数据”异常

谁能帮我这个?为什么即使他们使用相同的机器密钥,解密也会失败?我还能依靠这种身份验证方法吗?因为这篇文章说它不再可靠了。 http://blog.appharbor.com/2012/02/22/asp-net-forms-authentication-considered-broken

谢谢!

0 投票
0 回答
1223 浏览

asp.net-mvc - 如何在 DotNetNuke 7 和非 DotNetNuke 7 站点之间共享 ASP.NET 授权 cookie?

我们正在构建一个 ASP.NET MVC 4 网站,该网站将显示特定于 DotNetNuke 登录用户的信息。为了实现这一点,我们将 web.config 中的机器密钥设置为完全相同,并且我们还将<authentication>配置部分设置为跨网站匹配,以便查看从 MVC 站点登录的 DotNetNuke 用户.

有很多例子可以说明如何做到这一点。这是我们使用的指南:http: //msdn.microsoft.com/en-us/library/eb0zx8fc.aspx

但是,这仅在我们在两个 DotNetNuke 站点或两个非 DotNetNuke 站点之间设置信任时才有效。如果在 DotNetNuke 中设置了 ASP.NET auth-cookie,我们将无法在 MVC 站点中访问它。登录 DotNetNuke 站点,然后浏览到 MVC 站点后,HttpContext.Current.User.Identity.Name 为空。

这两个站点设置在同一台服务器上,每个站点都在不同的端口下运行。IIS 8 中都启用了匿名和表单身份验证,因为它在 Windows Server 2012 上运行。

以下是在两个站点之间设置的 web.config 值:

机器键值: <machineKey decryption="3DES" decryptionKey="C7DE3391E9E25BC1106BA55B1A86EB825A66A06A2AA720CF" validation="SHA1" validationKey="F41C305583E22214850AD9B2B989588F5045EE2A99EFF68849B81EF154CFF745230F12D4BCFEBB0214BB24F8A6EDB34A9B45BB0849F6CB60E5D23528A69DBBC6" />

认证部分: <authentication mode="Forms"> <forms timeout="60" cookieless="UseCookies" ticketCompatibilityMode="Framework40" /> </authentication>

任何见解将不胜感激。

谢谢!

0 投票
1 回答
8458 浏览

c# - 获取 HMAC 的当前 MachineKey 或等效密钥(在网络农场中)

我在网络农场环境中使用HMACSHA256进行消息身份验证。

在网络农场中,每台机器都有相同的机器密钥,因此 ViewState 将跨机器工作,但是,我需要进行 HMAC 消息身份验证,这将在机器上工作,所以我认为由于所有机器都使用相同的机器密钥,所以应该是一种从中派生密钥以用作 HMAC 密钥的方法。

我注意到从 .NET 4.0 开始有MachineKey类,但是,我坚持使用.NET 3.5,这对我来说是不可用的。

有没有办法在ASP.NET 3.5环境中使用在所有机器上都相同的排序键而不生成我自己的排序键?

编辑

我实际上并不需要机器密钥本身,只需要从机器密钥(或等效项)派生的验证密钥。

0 投票
3 回答
28725 浏览

asp.net-mvc - IsolateApps 导致指定的解密密钥具有无效的十六进制字符

我在一个使用身份验证的 MVC 4 站点上工作。该站点要求我指定机器密钥值。我是通过 IIS 界面完成的,取消选择“在运行时自动生成”,生成键值并选择“为每个应用程序生成唯一键”

web.config 条目如下所示:

虽然这似乎在另一个 Web 项目上运行良好,但它会导致我现在正在使用的开发机器上出现“指定的解密密钥具有无效的十六进制字符”错误(在 IIS-Express 和 IIS 7.5 中)。

从键值中删除",IsolateApps"可以解决问题,但是由于我需要在生产中启用此选项,因此我不想现在删除它,只是在部署时遇到此问题。

是什么赋予了?开发盒是带有 .net 2.0 和 .net 4.0 的 SQL 2008 R2 盒。