【发布时间】:2020-03-09 17:51:19
【问题描述】:
我有一个 ASP.NET Web API 站点,它使用从另一个 ASP.NET Web 窗体站点生成的身份验证 cookie。
由于 ASP.NET Web API 站点和 ASP.NET Web 窗体站点都具有相同的“machineKey”和相同的“form auth cookie name”,因此它允许用户登录到“Web 窗体站点”然后提取数据来自“Web API 站点”而无需重新身份验证,因为“身份验证”cookie 将在站点之间传递。
所有这些都是在 web.config 中完成的,不需要任何特殊代码即可工作。
现在我们想创建一个 ASP NET Core Web API 站点并使用相同的身份验证 cookie。
我似乎找不到任何关于如何在 .NET Core 中执行此操作的好文章。
有很多关于如何使用我们没有的 ASP 身份的文章,也有很多关于 auth cookie 的文章,但没有解释如何从其他站点获取它...
这是我在 Web API 中的 web.config 部分:
<system.web>
<authentication>
<forms name=".TESTAUTH" cookieless="AutoDetect" requireSSL="true" domain=".test.com" slidingExpiration="true" protection="All" timeout="600"
enableCrossAppRedirects="true" />
</authentication>
<!-- This is used to share the auth cookie between web sites -->
<machineKey validationKey="SOMEKEY"
decryptionKey="SOMEOTHERKEY" validation="SHA1" decryption="AES" compatibilityMode="Framework20SP2" />
</system.web>
编辑 A
我们正在使用“Framework20SP2”,这似乎使问题复杂化。
这是一些代码的链接,这些代码将根据“Framework20SP2”解密身份验证票
https://github.com/dazinator/AspNetCore.LegacyAuthCookieCompat
如果我使用上面的 NuGet,它会解密 .NET Core 站点中的身份验证 cookie,但我似乎无法弄清楚如何让它在 .NET Core DataProtectionProvider 中工作。
【问题讨论】:
-
我是那个项目的所有者,你最终解决了吗? “弄清楚如何让它在 .NET Core DataProtectionProvider 中工作”是什么意思。 ?据我所知,您不能在 .net 核心中使用 DPAPI 来解密来自旧版 .net(例如 Framework20SP2)的 cookie 有效负载。
-
@Darrell 我确实让它工作了。我有一个生成登录 cookie 的 ASP.NET 3.5 网站和一个使用 cookie 的 ASP.NET Core 3.1 站点,它似乎可以很好地解密 cookie。
-
是的,使用我壮观的包对吗? DPAPI(DataProtectionProvider)没有进入那个等式,它是别的东西,所以这让我感到困惑;-)...... aaaaanyway!很高兴一切顺利!
-
@Darrell 你是对的,因为我没有让它与 DataProtectionProvider 一起工作,而是使用了你出色的产品......
标签: asp.net asp.net-mvc asp.net-core asp.net-web-api