소셜 플러그인과 인증 보안 문제

stylix의 이미지

안녕하세요
모바일 디바이스에서 소셜 플러그인 사용에 대한 궁금한 것이 있어 문의드립니다.
보통 카카오 게임들(또는 페이스북이나 기타 소셜 플러그인을 사용한 앱)은 카카오 계정으로 로그인하면 휴대폰을 바꿔가면서 사용해도 계정 데이터가 동기화 됩니다.
그 카카오 계정으로 사용자를 식별하기 때문일 겁니다. 사용자 입장에서는 굉장히 편하죠.

그런데 그 사용자 데이터는 카카오와 무관한 별도의 게임사 서버에 저장되어 있을테고,
게임 클라이언트나 서버에 입장에서는 해당 카카오 계정의 일반적인 정보만을 접근할 수 있고 비밀번호는 알 수가 없을 텐데요
게임 클라이언트가 서버에 계정 정보를 보내면서 자기의 데이터를 요청했을 때, 서버가 어떻게 그 사람이 정말 해당 카카오 계정의 사용자라는 걸 확인할 수 있냐 하는 것입니다.
오늘 오후에 몇 시간 생각을 해 봤는데..

제 결론은 "결!" (지니어스에서...) 없다는 겁니다.
제 판단이 맞는 걸까요?

일반적으로 자사의 아이디와 함께 비밀번호까지 입력받는 경우에는 그 비밀번호가 사용자의 고유의 것이고 다른 사람이 알 수 없는 것이라는 가정을 통해서 사용자를 식별할 수 있지만
앱에 소셜 플러그인을 사용하는 것은 해당 소셜 서비스에 로그인한 것이지, 그 소셜 플러그인 사용하는 앱에 입장에서는 그 사용자만의 고유의 비밀정보를 전혀 모르기 때문이죠.

만약, 어떤 사용자가 역공학등으로 로직을 알게 되었을 때, 다른 사용자의 아이디는 비밀정보가 아니기 때문에 그것을 이용하여 그 사용자의 데이터를 조작할 수 있게 됩니다.

대체할 수 있는 방법들을 생각해 보니 너무 취약하거나 불편한 것들 뿐이네요..
첫째, 임의로 고정된 비밀번호 할당하는 것은 모든 사용자가 같은 비밀번호를 공유하는 개념이라 너무 취약한 것 같고 (네트워크 상에서 안전하게 전송될 수 있다는 것과는 별개로...)
둘째, 사용자별로 난수를 생성해 비밀번호로 할당하고 클라이언트에 저장하는 것은 앱을 재설치 한다거나 할 때 저장된 정보가 없어지니까 너무 불편할 것 같고요 (다시 그 난수(비밀번호)를 서버에서 받아오기 위해 인증이 필요하다는 순환논리문제)

괜찮은 방법이 없을까요?

peecky의 이미지

stylix의 이미지

서비스 제공자(페이스북)도 아니고, 소비자(클라이언트)도 아니고 소비자의 서버 측에서 사용자를 인증하는 방법이 궁금합니다..
접근토큰은 서비스 제공자가 확인하는 것이니까요..

peecky의 이미지

최초 사용자 인증이 완료(게임에서 카카오 계정으로 로그인 성공) 된 다음에, 게임 서버에서 인증 코드를 게임 클라이언트에 발급합니다. 그러면 다음부터는 그 인증코드로 게임 클라이언트와 게임 서버간의 통신만으로 인증을 유지할 수 있습니다.

stylix의 이미지

그러니까.. 최초 사용자 인증이 완료(게임에서 카카오 계정으로 로그인 성공) 된 다음에, 게임 서버에서 인증 코드를 게임 클라이언트에 발급할 때, (정확히는 발급하기 전) 서버는 무엇을 근거로 클라이언트가 카카오 인증된 사용자임을 검증할 수 있냐가 궁금한 겁니다.
(여기에는 다른 개발자(해커)들도 소셜 API를 사용할 수 있고, 네트워크 상의 패킷을 관찰할 수 있다는 현실적인 상황이 포함되어 있습니다.)

익명 사용자의 이미지

새 디바이스 받아서, 카카오톡 설치하고 사용자 인증을 먼저 수행하지 않나요?
지금 내가 이 디바이스의 사용자라고...

익명 사용자의 이미지

그럼 그 다음 부턴 카카오톡 서비스 데몬이 뭔가 해주지 않을까 싶네요 (추측..)

peecky의 이미지

http://oauth.net/core/diagram.png
이 그림의 E-F 과정입니다. E의 응답으로 정상적인 F가 오면 이 사용자는 인증된 카카오 사용자임음 알 수 있습니다.
(게임 서버와 카카오톡 서버간의 통신이 필요합니다.)

또한 패킷 내용을 중간에서 열어볼 수 없도록 암호화 해야지만 보안이 성립합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.