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

5

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

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

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

假设自定义认证方法是可能的,因为OAuthWebSecurity存在,但我不确定如何实现自己的方法。

2个回答

8

终于!-- 这个像魔法一样好用,非常感谢你! - BrainSlugs83
2
它确实在浏览器方面登录了用户,但它并没有改变WebSecurity.CurrentId。 - Ariel Kruger

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);
    }

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接