在控制台应用程序中使用表单身份验证
Using forms authentication in console application
我有一个稍微奇怪的情况,我有一个 C# 框架 4.6.2 控制台应用程序到 运行 使用共享库进行身份验证的后台任务。
身份验证在这里很重要,因为下游 HTTP API 依赖项需要 cookie。
共享身份验证项目使用 FormsAuthentication.Encrypt(ticket)
创建 cookie,但是,FormsAuthentication
方法要求您在 Web.config
文件中进行适当的设置。
在我的控制台应用程序中,我只有一个 app.config
文件,如果我添加 <authentication>
和 <machinekey>
元素,它们似乎不会被 FormsAuthentication
.
对我来说不幸的是,我无法对此堆栈进行任何大规模更改,因为它是一个具有许多依赖项的大型遗留应用程序,所有这些都假设表单 auth 将 "just work"。
非常感谢任何想法。
所以我误会了这个问题的原因。我可以确认表单身份验证设置确实取自 app.config
,但是,问题出在机器密钥元素的默认兼容模式上。
阅读 this 文章后,我意识到控制台应用程序默认为 Framework20SP1
,但另一端的 Web API 默认为 Framework45
。
我会在这里留下这个答案,以防其他人有类似的问题 - 如果有,请检查每项服务中使用的兼容模式。如果(像我一样)您需要覆盖默认值以便它们在服务之间匹配,则只需将 compatibilityMode="Framework45"
属性添加到 <machineKey>
元素。
我有一个稍微奇怪的情况,我有一个 C# 框架 4.6.2 控制台应用程序到 运行 使用共享库进行身份验证的后台任务。
身份验证在这里很重要,因为下游 HTTP API 依赖项需要 cookie。
共享身份验证项目使用 FormsAuthentication.Encrypt(ticket)
创建 cookie,但是,FormsAuthentication
方法要求您在 Web.config
文件中进行适当的设置。
在我的控制台应用程序中,我只有一个 app.config
文件,如果我添加 <authentication>
和 <machinekey>
元素,它们似乎不会被 FormsAuthentication
.
对我来说不幸的是,我无法对此堆栈进行任何大规模更改,因为它是一个具有许多依赖项的大型遗留应用程序,所有这些都假设表单 auth 将 "just work"。
非常感谢任何想法。
所以我误会了这个问题的原因。我可以确认表单身份验证设置确实取自 app.config
,但是,问题出在机器密钥元素的默认兼容模式上。
阅读 this 文章后,我意识到控制台应用程序默认为 Framework20SP1
,但另一端的 Web API 默认为 Framework45
。
我会在这里留下这个答案,以防其他人有类似的问题 - 如果有,请检查每项服务中使用的兼容模式。如果(像我一样)您需要覆盖默认值以便它们在服务之间匹配,则只需将 compatibilityMode="Framework45"
属性添加到 <machineKey>
元素。