programing

angularjs 앱에서 안전한 (!) 인증 시스템을 달성하는 방법은 무엇입니까?

nasanasas 2020. 12. 15. 19:24
반응형

angularjs 앱에서 안전한 (!) 인증 시스템을 달성하는 방법은 무엇입니까?


저는 angularjs를 처음 사용합니다 ...

문서를 읽고 튜토리얼을 완료했습니다. 나도 혼자서 다른 것을 시도했고, 일이 이해되기 시작합니다.

이제 안전한 인증 시스템 을 만드는 방법이 궁금합니다 .

쉬운 부분 : 코드 없음, 내 코드가 실행하는 작업을 설명합니다.

나는 고전적인 형식 : 사용자 이름 및 암호 텍스트 입력입니다.

사용자가 양식을 채우고 Enter 키를 누릅니다.

ajax 요청이 시작되고 응답은 "ok i know you"또는 "i do n't know you are"와 같은 내용을 알려주는 JSON입니다.

지금 필요한 것은 내 응용 프로그램의 다른보기간에 방문자의 기록 된 상태 (또는 기록되지 않은)를 관리하는 것입니다.

나는 인터넷에서이 목표를 달성하기 위해 누군가가 변수 ($ scope.isLogged = true)를 설정하고 다른 누군가가 쿠키를 사용한다고 읽었습니다. 그러나 자바 스크립트 변수 및 쿠키는 방화범 또는 유사한 개발 도구를 사용하여 쉽게 편집 할 수 있습니다.

... 그리고 마지막으로 질문 :

그렇다면 angularjs 앱에서 안전한 인증 시스템을 달성하기위한 몇 가지 제안이 있습니까?


사용자가 실행 환경 (즉, 브라우저)을 완전히 제어 할 수 있기 때문에 angularjs에서 어떤 것도 승인 할 수 없습니다. 각 수표, 케이스 (당신이 생각할 수있는 모든 것)는 변조 될 수 있습니다. 비대칭 키를 사용하여 로컬 데이터를 안전하게 저장하기 위해 로컬 암호화를 수행하는 자바 스크립트 라이브러리가 있지만 실제로는 원하는 것이 아닙니다.

세션을 사용하여 일반적인 응용 프로그램에서 수행하는 표준 방식으로 서버에서 권한을 부여 할 수 있으며 인증해야합니다. 특별한 코드가 필요하지 않으며, ajax 호출은 일반 세션 쿠키를 사용합니다. 애플리케이션은 인증 여부를 알 필요가 없습니다. 서버가 생각하는 것을 확인하기 만하면됩니다.

angularjs 애플리케이션의 관점에서 "로그인"또는 "로그 아웃"하는 것은 사용자를위한 GUI 힌트 일뿐입니다.


아마도 당신은 해결책을 찾았지만 현재 Angular 앱에서 구현중인 인증 체계를 구성했습니다.

.run에서 앱은 ActiveSession이 false로 설정된 상태로 등록됩니다. 그런 다음 브라우저에 토큰 및 사용자 ID가있는 쿠키가 있는지 확인합니다.

예인 경우 서버에서 token + userId를 확인하고 서버와 로컬 모두에서 토큰을 업데이트합니다 (토큰은 각 사용자에 대해 고유 한 서버 생성 키임).

아니요가 로그인 양식을 표시하면 자격 증명을 확인하고 다시 유효한 경우 서버에서 새 토큰을 가져 와서 저장을 요청합니다.

이 토큰은 영구 로그인 (3 주 동안 나를 기억)하거나 사용자가 브라우저 페이지를 새로 고칠 때 사용됩니다.

감사합니다

Angular.js의 인증 체계


3 개월 전에이 질문을했습니다.

AngularJS를 기반으로 구축 된 웹 앱에서 사용자 인증을 처리 할 때 가장 좋아하는 접근 방식을 공유하고 싶습니다.

물론 fdreger의 대답은 여전히 ​​좋은 대답입니다!

사용자가 실행 환경 (즉, 브라우저)을 완전히 제어 할 수 있기 때문에 angularjs에서 어떤 것도 승인 할 수 없습니다.

angularjs 애플리케이션의 관점에서 "로그인"또는 "로그 아웃"하는 것은 사용자를위한 GUI 힌트 일뿐입니다.

따라서 간단히 내 접근 방식은 다음과 같이 구성됩니다.

1) 각 경로에 경로 자체에 대한 추가 정보를 바인딩합니다.

$routeProvider.when('/login', { 
    templateUrl: 'partials/login.html', controller: 'loginCtrl', isFree: true
});

2) 서비스를 사용하여 각 사용자에 대한 데이터 및 인증 상태를 관리합니다.

services.factory('User', [function() {
    return {
        isLogged: false,
        username: ''
    };
}]);

3) 사용자가 새 경로에 액세스하려고 할 때마다 액세스 권한이 있는지 확인하십시오.

$root.$on('$routeChangeStart', function(event, currRoute, prevRoute){
    // prevRoute.isFree tell me if this route is available for all the users, or only for registered user.
    // User.isLogged tell me if the user is logged
})

또한이 접근 방식에 대해 블로그에 angularjs를 사용한 사용자 인증에 대해 썼습니다 .


우선 : 클라이언트 측 데이터는 항상 조작 또는 변조 될 수 있습니다.

유효한 세션 ID를 쉽게 추측 할 수없고 세션 토큰을 클라이언트의 IP와 연결하는 것과 같은 조치를 취하는 한 큰 문제는 없습니다.

이론적으로는 서버 측에서 수행하는 한 쿠키를 암호화 할 수도 있습니다.

For details on how to encrypt your cookies, see the docs of your server-side (e.g http://expressjs.com/api.html#res.cookie for Express.js)


You need to learn about the server side / database end of it.

User logins need to be stored somewhere - 99.9% of the time this is in a server side database.

Ideally for a really secure system you want a backend (server side) membership system that stores the session in a database table that is related to the member table that holds the encrypted password, but also provides a RESTful interface where you can build your api calls to.

내가 성공적으로 많이 사용한 스크립트 중 하나는 Amember https://www.amember.com/ 입니다. 다른 많은 스크립트가 있지만 정말 비용 효율적인 방법입니다. 저는이 스크립트로 많은 성공을 거두었습니다. 또한 PHP이므로 각 http 호출을위한 API를 빌드 할 수 있습니다. 용이하게.

이 모든 자바 스크립트 프레임 워크는 훌륭하지만 이제 너무 많은 사람들이 사물의 프런트 엔드에 너무 많은 초점을 맞추고 있다는 것입니다. 데이터베이스 / 백엔드도 배우십시오! :-)

참조 URL : https://stackoverflow.com/questions/14791361/how-to-achieve-a-safe-authentication-system-in-an-angularjs-app

반응형