ASP .NET Core Cookie身份验证

时间:2019-11-13 20:55:00

标签: asp.net asp.net-mvc asp.net-core asp.net-web-api

我有一个ASP.NET Web API站点,该站点正在使用从另一个ASP.NET Web窗体站点生成的身份验证cookie。
由于ASP.NET Web API站点和ASP.NET Web窗体站点都具有相同的“ machineKey”和相同的“ form auth cookie name”,因此它将允许用户登录到“ Web Form Site”,然后提取数据无需重新身份验证即可从“ Web API网站”访问,因为“身份验证” cookie会在网站之间传递。
所有这些都是在该web.config内部完成的,不需要任何特殊的代码即可工作。

现在,我们想创建一个ASP NET Core Web API网站,并具有相同的身份验证Cookie。

我似乎找不到有关.NET Core中如何执行此操作的好文章。
有很多关于我们如何使用ASP身份的文章,但是关于授权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站点中解密auth cookie,但是我似乎无法弄清楚如何使其在.NET Core DataProtectionProvider中工作。

1 个答案:

答案 0 :(得分:0)

您需要确认的第一件事是应用程序托管在同一域或该域的子域中。否则,请考虑使用令牌/ sso服务(例如Identity Server 4 / Azure AD)来实现SSO。

可以配置使用Katana Cookie身份验证中间件的

ASP.NET 4.x应用程序生成与ASP.NET Core Cookie身份验证中间件兼容的身份验证cookie。将Microsoft.Owin.Security.Interop程序包安装到ASP.NET 4中。 x应用程序将使用DataProtectionProvider,该提供程序为身份验证cookie有效负载数据的加密和解密提供数据保护服务。

现在您可以删除machineKey config,Katana cookie中间件使用数据保护,该数据保护不依赖于机器密钥,而是依赖持久化的密钥环,您应确保它使用持久化的密钥存储,并且该密钥存储可访问并由每个应用程序使用。

有关更多详细信息和代码示例,请参见以下文章:

https://docs.microsoft.com/en-us/aspnet/core/security/cookie-sharing?view=aspnetcore-3.0