2016-10-28 1 views
0

일부 리소스에 대한 액세스를 제공하는 REST 서비스의 프런트 엔드로 Angular2 클라이언트 웹 응용 프로그램 클라이언트를 작성하고 있습니다. 다른 엔드 포인트에 대한 사용자/암호 인증을 요구하면서웹 클라이언트의 백엔드 REST 서비스에 대한 angular2 로그인 페이지

나머지 서비스 (예를 들어 GET /protectedresource, 또는 POST /freeresource 등), 기본 HTTP 인증으로 보호하고, (예를 GET /freeresource 용)의 엔드 포인트 중 일부에 대한 인증되지 않은 액세스를 허용한다.

Angular2 클라이언트의 경우 REST 서비스에서 허용하는 것과 동일한 ":"을 사용하여 웹 응용 프로그램에 대한 액세스를 허용하는 로깅 페이지를 구현하고 싶습니다. 이를 위해 나는이 자습서를 다음 해요 : https://medium.com/@blacksonic86/angular-2-authentication-revisited-611bf7373bf9#.myifbz656

문제는 위의 튜토리얼 내 REST 서비스가없는 상태에서 백엔드 REST 서비스, 당신은 자격 증명을 게시 할 수있는 인증 토큰을 반환 명시 적 /login 엔드 포인트를 가지고 있다고 가정이다 그런 엔드 포인트를 필요로하는 엔드 포인트에 대해 누락되었거나 잘못된 증명서를 전달할 때 권한 부여 오류 만 리턴합니다. 나는 이와 같은 상황에 대한 대안 문서 나 튜토리얼을 찾지 못했습니다.

그런 경우 올바른 방법은 무엇입니까? 예를 들어, 앱 로그인 페이지에서 읽은 사용자 이름과 비밀번호로 보호 된 리소스에 액세스하여 엔드 포인트를 시뮬레이션 할 수 있습니다. GET /protectedresource에 액세스하려고 시도합니다.이 호출이 unauthorized 오류를 반환하는 경우 로그인에 실패한 것으로 간주하지만 분명히 알 수 있습니다. 만족스러운 해결책이 아닙니다. (예를 들어 오늘날 보호 자원은 내일 자유롭게 액세스 할 수 있습니다.)이 경우 웹 응용 프로그램 로그인을 구현하는 "깨끗한"방법은 무엇입니까?

답변

0

/login 끝점을 시뮬레이트 할 필요가 없습니다. 클라이언트가 인증을 필요로하는 리소스에 액세스하는 것을 알면됩니다. 자습서에서 동일한 "CanActivate"메소드를 구현하고 REST 호출을 할 때 사용자가 이미 인증 된 경우 서비스 호출을 작성하여 신임장을 전달하거나 사용자가 이미 인증 된 경우 로컬 저장 영역을 사용할 수 있습니다. REST 엔드 포인트가 매번 인증을 요구하면, 로그인 페이지에서 사용자로부터 인증을 가져 와서 로컬 저장 영역에 저장 한 다음 인증이 필요한 엔드 포인트로 전달하십시오.

+0

이 솔루션의 유일한 문제점은 특정 자원에 대한 정보를 실제로 요청하기 전에 로그인 페이지 (로그인 성공/실패)에서 사용자에게 즉각적인 피드백을 줄 수 있기를 바란다는 것입니다. UI). 그래서 내 대답에 제안 된 사용자 이름/암호가 유효한지 여부를 확인하기 위해 일부 보호 된 리소스 (예 : 내 UI가 실제로 필요하기 전에)에 "조숙 한"GET 요청을 내 보내야한다고 제안한 이유입니다. 아마 백 엔드 REST 서비스를 변경할 수 없으면 내 질문에 대한 실제 해결책이 없을 것입니다. 어쨌든 고마워. – chrx

관련 문제