12

이 작업은 매우 간단해야하며 작동하지 않는 이유는 없습니다.ASP.Net에서 인증되지 않은 web.config를 통한 인증 3.5

저는 ASP.net 3.5 응용 프로그램에 대해 몇 가지 매우 빠른 인증을 설정하려고하지만 web.config 파일에 사용자 이름과 암호를 저장하려고합니다. (매우 안전하지는 않지만 계속 유지하는 내부 응용 프로그램입니다. 로그인을 추가하고 제거하도록 요청 했으므로 가장 빠른 방법입니다). 로그인 페이지에서 코드를 다음과 같이

<authentication mode="Forms"> 
    <forms loginUrl="~/login.aspx"> 
    <credentials> 
    <user name="user" password="password" /> 
    <user name="user2" password="password2" /> 
    </credentials> 
    </forms> 
    </authentication> 

    <authorization> 
    <deny users="?"/> 
    </authorization> 

을 그리고 :

string username = tbUsername.Text; 
string password = tbPassword.Text; 

if (FormsAuthentication.Authenticate(username, password)) 
    FormsAuthentication.RedirectFromLoginPage(username, false); 

그러나, FormsAuthentication.Authenticate (사용자 이름, 암호를

그래서, 관련 설정 부분은 다음과 같습니다)는 항상 false를 반환합니다. 그리고 나는 이유를 알 수 없다.

심지어 Membership.ValidateUser를 사용해 보았지만 로컬 데이터베이스를 App_Data 폴더에 추가하기까지했습니다.

정말 기본적인 것이 있습니까? 여기를 잊어 버리고 있거나 전혀 작동하지 않습니다 .net 3.5?

답변

13

.NET 3.5에서는 변경되었지만 <credentials> 요소의 암호는 passwordFormat이고이 형식은 web.config입니다. MSDN documentation for .NET 3.5에서 기본 형식은 SHA1입니다.

당신이 당신의 web.config에 일반 텍스트 사용자 이름과 암호를 사용하는 경우, 당신은 사용해야합니다

... 
<credentials passwordFormat="Clear"> 
... 

이벤트 이것이 내가 아직도 적어도 암호 해시 대신에 그것을 떠날 것을 권 해드립니다 내부 응용 프로그램입니다하지만 명확한 문구.

+0

매직, 그게 다야! 내가 읽었을 때 이마가 잘 맞았습니다. 금요일 오후에 잊어 버린 것을 놀랍니다. 많은 감사합니다! –

2

암호를 일반 텍스트로 저장할 때 <credentials passwordFormat="Clear">을 지정해야합니다.

대안은 MD5 또는 SHA1을 사용하여 암호화 된 암호입니다.

암호를 인코딩하는 기능은 http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.hashpasswordforstoringinconfigfile.aspx을 참조하십시오.

자동으로 많은 도움이되는 사용자 컨트롤 중 일부를 사용하는 것도 좋습니다. Visual Studio의 컨트롤 도구 상자에있는 "로그인"섹션을보십시오. 다음 페이지는이 간단한 경우에 필요한 모든 것을, 그리고 로그인 컨트롤의 외모를 제공 할 것입니다

완벽하게 사용자 정의 할 수 있습니다 :

<%@ Page Language="C#" %> 

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

<script runat="server"> 

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
    { 
     e.Authenticated = FormsAuthentication.Authenticate(Login1.UserName, Login1.Password); 
    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Login</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Login ID="Login1" runat="server" onauthenticate="Login1_Authenticate"> 
     </asp:Login> 
    </div> 
    </form> 
</body> 
</html> 
2

사용자 이름 "관리자"가 될 나타나는 또 다른 가능한 함정 특별하고 웹에서 자격 증명을 테스트하는 경우 영광을 얻지 못합니다.설정

<credentials> 
<user name="Admin" password="somepassword" /> //Authentication always returns false for me 
</credentials> 

<credentials> 
<user name="MyName" password="somepassword" /> //Authentication works normally 
</credentials> 

문제는 귀하의 경우에는 적용하지 않는 것,하지만 난 그저 내가 여기를 기록 할 거라고 생각 그것을 알아내는 시간을 보냈다.

-3

내가 당신의 프로그램을 실행하여 텍스트 상자에 ("SHA1", "ABC") 먼저 FormsAuthentication.HashPasswordForStoringInConfigFile를 사용하여 hashvalue를 얻을 수있다 ........ 그 해결책을 찾은 다음

에서이 값을 제공
관련 문제