C# 使用SimpleMembership登录到多个应用程序

C# 使用SimpleMembership登录到多个应用程序,c#,asp.net-mvc,asp.net-mvc-4,authentication,C#,Asp.net Mvc,Asp.net Mvc 4,Authentication,我读过这篇文章 但它直接说明了如何使simplemembership n-tier变得友好。即使这是我提问路线的下一个可能的进展,我还没有绕过目前的障碍 我有多个mvc4应用程序,它们都使用相同的数据库表进行登录,我希望维护应用程序之间的登录连接。我修改了SimpleMembership(控制器、视图和css)和相关的数据库表(我添加了几个表,这些表定义了这些应用程序中允许的应用程序和角色),剩下要做的就是在所有应用程序上应用单个登录。这是不是有人做过或知道怎么做?最后,我想将这些应用程序的登录

我读过这篇文章 但它直接说明了如何使simplemembership n-tier变得友好。即使这是我提问路线的下一个可能的进展,我还没有绕过目前的障碍

我有多个
mvc4
应用程序,它们都使用相同的数据库表进行登录,我希望维护应用程序之间的登录连接。我修改了SimpleMembership(控制器、视图和css)和相关的数据库表(我添加了几个表,这些表定义了这些应用程序中允许的应用程序和角色),剩下要做的就是在所有应用程序上应用单个登录。这是不是有人做过或知道怎么做?最后,我想将这些应用程序的登录部分移到它自己的项目中,因为每次编辑某些内容时,都必须在每个应用程序中更改
css
html
,以及控制器


如果有人有任何其他建议,可能会更好,我洗耳恭听

我似乎记得,所需要的只是在每个应用程序的web.config的
部分中为每个应用程序使用相同的machineKey配置:

<machineKey validationKey="valkey" decryptionKey="deckey" decryption="3DES" validation="SHA1" />

我不完全确定这方面的最佳实践是什么,但我想到了一个想法

一个主要的限制是能够为这些用户共享应用程序池和会话

一种方法(同样,我不确定最佳实践是什么)是从一个地方安装所有这些应用程序。一个入门级,如果你愿意的话。这将只有用于启动应用程序的global.asax定义。每个应用程序将从一个地方开始,允许它们共享相同的范围。这可以通过global.asax文件中的几个步骤来完成

在global.asax上单击鼠标右键,然后单击“显示标记”

<%@ Application Codebehind="Global.asax.cs" Inherits="appNamespace.ApplicationModerator" Language="C#" %>
TierApplication1(它们都不同,但具有相似的功能)

公共类TieraApplication 1
{
公共TierApplication1()
{
RegisterAllAreas();
Database.SetInitializer(null);
RegisterGlobalFilters(GlobalFilters.Filters);
注册地址(RouteTable.Routes);
}
公共静态无效注册表全局过滤器(全局过滤器集合过滤器)
{
filters.Add(新HandleErrorAttribute());
}
公共静态无效注册表项(路由收集路由)
{
routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);
routes.IgnoreRoute(“favicon.ico”);
routes.MapRoute(
“默认值”,//路由名称
“{controller}/{action}/{id}”,//带参数的URL
新建{controller=“Account”,action=“LogOn”,id=urlparmeter.Optional},//参数默认值
);
}
}

这很有趣,但您能解释一下为什么使用相同的machineKey可以共享应用程序范围吗?我不是SimpleMembership方面的专家,但由于它旨在取代ASP.NET成员身份,这在理论上应该是可行的。不过,我可能完全偏离了这一点。我想问题是ASP.NET成员资格。我在运行多个应用程序(YAF.NET、BlogEngine.NET和一个自定义应用程序)以实现每个应用程序之间的统一身份验证时使用了这种技术。我与Travis J处于同一条船上。如果我缺少web开发的基本内容,我深表歉意。@JoelPriddy不是问题。我相信我一开始可能误读了这个问题。我已经想出了一种方法,使用机器钥匙,来完成这个……某种程度上。我最初打算创建一个“登录/注销”应用程序,其中包含该应用程序的所有控制器、视图和模型。我最后做的是创建一个门户,其中包含所有其他应用程序的链接,以及登录和用户维护内容。在其他应用程序中,我只是将登录、注销和用户管理链接重定向到门户。那么,您在这里谈论的是一个全新的“应用程序”,它将是所有其他应用程序的启动平台?这就是“TierApplication”的来源,层号是1到n?@JoelPriddy——本质上是的。我知道这有点极端,但这是我所能想到的。我感谢你的努力,我相信这会给我带来我想要的结果。我将尝试一下,看看它是否适合我的特定场景。
public class ApplicationModerator : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        new namespace1.TierApplication1();
        new namespace2.TierApplication2();
        new namespace3.TierApplication3();
    }
}
public class TierApplication1 
{
    public TierApplication1 ()
    {
        AreaRegistration.RegisterAllAreas();

        Database.SetInitializer<DbContext>(null);

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("favicon.ico");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }, // Parameter defaults
        );
    }
}