Oauth, Restful, jwt를 며칠간 계속 알아보고 있는데요.. 흐름 자체는 이해가 가는데
보안에 관하여 이해가 아직도 해결이 되지 않네요..
궁금한점은,
id,pw등을 이용하여 api server에 로그인 후 token을 받아와서 sharedpreference에다가 저장 후 해당 토큰을 통해 api server로 호출을 하는 것까지는 이해가 가는데요.
문제는, 해당 api server의 url과 endpoint를 알면 기기가 아닌 브라우저나 어디서든지 접근이 가능하지 않습니까?
그렇다면, 만약 루팅된 폰에서 token값만 빼와서 해당 api server의 endpoint로 요청을 날리게 되면, 이거 보안에 심각한 문제인데요. (get이 아닌 정보 update와 관련된 endpoint같은 경우 등)
이것을 막는 방법이 도저히 떠오르지가 않네요.
제가 생각한 방법들은
1. 기기에서 요청한 것만 필터링한다. -> 기기에서 요청이 온것인지 서버로서는 알수가 없다.
2. token값을 ndk, 암호화등을 이용하여 클라이언트단에서 숨긴다 -> 어떻게든 알아낼 수 있을것이고, 몇개의 앱을 분석해본결과 token값을 숨기는 방법을 쓰지는 않는것 같습니다. 페이스북sdk 로그인도 access_token 을 그냥 sharedpreference에 그대로 저장하더군요.
3. secret key 또는 token값을 서버에서 받아온다? -> 서버에서 받아올때는 어떻게 인증을 해야 할까요? 해당 url로 접근하면 secret키를 그대로 보여준다? 이것도 결국 인증을 통한 api로 받아와야 하는데 현재 제가 이해한바로는 의미가 없는 방법인것 같습니다.
결론은, api server에 인증(로그인)을 하여 token값을 클라이언트에 받아왔어요.
api server에서는 이 token값으로만 사용자를 구별하죠?
문제는, api server의 POST, PUT등의 정보 update와 관련된 호출은 프로그램 로직상에서만 호출이되어야지 url과 token만 알아내어 임의로 호출하면 안되잖아요.
이 보안문제를 어떻게 해결해야 할까요 ㅜ ㅜ