Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET核心cookie身份验证_Asp.net_Asp.net Mvc_Asp.net Core_Asp.net Web Api - Fatal编程技术网

ASP.NET核心cookie身份验证

ASP.NET核心cookie身份验证,asp.net,asp.net-mvc,asp.net-core,asp.net-web-api,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表单网站”,然后从“Web API网站”提取数据,而无需重新验证,因为“auth”cookie将在网站之间传递。 所有这些都是在web.config中完成的,不需要任何特殊代码即可工作 现在,

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

现在,我们想创建一个ASP NET核心Web API站点,并使用相同的身份验证cookie

我似乎找不到任何关于如何在.NET Core中实现这一点的好文章。
有很多关于如何使用ASP身份的文章我们没有,也有很多关于认证cookies的文章,但是没有一篇解释如何从其他站点获取它

以下是我在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>


如果我使用上面的NuGet,它确实会解密.NET Core站点中的auth cookie,但我似乎不知道如何使其在.NET Core DataProtectionProvider中工作

您需要确认的第一件事是,应用程序托管在同一个域或该域的子域上。否则考虑使用令牌/SSO服务,如身份服务器4 / Azure AD来实现SSO。 可以将使用Katana Cookie身份验证中间件的ASP.NET 4.x应用程序配置为生成与ASP.NET核心Cookie身份验证中间件兼容的身份验证Cookie。将
Microsoft.Owin.Security.Interop
包安装到ASP.NET 4.x应用程序中以使用DataProtectionProvider,它为认证cookie有效负载数据的加密和解密提供数据保护服务

您现在可以删除machineKey配置,Katana cookies中间件使用数据保护,不依赖于机器密钥,而是依赖于保留的密钥环,您应该确保它使用保留的密钥存储,并且每个应用程序都可以访问和使用密钥存储

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


您需要确认的第一件事是,应用程序托管在同一个域或该域的子域上。否则考虑使用令牌/SSO服务,如身份服务器4 / Azure AD来实现SSO。 可以将使用Katana Cookie身份验证中间件的ASP.NET 4.x应用程序配置为生成与ASP.NET核心Cookie身份验证中间件兼容的身份验证Cookie。将
Microsoft.Owin.Security.Interop
包安装到ASP.NET 4.x应用程序中以使用DataProtectionProvider,它为认证cookie有效负载数据的加密和解密提供数据保护服务

您现在可以删除machineKey配置,Katana cookies中间件使用数据保护,不依赖于机器密钥,而是依赖于保留的密钥环,您应该确保它使用保留的密钥存储,并且每个应用程序都可以访问和使用密钥存储

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


谢谢您的链接。我以前看过这个链接,但它建议我编辑当前的ASP.NET站点,在我的例子中,它是.NET 3.5,已经存在了10多年,因此不可编辑。我还在试着把一些信息拼凑起来。我将在上面的问题中添加更多信息。
ASP.NET 4.x应用程序必须以.NET Framework 4.5.1或更高版本为目标。否则,必要的NuGet软件包将无法安装。
如果无法编辑项目,则无法在项目和.net core应用程序之间共享cookie,因为.net core应用程序使用新的数据保护,并且不依赖机器密钥,感谢链接。我以前看过这个链接,但它建议我编辑当前的ASP.NET站点,在我的例子中,它是.NET 3.5,已经存在了10多年,因此不可编辑。我还在试着把一些信息拼凑起来。我将在上面的问题中添加更多信息。
ASP.NET 4.x应用程序必须以.NET Framework 4.5.1或更高版本为目标。否则,必要的NuGet软件包将无法安装。
如果项目无法编辑,您将无法在它和.net core应用程序之间共享cookie,因为.net core应用程序使用新的数据保护且不依赖机器密钥,