我对 asp.net 中的授权/会员资格相对较新,所以如果我问任何愚蠢的问题,请原谅。我一直在查看许多示例以在 .net 中实现自定义成员资格提供程序(在 stackoverflow、codeproject、devX 和 www.asp.net 中)并基于此进行编码,但不知何故无法使其正常工作。
我的要求 - 我们的组织大量使用惠普的质量中心(QC),我正在开发一个 asp.net 应用程序,它的登录页面将使用 QC'a API 来验证用户。我还有一个 SQL 数据库,我将在其中存储已注册到我的应用程序的 QC 用户(只需将 QC 用户 ID 存储在 DB 中,而不是密码,就像我说的,密码验证是使用 QC API 完成的)。我的数据库中将有一个用户角色表来定义注册用户的角色。
为什么要使用“会员资格”而不是一些简单的“表单身份验证”——因为也许将来我想解耦 QC 身份验证。
因此,我从第一步开始 - 开发自定义成员资格类(名为 AutoCenterMembershipProvider)和登录页面。我只需要 validateuser 方法。以下是我开始使用的方法:
1. 向用户询问 QC 用户 ID/密码,用户单击“验证”按钮
2. 登录页面背后的代码 -“验证”按钮的 onClick 方法 - 检查是否在 SQL 数据库中找到用户并如果找到,则使用 QC API 验证用户 id-password
3. 登录页面上的第二组控件已启用 - 要求用户选择要登录的 QC 域和项目用户。域和项目下拉列表的选项也可以在验证用户后使用 QC API 获得。用户选择这些并单击登录按钮
4. 在登录按钮单击 - 调用 Membership.ValidateUser(objQCSession.UserName, objQCSession.Password)。由于用户已经使用 QC api 进行了验证,为简单起见,我只从 Membership.ValidateUser 的自定义实现中返回“true”。然后我调用 -FormsAuthentication.RedirectFromLoginPage(obj_ACUser.QCSession.UserName, True)
将用户引导到 web.config 中提供的应用程序默认页面 - app_FAs.aspx。
问题是 - 在用户被重定向到 app_FAs.aspx 页面后,它会将用户引导回登录页面。我试图找出错误或丢失的部分。
Web.config 如下所示:
<authentication mode="Forms">
<forms loginUrl="~\Pages\Login.aspx" defaultUrl="App_FAs.aspx"></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<membership defaultProvider="AutoCenterMembershipProvider">
<providers>
<clear/>
<add name="AutoCenterMembershipProvider"
type="CustomMembership.Models.AutoCenterMembershipProvider"
enablePasswordRetrieval="false" enablePasswordReset="false"
requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="100" minRequiredPasswordLength="100"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="100" applicationName="/" />
</providers>
</membership>
和 customMembership 类就像:
Public Class AutoCenterMembershipProvider
Inherits System.Web.Security.MembershipProvider
Public Overrides Function ValidateUser(ByVal username As String, ByVal password As String) As Boolean
Return True
End Function
其余所有成员都“未实施”
任何帮助,指向缺失部分的指针,非常感谢错误,在此先感谢
验证按钮点击代码
Private Sub btn_Authenticate_Click(ByVal sender as Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btn_Authenticate.click
objQCSession = Session("QCUserSession")
If Membership.ValidateUser(objQCSession.UserName, objQCSession.Password) then
FormaAuthentication.RedirectFromLoginPage(objQCSession.UserName, True)
End if
End Sub