다음을 통해 공유


SqlMembershipProvider.GetPassword(String, String) 메서드

정의

SQL Server 멤버 자격 데이터베이스의 지정된 사용자 이름에 대해 암호를 반환합니다.

public:
 override System::String ^ GetPassword(System::String ^ username, System::String ^ passwordAnswer);
public override string GetPassword (string username, string passwordAnswer);
override this.GetPassword : string * string -> string
Public Overrides Function GetPassword (username As String, passwordAnswer As String) As String

매개 변수

username
String

암호를 검색할 사용자입니다.

passwordAnswer
String

사용자의 암호 대답입니다.

반환

String

지정된 사용자 이름에 대한 암호입니다.

예외

passwordAnswer이 잘못되었습니다.

또는 username으로 식별되는 멤버 자격이 잠겨 있는 경우

EnablePasswordRetrievalfalse로 설정됩니다.

username이 멤버 자격 데이터베이스에 없는 경우

또는 데이터베이스에서 암호를 검색하는 동안 오류가 발생하는 경우

매개 변수 값 중 하나가 허용되는 최대 길이를 초과하는 경우

또는 username이 빈 문자열("")이거나 쉼표를 포함하거나 256자보다 긴 경우

또는 passwordAnswer가 빈 문자열이고 RequiresQuestionAndAnswertrue인 경우

또는 passwordAnswer가 128자보다 긴 경우

또는 인코딩된 버전의 passwordAnswer가 128자보다 긴 경우

username이(가) null인 경우

또는 passwordAnswernull이고 RequiresQuestionAndAnswertrue인 경우

예제

다음 코드 예제에서는 지정된 사용자 이름에 대한 암호를 검색하여 전자 메일 메시지에서 사용자에게 보냅니다.

참고

높은 수준의 보안이 필요한 사이트에는 전자 메일을 사용하여 암호를 지우기 텍스트로 반환하는 것이 좋습니다. 보안 수준이 높은 사이트의 경우 SSL과 같은 암호화를 사용하여 암호를 반환하는 것이 좋습니다.

참고

이 샘플에서는 클래스를 SqlMembershipProvider 사용하여 Web.config 파일에 지정된 defaultProvider 대로 호출합니다 Membership . 기본 공급자에 형식 SqlMembershipProvider으로 액세스해야 하는 경우 클래스의 속성을 캐스팅할 Provider Membership 수 있습니다. 특정 공급자 유형으로 구성된 다른 공급자에 액세스하려면 클래스의 Membership 속성을 사용하여 구성된 이름으로 Providers 액세스하고 특정 공급자 유형으로 캐스팅할 수 있습니다.

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Net.Mail" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

public void Page_Load(object sender, EventArgs args)
{
  if (!Membership.EnablePasswordRetrieval)
  {
    FormsAuthentication.RedirectToLoginPage();
  }

  Msg.Text = "";

  if (!IsPostBack)
  {
    Msg.Text = "Please enter a user name.";
  }
  else
  {
    VerifyUsername();
  }
}


public void VerifyUsername()
{
    MembershipUser user = Membership.GetUser(UsernameTextBox.Text, false);

    if (user == null)
    {
      Msg.Text = "The user name " + Server.HtmlEncode(UsernameTextBox.Text) + " was not found. Please check the value and re-enter.";

      QuestionLabel.Text = "";
      QuestionLabel.Enabled = false;
      AnswerTextBox.Enabled = false;
      EmailPasswordButton.Enabled = false;
    }
    else
    {
      QuestionLabel.Text = user.PasswordQuestion;
      QuestionLabel.Enabled = true;
      AnswerTextBox.Enabled = true;
      EmailPasswordButton.Enabled = true;
    }
}


public void EmailPassword_OnClick(object sender, EventArgs args)
{
  // Note: Returning a password in clear text using email is not recommended for
  // sites that require a high level of security.

  try
  {
    string password = Membership.Provider.GetPassword(UsernameTextBox.Text, AnswerTextBox.Text);
    MembershipUser u = Membership.GetUser(UsernameTextBox.Text);
    EmailPassword(u.Email, password);
    Msg.Text = "Your password was sent via email.";
  }
  catch (MembershipPasswordException e)
  {
    Msg.Text = "The password answer is incorrect. Please check the value and try again.";
  }
  catch (System.Configuration.Provider.ProviderException e)
  {
    Msg.Text = "An error occurred retrieving your password. Please check your values " +
               "and try again.";
  }
}


private void EmailPassword(string email, string password)
{
  try
  {
    MailMessage Message = new MailMessage("administrator", email);
    Message.Subject = "Your Password";
    Message.Body = "Your password is: " + Server.HtmlEncode(password);

    SmtpClient SmtpMail = new SmtpClient("SMTPSERVER");
    SmtpMail.Send(Message);
  }
  catch 
  {
    Msg.Text = "An exception occurred while sending your password. Please try again.";
  }
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Retrieve Password</title>
</head>
<body>

<form id="form1" runat="server">
  <h3>Retrieve Password</h3>

  <asp:Label id="Msg" runat="server" ForeColor="maroon" /><br />

  Username: <asp:Textbox id="UsernameTextBox" Columns="30" runat="server" AutoPostBack="true" />
            <asp:RequiredFieldValidator id="UsernameRequiredValidator" runat="server"
                                        ControlToValidate="UsernameTextBox" ForeColor="red"
                                        Display="Static" ErrorMessage="Required" /><br />

  Password Question: <b><asp:Label id="QuestionLabel" runat="server" /></b><br />

  Answer: <asp:TextBox id="AnswerTextBox" Columns="60" runat="server" Enabled="false" />
          <asp:RequiredFieldValidator id="AnswerRequiredValidator" runat="server"
                                      ControlToValidate="AnswerTextBox" ForeColor="red"
                                      Display="Static" ErrorMessage="Required" Enabled="false" /><br />

  <asp:Button id="EmailPasswordButton" Text="Email My Password" 
              OnClick="EmailPassword_OnClick" runat="server" Enabled="false" />

</form>

</body>
</html>

<%@ Page Language="VB" %>

<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Net.Mail" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  Public Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs)

    If Not Membership.EnablePasswordRetrieval Then
      FormsAuthentication.RedirectToLoginPage()
    End If

    Msg.Text = ""

    If Not IsPostBack Then
      Msg.Text = "Please enter a user name."
    Else
      VerifyUsername()
    End If

  End Sub


  Private Sub VerifyUsername()

    Dim user As MembershipUser = Membership.GetUser(UsernameTextBox.Text, False)

    If user Is Nothing Then
      Msg.Text = "The user name " & Server.HtmlEncode(UsernameTextBox.Text) & " was not found. Please check the value and re-enter."

      QuestionLabel.Text = ""
      QuestionLabel.Enabled = False
      AnswerTextBox.Enabled = False
      EmailPasswordButton.Enabled = False
    Else
      QuestionLabel.Text = user.PasswordQuestion
      QuestionLabel.Enabled = True
      AnswerTextBox.Enabled = True
      EmailPasswordButton.Enabled = True
    End If

  End Sub


  Public Sub EmailPassword_OnClick(ByVal sender As Object, ByVal args As EventArgs)

    ' Note: Returning a password in clear text using email is not recommended for
    ' sites that require a high level of security.

    Try
      Dim password As String = Membership.Provider.GetPassword(UsernameTextBox.Text, AnswerTextBox.Text)
      Dim u As MembershipUser = Membership.GetUser(UsernameTextBox.Text)
      EmailPassword(u.Email, password)
      Msg.Text = "Your password was sent via email."
    Catch e As MembershipPasswordException
      Msg.Text = "The password answer is incorrect. Please check the value and try again."
    Catch e As System.Configuration.Provider.ProviderException
      Msg.Text = "An error occurred retrieving your password. Please check your values " & _
                 "and try again."
    End Try

  End Sub


  Private Sub EmailPassword(ByVal email As String, ByVal password As String)

    Try
      Dim Message As MailMessage = New MailMessage("administrator", email)
      Message.Subject = "Your Password"
      Message.Body = "Your password is: " & Server.HtmlEncode(password)
      
      Dim SmtpMail As SmtpClient = New SmtpClient("SMTPSERVER")
      SmtpMail.Send(Message)
    Catch
      Msg.Text = "An exception occurred while sending your password. Please try again."
    End Try

  End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  <title>Sample: Retrieve Password</title>
</head>
<body>
  <form id="form1" runat="server">
    <h3>
      Retrieve Password</h3>
    <asp:Label ID="Msg" runat="server" ForeColor="maroon" /><br />
    Username:
    <asp:TextBox ID="UsernameTextBox" Columns="30" runat="server" AutoPostBack="True" />
    <asp:RequiredFieldValidator ID="UsernameRequiredValidator" runat="server" ControlToValidate="UsernameTextBox"
      ForeColor="red" Display="Static" ErrorMessage="Required" /><br />
    Password Question: <b>
      <asp:Label ID="QuestionLabel" runat="server" /></b><br />
    Answer:
    <asp:TextBox ID="AnswerTextBox" Columns="60" runat="server" Enabled="False" />
    <asp:RequiredFieldValidator ID="AnswerRequiredValidator" runat="server" ControlToValidate="AnswerTextBox"
      ForeColor="red" Display="Static" ErrorMessage="Required" Enabled="False" /><br />
    <asp:Button ID="EmailPasswordButton" Text="Email My Password" OnClick="EmailPassword_OnClick"
      runat="server" Enabled="False" />
  </form>
</body>
</html>

설명

이 메서드는 MembershipUser ASP.NET 애플리케이션의 구성 파일 (Web.config)에 지정 된 SQL Server 데이터베이스에서 사용자에 대 한 암호를 검색 하는 클래스입니다.

메서드에 잘못된 암호 응답이 제공 GetPassword 되면 잘못된 암호 응답 시도를 추적하는 내부 카운터가 하나씩 증가합니다. 이로 인해 사용자가 잠기고 메서드 호출로 잠금 상태가 지워질 때까지 로그온할 UnlockUser 수 없습니다. 올바른 암호 응답이 제공되고 사용자가 현재 잠겨 있지 않으면 잘못된 암호 응답 시도를 추적하는 내부 카운터가 0으로 다시 설정됩니다. 자세한 내용은 MaxInvalidPasswordAttemptsPasswordAttemptWindow 속성을 참조하세요.

먼저 클래스의 GetPassword 속성을 통해 인스턴스에 대한 참조를 가져와 메서드를 Provider 직접 호출할 SqlMembershipProvider Membership 수 있습니다.

속성이 PasswordFormat 설정된 Hashed경우 메서드는 GetPassword 암호를 검색할 수 없습니다. 해시된 암호는 단방향으로 암호화되며 암호 해독할 수 없습니다. 속성이 PasswordFormat 설정된 Hashed경우 공급자 EnablePasswordRetrievaltrue초기화될 때 throw ProviderException 됩니다.

선행 및 후행 공백은 모든 매개 변수 값에서 트리밍됩니다.

적용 대상

추가 정보