【问题标题】:Customizing SimpleMembershipProvider自定义 SimpleMembershipProvider
【发布时间】:2013-08-09 22:19:50
【问题描述】:

是否可以自定义 SimpleMembershipProvider 以不仅仅需要用户名和密码来登录?

例如,假设我想要 4 条信息:

Login, Password, Abc, Xyz
(Abc and Xyz are just generic placeholders, for now)

Suppose your login is: 

john/mypassword555/1/1 (authenticated) -> pagex
john/mypassword999/1/2 (authenticated) -> pagey

bob/mypassword333/1/1 (authenticated) -> pagex
bob/mypassword333/1/2 (authenticated) ->pagey
bob/mypassword333/1/3 (authenticated) -> pagez

只有 john/mypassword 或 bob/mypassword333 是不够的。

我希望能够为所有登录或不同的密码使用相同的密码,但在 Request.IsAuthenticated 为 true 之前仍需要所有 4 个字段。

【问题讨论】:

    标签: c# asp.net security asp.net-mvc-4 simplemembership


    【解决方案1】:

    我不确定这是否是您的意思,但是:

    如果您需要数据 A、B 和 C 以及密码才能登录,您可以将 A、B 和 C 存储到一个对象结构中,将该对象序列化为一个字符串,然后将该字符串传递给您的自定义会员提供程序作为“登录”和密码,然后将对象反序列化回其部分。此时,您可以在自定义提供程序中做任何您想做的事情。

    【讨论】:

    • 如果我理解正确,这意味着登录(从高级概述)将类似于 john11(对于 john/1/1)和 john12(对于 john/1/2)所以即使文本框登录名是“john”,成员资格提供程序也会将成员字符串视为序列化条目 johnABDEAWHATEVER ..... 这就是您的意思吗?如果是这样,我相信这可能会奏效......
    • 这是一个非常肮脏的解决方案,并且破坏了提供程序接口的完整性。提供者模型的设计使其可以与任何实现进行交换,而无需更新代码。这会破坏这一点,最好在应用程序中实现业务逻辑,并使用较低级别的提供者 API 来获取用户名/密码,因为它是在通过其他检查后设计的。
    【解决方案2】:

    一个简单的方法是只使用内置的会员资格提供程序,一旦他们登录,将他们带到另一个页面,他们将在其中输入其他信息。

    当他们输入附加信息时,您可以设置一个会话/Cookie,您将使用自定义授权过滤器进行检查。

    这样您可以确保在 Request.IsAuthenticated 评估为 true 之前已提供所有 4 个字段。

    【讨论】:

    • 这不是我的意思。正如我所说,您无法登录,然后需要其他信息,假设有一个名为“john”的用户,其密码为“password”,但其他 2 位所需信息是“x”和“y” .现在,另一个用户“john”也巧合地选择了相同的密码“password”(很少见,但可能发生),将登录。不需要其他 2 位信息,我不希望 IsAuthenticated 为真还没有。
    猜你喜欢
    • 2012-10-24
    • 2012-10-25
    • 2013-05-20
    • 2013-04-10
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    相关资源
    最近更新 更多