웹 애플리케이션 로그인 사용자 정의
사용자를 인증하기 위해 양식 로그인 페이지와 오류 페이지를 작성할 수 있습니다.
시작하기 전에
- HTTP 기본 인증: 웹 서버가 인증하기 위해 웹 클라이언트를 요청하고 웹 클라이언트는 HTTP 헤더에서 사용자 ID와 비밀번호를 전달합니다.
- HTTPS 클라이언트 인증: 이 메커니즘에는 사용자(웹 클라이언트)가 공개 키 인증서를 소유하도록 요구합니다. 웹 클라이언트는 클라이언트 인증서를 요청하는 웹 서버에 인증을 보냅니다. 이 인증 메커니즘은 강력하고 HTTPS(Hypertext Transfer Protocol with Secure Sockets Layer) 프로토콜을 사용합니다.
- 양식 기반 인증: 개발자는 이 인증 메커니즘을 사용하여 로그인 화면의 룩앤필을 제어합니다.
HTTP(Hypertext Transfer Protocol) 기본 인증은 사용자 비밀번호를 웹 클라이언트에서 단순한 base64 인코딩으로 웹 서버에 전송합니다. 양식 기반 인증은 사용자 비밀번호를 브라우저에서 일반 텍스트로 웹 서버에 전송합니다. 그러므로 HTTP 기본 인증 및 양식 기반 인증은 HTTPS 프로토콜이 사용되지 않는 한 안전하지 않습니다.
웹 애플리케이션 배치 디스크립터에는 사용할 인증 메커니즘에 대한 정보가 포함됩니다. 양식 기반 인증이 사용되면 배치 디스크립터에는 또한 로그인 및 오류 페이지를 위한 항목이 포함됩니다. 로그인 페이지는 HTML 페이지 또는 JSP(JavaServer Pages) 파일일 수 있습니다. 이 로그인 페이지는 애플리케이션에서 보안 자원(서블릿. JSP 파일, HTML 페이지)에 액세스할 때 웹 클라이언트측에 표시됩니다. 인증 실패 시에 오류 페이지가 표시됩니다. 애플리케이션 요구에 맞도록 로그인 및 오류 페이지를 쓰고 이러한 페이지의 룩앤필을 제어할 수 있습니다. 애플리케이션의 어셈블리 동안, 어셈블러는 애플리케이션을 위한 인증 메커니즘을 설정하고 배치 디스크립터에서 로그인과 오류 페이지를 설정할 수 있습니다.
- sendRedirect 메소드는 처음에 양식 로그인 페이지를 웹 브라우저에서 표시합니다. 이는 나중에 웹 브라우저를 원래 요청된 보호된 페이지로 경로 재지정합니다. sendRedirect(String URL) 메소드는 웹 브라우저에 웹 주소에 지정된 페이지를 얻기 위해 HTTP GET 요청을 사용하도록 말합니다. HTTP POST가 보호된 서블릿 또는 JSP(JavaServer Pages) 파일에 대한 첫 번째 요청이고, 이전 인증 또는 로그인이 발생하지 않으면 HTTP POST는 요청된 페이지로 전달되지 않습니다. 그러나 양식 로그인은 로그인이 발생한 후에 요청된 페이지를 표시하기 위해 시도하는 HTTP GET 요청으로서 작동하는 sendRedirect 메소드를 사용하므로 HTTP GET이 제공됩니다.
- HTTP POST를 사용하면 보호되지 않는 HTML 양식이 사용자로부터 데이터를 수집하고 이 데이터를 처리하기 위해 보호된 서블릿 또는 JSP 파일에 게시하지만 사용자가 자원에 로그인되지 않는 시나리오를 경험할 수도 있습니다. 이 시나리오를 피하려면 애플리케이션이 보호된 서블릿 또는 JSP 파일에 대해 HTTP POST 조치를 수행하기 전에 사용자가 양식 로그인 페이지를 사용하도록 강제될 수 있도록 웹 애플리케이션 또는 권한을 구조화하십시오.
프로시저
예: 양식 로그인
- Java EE 양식 기반 로그인
- 로그인을 사용하는 Java EE 서블릿 필터
- IBM® 확장: 양식 기반 로그인
<form method="POST" action="j_security_check">
<input type="text" name="j_username">
<input type="text" name="j_password" autocomplete="off">
<\form>
j_username 입력 필드를 사용하여 사용자 이름을 가져오고, j_password 입력 필드를 사용하여 사용자 비밀번호를 가져오십시오.
웹 클라이언트로부터 요청을 수신할 때 웹 서버는 구성된 양식 페이지를 클라이언트에 전송하고 원본 요청을 보존합니다. 웹 서버가 웹 클라이언트로부터 완료된 양식 페이지를 수신하면 서버는 양식으로부터 사용자 이름 및 비밀번호를 추출하고 사용자를 인증합니다. 인증 성공 시에 웹 서버는 호출을 원래 요청으로 경로 재지정합니다. 인증이 실패하면 웹 서버는 호출을 구성된 오류 페이지로 경로 재지정합니다.
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<META HTTP-EQUIV = "Pragma" CONTENT="no-cache">
<title> Security FVT Login Page </title>
<body>
<h2>Form Login</h2>
<FORM METHOD=POST ACTION="j_security_check">
<p>
<font size="2"> <strong> Enter user ID and password: </strong></font>
<BR>
<strong> User ID</strong> <input type="text" size="20" name="j_username">
<strong> Password </strong> <input type="password" size="20" name="j_password" autocomplete="off">
<BR>
<BR>
<font size="2"> <strong> And then click this button: </strong></font>
<input type="submit" name="login" value="Login">
</p>
</form>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<head><title>A Form login authentication failure occurred</head></title>
<body>
<H1><B>A Form login authentication failure occurred</H1></B>
<P>Authentication may fail for one of many reasons. Some possibilities include:
<OL>
<LI>The user-id or password may be entered incorrectly; either misspelled or the
wrong case was used.
<LI>The user-id or password does not exist, has expired, or has been disabled.
</OL>
</P>
</body>
</html>
<login-config id="LoginConfig_1">
<auth-method>FORM<auth-method>
<realm-name>Example Form-Based Authentication Area</realm-name>
<form-login-config id="FormLoginConfig_1">
<form-login-page>/login.html</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
META-INF
META-INF/MANIFEST.MF
login.html
error.jsp
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/aServlet.class
양식 로그아웃은 모든 웹 브라우저 세션을 닫을 필요 없이 로그아웃하기 위한 메커니즘입니다. 양식 로그아웃 메커니즘을 로그아웃한 후에 보호된 웹 자원에 액세스하려면 재인증이 필요합니다. 이 기능은 J2EE 명세에 의해서는 요구되지 않지만 WebSphere Application Server 보안에서 추가 기능으로 제공됩니다.
- 로그아웃 양식 URI가 웹 브라우저에 지정되고 양식을 로드합니다.
- 사용자가 로그아웃하기 위해 양식에서 제출을 클릭합니다.
- WebSphere Application Server 보안 코드는 사용자를 로그아웃시킵니다. 이 프로세스 동안에
Application Server는 다음 프로시저를 완료합니다.
- LTPA(Lightweight Third Party Authentication)/싱글 사인온(SSO) 쿠키를 선택 취소합니다.
- HTTP 세션을 무효화합니다.
- 인증 캐시에서 사용자를 제거합니다.
- 로그아웃 시에 사용자는 로그아웃 종료 페이지로 경로 재지정됩니다.
양식 로그아웃에는 배치 디스크립터에서 속성이 필요하지 않습니다. 양식 로그아웃 페이지는 웹 애플리케이션에 포함된 HTML 또는 JSP(JavaServer Pages) 파일입니다. 양식 로그아웃 페이지는 양식 로그인 페이지와 같이 양식 로그아웃 페이지에 특수 포스트 조치가 있다는 점을 제외하고는 HTML 양식과 유사합니다. 이 포스트 조치는 웹 컨테이너에 의해 인식되고 포스트 조치를 특수 내부 양식 로그아웃 서블릿으로 디스패치합니다. 양식 로그아웃 페이지에서 포스트 조치는 ibm_security_logout이어야 합니다.
로그아웃 양식에 로그아웃 종료 페이지를 지정할 수 있고 종료 페이지는 사용자가 로그아웃 후에 경로 재지정되는 동일 웹 애플리케이션 내에 있는 HTML 또는 JSP 파일을 나타낼 수 있습니다. 또한 로그아웃 종료 페이지는 http://hostname:port/URL 양식으로 된 완전한 URL을 허용합니다. 로그아웃 종료 페이지는 양식 로그아웃 페이지에서 매개변수로 지정됩니다. 로그아웃 종료 페이지가 지정되지 않으면 기본 로그아웃 HTML 메시지가 사용자에게 리턴됩니다.
<!DOCTYPE HTML PUBliC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<META HTTP-EQUIV = "Pragma" CONTENT="no-cache">
<title>Logout Page </title>
<body>
<h2>Sample Form Logout</h2>
<FORM METHOD=POST ACTION="ibm_security_logout" NAME="logout">
<p>
<BR>
<BR>
<font size="2"><strong> Click this button to log out: </strong></font>
<input type="submit" name="logout" value="Logout">
<INPUT TYPE="HIDDEN" name="logoutExitPage" VALUE="/login.html">
</p>
</form>
</body>
</html>