如何使用WebSecurity + SimpleMembership手动“登录用户”?

时间:2013-01-07 14:03:08

标签: asp.net-mvc simplemembership

我想使用WebSecurity + SimpleMembership,但实现(可选)通过自定义/替代身份验证方法登录用户的能力。

WebSecurity.Login只有一个方法签名,需要用户名和密码。我想跳过密码检查,例如:

if (MyCustomAuthenticationMethod.Authenticate(username, customData)) {
    WebSecurity.Login(username); // Login without password check, method doesn't exist though
}

我认为在OAuthWebSecurity存在的情况下可以使用自定义身份验证方法,但我不确定如何实现自己的方法。

2 个答案:

答案 0 :(得分:8)

好吧,你可以简单地回到身份验证的根目录并直接调用

FormsAuthentication.SetAuthCookie

这将创建cookie并验证您的用户身份。 见Asp.net Memebership Authorization without password

答案 1 :(得分:1)

他们没有密码就能轻松登录。一种方法可能是创建自己的自定义OAuth插件,并使用您自己的令牌简单地调用它:

OAuthWebSecurity.Login("google", "token", true);

您可以在此处找到如何创建自定义OAuth提供程序的信息: http://www.codeguru.com/columns/experts/implementing-oauth-features-in-asp.net-mvc-4.htm

您可以在此处浏览代码:https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/Microsoft.Web.WebPages.OAuth/OAuthWebSecurity.cs

以下是OAuthWebSecurity.cs文件的一个片段,其中显示了如何在没有密码的情况下对用户进行身份验证的内部信息:

 internal static bool LoginCore(HttpContextBase context, string providerName, string providerUserId, bool createPersistentCookie)
    {
        var provider = GetOAuthClient(providerName);
        var securityManager = new OpenAuthSecurityManager(context, provider, OAuthDataProvider);
        return securityManager.Login(providerUserId, createPersistentCookie);
    }

也许有人已经制作了这个插件。