질문을 삭제하지 말아주세요.!
 
1
0
-1

OAuth2.0을 사용하려면 보안상 SSL 서비스를 사용해야만 한다고 하는데, 해당 글이 2014년이더라구요. 현재는 SSL 서비스를 이용하지 않아도 안전한가요? 아니면 OAuth2.0의 보안상 문제가 해결이 될만한 Claim 기반의 인증 방법이 있을까요?

  1. 탈퇴

    영어를 몰라서 문서를 찾아봐도 너무 힘들어요. 흐에에엥에에에에에엥

CommentAdd your comment...

2 answers

  1.  
    2
    1
    0

    OAuth 1.0이 개발될 당시에는 대부분의 서비스 제공자들이 일발 HTTP를 사용 중이었기 때문에 API 보안을 위해서 암호화 서명이 포함되어있었습니다. 하지만, 암호화 방식이 복잡하여 사용률이 적고, HTTPS의 대중화로 인해서 자체 암호화 방식의 요구가 줄었다는 판단으로 OAuth 2.0은 암호화 서명을 제외하고 개발되었습니다.

    이런 이유로 OAuth 2.0은 SSL/TLS를 사용해야 하며, 그렇지 않은 경우에 통신 구간의 보안은 보장받지 못합니다. HTTPS를 사용하지 못한다면, 통신 구간의 보안을 위해서 암호화 서명 기능이 포함되어있는 OAuth 1.0a을 사용하시는 것이 하나의 선택이 될 수 있습니다.

    다시 말하자면, OAuth 2.0을 사용한다면 SSL/TLS를 사용해야 안전합니다. 그렇지 않다면, 대안으로 OAuth 1.0a 등을 검토해보시는 것이 좋습니다.

    1. 김주원

      춘기님이랑 같은 시간에 답을 쓰고 있었네요 ㅎㅎ.

    CommentAdd your comment...
  2.  
    1
    0
    -1

    저도 잘 몰라서 다른 분의 답변을 기다리고 있었는데, 제가 아는 한도 내에서 답변 남겨 놓을게요.

    Oauth는 사용자와 클라이언트 기기를 One-to-many 관계로 연결하고, 각 기기별로 권한(Scope)을 부여하는 인증 기술이라는 정도로만 알고 있습니다.

    1) SSL(TLS)은 네트워크 구간에서의 탈취를 막기 위한 수단입니다.
    클라이언트 식별과 관련된 정보가 패스워드든 토큰이든 결국은 HTTP 요청을 이용해서 전달합니다. Oauth 토큰도 결국은 GET query string이나 POST params를 이용해서 전달되고, 네트워크 구간에서 Tcpdump나 Wireshark로 덤프해보면 훤히 보입니다. 보통은 토큰의 유효기간을 굉장히 짧게 줌으로써 탈취 당해도 피해를 줄이려고 하는데요. 극단적인 상황으로 유효 기간 만료된 토큰의 갱신 가능 기간 제한이 없다면, 한 번 탈취한 토큰으로 영구적으로 서비스에 접근할 수 있게 됩니다 (물론 서버측에서 invalidate 할 수 있습니다).

    SSL 인증서를 적용하면 서버와 클라이언트가 Tcp 소켓 형성에 필요한 정보(METHOD host/path:port?foo=bar)를 제외한 모든 헤더와 본문을 암호화하여 통신합니다. 네트워크 구간에서 토큰, 비밀번호와 같은 민감한 정보뿐만아니라, HTTP 본문으로 전달되는 문서 구조, 고객 정보 등도 모두 암호화되므로 안전합니다.

    2) 해킹은 경제성의 논리입니다.
    SSL에 사용하는 보안 기술로 암호화된 문서를 해독하는데는 100년 이상의 시간이 걸립니다. 해커가 100년을 살지도 못하거니와, 100년을 투자해서 얻는 것이 뭘까요?

    더 중요한 것은 고객과 계약을 통해서 제공하는 API 서비스의 구조가 전부 드러난다거나, 경쟁사에 정보가 노출되어서 사업적으로 피해를 보는 경우를 생각해 볼 수 있습니다.

    결론적으로 상용 서비스라면, 어떤 사용자/기기 인증 방식을 사용하든간에 SSL 인증서는 무조건 사용해야한다고 생각합니다.

      CommentAdd your comment...