5

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

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

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

我假设自定义身份验证方法是可能的,因为 OAuthWebSecurity 存在,但我不知道如何去实现我自己的。

4

2 回答 2

8

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

FormsAuthentication.SetAuthCookie

这将创建 cookie 并验证您的用户。请参阅无密码的 Asp.net 会员授权

于 2013-10-22T08:14:08.830 回答
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);
    }

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

于 2013-04-02T09:29:21.183 回答