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