ASP.NET 跨子域的身份

ASP.NET Identity Across Subdomains

我正在尝试让 ASP.NET 身份在父域上工作。通过设置 CookiePath (.mydomain),我能够成功地将身份验证 cookie 配置为可从我的父域访问。

虽然我不确定是否有必要,但我还在两个项目的 web.config 中设置了一个具有相同值的 machinekey 标签。

问题: 目前,即使 cookie 与我的父域共享,它似乎仍然没有注册它已通过身份验证,即使那里有 cookie。我有一个 <authorization> 标签来拒绝匿名用户,我的应用程序仍在重定向到登录页面(位于子域)。

以防万一这会有所不同:我是 运行 来自 Visual Studio 的本地主机上的这 2 个项目,在 IISExpress 上配置了域/子域。 (父项目是 localhost.com,进行身份验证的子域项目是安全的。localhost.com。)

我尝试通过检查用户是否在 localhost.com(父域)上使用 Request.GetOwinContext() 进行身份验证来进行故障排除,但是我的应用程序在该行出现以下错误:

No owin.Environment item was found in the context.

我还需要做什么才能让 ASP.NET 身份在我的父域上工作?

这是关于 Request.GetOwinContext() 中的异常 'No owin.Environment item was found in the context.'。这通常意味着 OWIN 启动 class 检测失败。

检查以下内容:在这两个项目中,您将在每个项目的根文件夹中找到文件 Startup.cs,其中包含以下代码:

[assembly: OwinStartupAttribute(typeof(XXX.XXX.Startup))]
namespace Project.Web.Client
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
        }
    }
}

确保此代码在启动时执行。此处有更多信息:http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection