问题标签 [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 投票
0 回答
529 浏览

azure - 如何为 Azure 中运行的云服务设置 machineKey?

我正在通过从一个正在运行的实例迁移到三个来测试 Azure 云服务的横向扩展功能。我们使用 Standard_A2 节点、WorkerRole 和 SignalR 进行客户端-服务器连接。

执行此操作后,任何入站 SignalR 连接都会返回 400“错误请求”HTTP 错误。恢复到单个实例可以解决问题,并且客户端-服务器交互再次正常工作,因此扩展肯定是问题的原因。这是错误:

我已经检查了这些错误的 ResponseBody(使用HttpClientExpection.GetError().ResponseBody),并且可以确认它返回“ConnectionId 的格式不正确。”。这表明问题的出现是因为 machineKey 在三个正在运行的实例中并不相同(例如:SignalR with Redis Backplane Behind F5 - StatusCode: 400, ReasonPhrase: 'Bad Request')。

我已将 machineKey 元素添加到配置文件(在 system.web 中),如下所示,并重新部署:

服务器的响应没有变化。我也试过设置decryption="AES"。没变。

尽管进行了广泛的搜索,但似乎没有任何明确的指导方针来说明如何使用单个 machineKey 进行部署。我最好的下一步是什么?还是我走错了方向?

0 投票
1 回答
2131 浏览

asp.net - 通过 cookie 共享 ASP.NET 网络表单和 MVC 身份验证

我的问题的部分答案似乎分布在多个帖子中,但到目前为止对我来说还没有奏效,所以我希望当这篇帖子得到回答时,它将形成更完整的指南

问题

我有一个 ASP.NET webforms 应用程序 (W1),我想在一段时间内开始升级到单独的 MVC 应用程序 (M1)。包含 W1 的解决方案已升级到 4.5,并且已在解决方案中创建了 M1。W1 使用 ASP.Net 成员框架。

测试用例

在 M1 中,我在 HomeController 的 About 页面中添加了 Authorize 属性

[Authorize] public ActionResult About()

我在 M1 中添加了一个指向 about 页面的链接,该链接源自 W1 中要求用户登录的页面。

期望

我希望用户能够登录到 W1,单击指向 M1 关于页面的链接并自动登录到 M1。

配置

步骤1

我使用此处概述的方法从 W1 中提取了validationKey 和decryptionKey 。虽然这似乎是一个合乎逻辑的步骤,但我不确定它是否需要,因为不同的密钥仍然允许用户登录 W1。

第2步

按照此处此处的信息,经过大量调试后,我修改了项目的 Web.config 文件部分,如下所示;

对于 W1:

对于 M1:

当前状态

当单击 W1 中针对 M1 关于页面的链接时,用户未获得授权并显示登录屏幕。

我在配置中缺少什么吗?

0 投票
1 回答
1969 浏览

c# - 视图状态 MAC 验证失败。确保这件事配置指定相同的validationKey和验证算法

我目前正在使用 Windows 2008 服务器来创建 Web 应用程序。每当我尝试运行我的应用程序时,我都会收到此错误。

视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保配置指定相同的 validationKey 和验证算法。AutoGenerate 不能在集群中使用。

我在网上读到我需要在我的网络配置文件中添加一个机器密钥,但是我仍然收到错误消息。

这是我当前的网络配置文件

如果完整的错误消息在这里

这是表单的代码

0 投票
3 回答
11162 浏览

asp.net - 如何在 Azure 网站上设置 machineKey

我正在运行一个 Azure 网站。machineKey每当我部署时,每个人都会因为更改而注销。

我在中指定了machineKeyweb.config但这并没有解决问题。我相信这是因为 Azure 会自动覆盖machineKey [1]

我在这里发现了几个类似的问题,但答案链接到死链接。

那么,解决方案是什么?不管 Azure 上的部署如何,肯定有一种方法可以让用户保持登录状态。

0 投票
1 回答
661 浏览

iis - 我是否需要使用共享配置为 iis 实例指定 MachineKey?为什么?

我正在按照本教程使用共享配置设置 iis webfarm:

http://www.iis.net/learn/manage/managing-your-configuration-settings/shared-configuration_264

在这篇文章中,它提到了如何导出 iisConfigurationKey 以在其他机器上导入。但是文章没有提到我是否需要指定机器密钥而不是使用自动生成的密钥。

我尝试过不导出/导入 iisConfigurationKey 并继续在每台机器上使用自动生成的密钥。似乎它工作正常。但是,机器密钥如何在不同的机器上同步感觉有点奇怪。

所以我的问题是:如果我使用共享配置,是否需要设置机器密钥,为什么?

0 投票
1 回答
536 浏览

c# - MachineKey - 使用 Machinekey.Protect 是否安全?

  • MachineKey.Protect 是否受到高度保护?或者我应该找到像 Rijndael 这样的其他加密算法?
  • MachineKey.Protect 的缺点是什么?

我想对电子邮件验证链接使用加密,并且它必须受到高度保护

0 投票
1 回答
728 浏览

cookies - 如何与 Identity Server ASP.NET 应用程序和 OWIN 共享会话 cookie?

我正在使用 Identity Server v2 和 SessionAuthenticationModule。

我想添加一个新的 OWIN 应用程序(托管在 IIS 中),它可以与我现有的 STS共享相同的会话 cookie“ idsrvauth ”。

请问我该怎么做?

  1. SessionAuthenticationModule 可以解密会话 cookie 并在 OWIN 应用程序中设置 IPrincipal 吗?
  2. 或者我应该使用 OWIN 中间件来做到这一点?是否有现有的中间件或者我需要编写新的中间件?

我在每个 web.config 中都有相同的machineKey,但是在访问 OWIN 站点时,我得到了 CryptographicException:

0 投票
1 回答
937 浏览

c# - 为什么我的“随机”机器密钥的验证密钥和解密密钥都以相同的字节开头?

我有一个使用 .NET 4.5.2 的 MVC 应用程序。在这个应用程序中,我将 MachineKey 设置如下:

然后我运行我的 GetMachineKey 代码(它依赖于ReflectionMagic以在访问内部属性时保持反射代码简单):

运行该代码后,我成功检索了我的 ValidationKey 和我的 DecryptionKey。伟大的!完美的!正是我在那种情况下想要的!

接下来,我将我的 MachineKey 设置为:

现在,当我运行我的代码时,我再次检索我的密钥,我注意到每次生成新密钥时,验证密钥中的前四个八位字节与解密密钥中的相同。我现在已经在 12 台不同的服务器上部署了这个应用程序,并且模式是相同的(不是所有服务器上的字节都相同,但前四个八位字节总是在同一服务器的两个键上匹配)。例如,在一个实例中,我的密钥都是这样开始的:

验证码: B298BA4E 463CB2934329...

解密密钥: B298BA4E 0505BF0A9424...

所以我的问题:

为什么“随机”键在开头都有相同的字节?或者,我是否正确阅读了这些键?

PS我知道这些密钥很难获得,并且出于安全原因非常重要,我通常不应该这样做。我正在尝试创建一个技术培训演示/演示文稿,讨论负载平衡并说明为什么正确管理您的 MachineKeys 很重要。我永远不会对生产代码做这样的事情,但是很高兴在通过负载平衡器查看方程的变量时看到这些东西为了演示目的而改变。所以请不要告诉我我不应该这样做。是的,我知道。

PPS如果你看到这篇文章,你可能不应该使用我的代码。这是个坏主意!

0 投票
0 回答
834 浏览

asp.net - 设置机器密钥和表单身份验证时遇到问题

我正在使用 .net 3.5 的现有项目的 .net 4.5 中创建一个新项目。它的工作方式是他们通过登陆站点登录,然后在那里他们选择要访问的两个站点中的哪一个。所有站点都有一个机器密钥集。

我将网站设置为这种方式

  • a.site.com - 登陆页面
  • b.site.com
  • c.site.com

.net 3.5 版本的应用程序工作,但我无法让应用程序的 4.5 版本工作。它让我登录到登录页面,但每次我访问站点 b 或 c 时,它都会将我重定向回登录页面。我已经检查了所有三个应用程序的 web config 中的配置,它们使用相同的机器密钥和表单信息。这是我正在使用的格式配置。

我已阅读此站点上的机器密钥存在问题,但这些问题似乎适用于运行不同 .net 版本的不同应用程序。我正在使用的新应用程序运行相同的 .net 版本并托管在 Microsoft Server 2008 上。我不确定我缺少什么配置/设置会导致这种情况。有谁知道我可能做错了什么?

更新 :

这是我使用的代码:

将 MyGuid 调暗为 Guid = Guid.NewGuid()

原来我注释掉了设置域的 SetAuthCookie。我创建的表单身份验证票证没有设置域。SetAuthCookie 是不是类似于创建表单身份验证票,所以两者都是必要的?只需在添加 cookie 之前添加 c.Domain="site.com"

0 投票
2 回答
597 浏览

c# - 更改为手动机器密钥和通配符 cookie ASP.NET MVC 4.5 后如何删除旧 cookie

更改机器密钥后如何删除 ASP.NET 中的 cookie 但留在同一个子域上?

目前我们在 example.domain.com 上有 cookie,但我们需要移动到通配符 cookie (.domain.com) 以便 cookie 也适用于 foo.domain.com。为此,我们手动设置了一个机器密钥来加密/解密 asp.net 登录 cookie。问题是已经拥有旧 cookie 的人现在在尝试访问该站点时会收到 CryptographicException(因为它出于某种原因试图解密旧 cookie)。我们更改了 cookie 的名称,但它没有帮助 - 仍然收到错误。所以我们发现我们想删除所有旧的 cookie。我们尝试使用以下代码在登录站点上执行此操作:

我们到达了代码,它运行了,但是在谷歌浏览器资源中检查时 cookie 仍然存在。所以显然删除没有奏效。我们尝试了几种不同的方法(添加路径 =“/”,将 cookie.Value 设置为 cookie.Value 等。出于某种奇怪的原因,cookie 仍然存在,我们无法删除它们。

所以回到最初的问题,我们如何在 ASP.NET MVC 4.5 中删除 cookie 在我们的 cookie 上更改为通配符域并明确说明 web.config 中的机器密钥?