단일 페이지 애플리케이션에 대한 로그인 페이지를 별도의 페이지로 만드는 이유는 무엇입니까?


28

SPA의 로그인 페이지를 SPA의 페이지가 아닌 별도의 페이지로 만드는 것이 왜 인기가 있는지 궁금합니다 (로드 및 ajax 요청을 통해 데이터 보내기)?

내가 생각할 수있는 것은 보안 뿐이지 만 특정 보안 이유는 생각할 수 없습니다. SPA의 일부인 로그인 페이지가 ajax를 통해 사용자 이름 / 암호를 보내면 방화범이나 웹 관리자와 같은 도구로 볼 수 있지만 정상적인 경우에도 마찬가지입니다. POST 요청에는이 데이터를 쉽게 캡처 할 수있는 다른 도구 (예 : 피들러, httpscoop 등)가 있습니다.

내가 놓친 것이 있습니까?


2
이 경우에는 이유가 있거나 필요하다고 생각하지 않습니다. 왜 안 되겠 어?
Steven Evers

1
그것에 대한 나의 주장은 로그인 페이지를 별도의 html 페이지로 갖는 반면 나머지 응용 프로그램은 SPA 아키텍처이지만 별다른 이점이 없지만 (msanford의 장점은 있지만) 이상합니다.
ryanzec

@ryanzec 감사합니다. 나는 실제 혜택이 있음을 설명하기 위해 예제를 추가했습니다. 첫째, 특히 로그인 실패 (또는 계정 정지 등) 의 경우 다른 곳에서 지연된 자산 로딩을 절약하는 것은 무시할 수 없습니다 . 둘째, 보다 정교한 비동기식 종속성 기반 모듈 시스템보다 구현 속도가 훨씬 빠르며 개발 수명주기는 중요한 고려 사항입니다 ( Opbeat의 Office Mantra * ( 취약성 포함) 참조).
msanford

"일반 POST 요청으로 보내더라도이 데이터를 쉽게 캡처 할 수있는 다른 도구가 있습니다." 확실히 당신의 로그인 폼은 HTTPS에 의해 보호 됩니까?
ajlane

예 @ajlane, 내 로그인 (실제로, 전체 응용 프로그램) HTTPS 뒤에 실행하는 것입니다
ryanzec

답변:


18

아마도 응용 프로그램에만 필요한 많은 클라이언트 측 자산 (예 : 무거운 JavaScript 프레임 워크, 이미지 )을 로드하는 것을 절약 할 수 있습니다.

유사한 성능 목표를 달성 할 수있는보다 정교한 방법이 있습니다 ( " Malte Ubl & John Hjelmstad : JavaScript 로딩에 대한 새롭고 효율적인 접근 방법-JSConf EU 2012 "참조). 어쨌든 웹 앱은 거의 모든 자산을 사용합니다.

http://infogr.am 베타 와 같은 사이트에서 야생에서 이것을 볼 수 있습니다 .

  1. http://infogr.am/login/은 jquery , raphael , 사용자 정의 js 및 3 개의 CSS 파일을로드합니다.
  2. http://infogr.am/beta/ (응용 프로그램의 기본 SPI 페이지)는 10 개의 자바 스크립트 프레임 워크, 5 개의 외부 CSS 파일 및 약 60 개의 이미지를로드합니다.

업데이트 : angular2 프런트 엔드 및 JBoss 백 엔드가있는 2016 년에도 동일한 이유로이 작업을 수행합니다.
msanford

18

나는 합리적이거나 반대되는 몇 가지 논쟁이 있다고 생각하며, 기술이 결정에 중요한 역할을한다고 말하고 싶습니다.

별도의 로그인 "페이지"가 ​​있으면 "디렉토리 보안"을 사용할 수 있다고 주장 할 수 있습니다. 일반적으로 누구나 "페이지"로그인을 볼 수 있지만 인증 된 사용자 만 "페이지"응용 프로그램과 "디렉토리"를 볼 수 있습니다. / Account /가 / App /와 다르고 각각 자체 보안 "프로필"이있는 경로도 잠글 수 있습니다.

또한 SPA 접근 방식을 사용하고 인증을 응용 프로그램 경험과 혼합하는 경우 논리가 복잡해질 수 있습니다. 사용자가 "여기에 있기 때문에 로그인되어"있다고 가정하는 대신, 인증 상태를 지속적으로 확인하고 "이 사용자가 여기에 있어야합니까?"

또한 로그인 페이지는 일반적으로 소비자를 향한 사이트에 있습니다. www.yourapp.com으로 이동 한 후 로그인 페이지에서 정보, 연락처, 지원 등에 대한 정보와 "로그인"페이지가 있습니다. 인증을 통해 전체 대상 호스트로 리디렉션 할 수 있습니다.

별도의 로그인 페이지를 유지하는 이유와 실제로 "소비자 대면"사이트에 대해 완전히 다른 앱을 사용하는 이유는 인증되지 않은 사용자에게는 거의 노출되지 않기 때문입니다. 우연히 일부 moron이 내 로그인 페이지에서 뱅킹을 시작하기 때문에 앱의 측면에 영향을 미치고 싶지는 않습니다. 로그인이 단순한 인증 조회 만 수행하는 경우에도 .. 최악의 경우 소비자 사이트가 다운되어 아무도 로그인 할 수 없지만 로그인 한 사용자는 알지 못하고 경험이 느려지기 시작하지 않습니다. 인증되지 않은 영역에 대한 위험을 격리했습니다 ..


1
보안은 종종 큰 이유입니다.
JustinC

1
@JustinC : 더 안전한 로그인을 위해 별도의 페이지에 설명해 주시겠습니까?
ryanzec

파일 시스템 속성을 통해 반드시 필요한 것은 아니지만 (상황이 요구하는 상황 일 수 있음), 특정 자원 또는 자원 그룹에 적용된 선택적 인증 / 권한 부여 방법의 적용을 통한 웹앱 컨테이너 / 서블릿 소프트웨어 / 런타임 전체적으로 (실제로 디렉토리) : 로그인 페이지 및 특정 정적 리소스 (이미지, 스타일 시트, 오류 페이지)의 경우 익명 액세스로 충분합니다. 다른 페이지의 경우보다 구체적인 인증 / 권한이 필요할 수 있습니다.
JustinC

2
앱 외부에서 인증하면 인증이 앱의 문제가되지 않습니다. 실제 보안은 구현 및 기술에 따라 다릅니다.
hanzolo

업데이트 2017 : IdentityServer
hanzolo

10

이렇게하는 한 가지 이유는 일반 쿠키 기반 세션을 사용할 수 있기 때문입니다. 사용자가 로그인하고 응답이 초기 메인 페이지와 함께 쿠키를 보낸 다음 모든 후속 ajax 호출이 쿠키를 서버로 다시 보냅니다.


6

몇 가지 이유가 있습니다.

  1. web.xml에서 일반적인 경로 기반 액세스 제어 규칙을 사용할 수 있습니다.
  2. 전체 Ajax 애플리케이션을 올바르게 보호했는지 확신 할 수 없으며 자신감을 갖기 위해 광범위한 테스트를 수행해야합니다.
  3. 인증을 프레임 워크 (예 : Spring Security), 타사 응용 프로그램 또는 SSO 솔루션 (예 : CAS 또는 JOSSO)에 위임 할 수 있습니다.
  4. 브라우저가 사용자의 사용자 이름과 암호를 캐시하도록 할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.