SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Flask, Redis, Retrofit을 이용한
Android 로그인 서비스 구현하기
2015.01.15
이화앱센터 안드로이드팀장 한만종
로그인이란?
Logging in or signing in or on is the process by which
individual access to computer system is controlled by
identifying and authenticating the user through the
credentials presented by the user.
Wikipedia
Authentication? Authorization?
인증(authentication)은 자신이 누구라고 주장하는 사람을 확인하
는 절차이다. 권한부여(authorization)는 가고싶은 곳으로 가도록
혹은 원하는 정보를 얻도록 허용하는 과정이다.
httpd.apache.org
로그인 구현 이렇게??
• “아이디는 사용자를 구분하는 누구나 알 수 있는 문자열.”
• “비밀번호는 안보이게 자주 쓰이는 MD5 암호화해서 보내자.”
• “DB에 저장된 아이디와 암호화된 비밀번호를 비교하면 되겠지.”
• “HTTP POST 방식은 비밀스럽게 통신하는 방식이야.”
• “로그인을 하고나면 로그아웃하기 전까지 로그인한 것으로 간주.”
로그인 구현 이렇게??
• “아이디는 사용자를 구분하는 누구나 알 수 있는 문자열.”
• “비밀번호는 안보이게 자주 쓰이는 MD5 암호화해서 보내자.”
• “DB에 저장된 아이디와 암호화된 비밀번호를 비교하면 되겠지.”
• “HTTP POST 방식은 비밀스럽게 통신하는 방식이야.”
• “로그인을 하고나면 로그아웃하기 전까지 로그인한 것으로 간주.”
안전한 로그인 구현 조건
• 비밀번호를 포함한 개인정보는 전송 시 모두 암호화해야 한다.
• 또한, HTTP 보다는 HTTPS(SSL)를 이용해서 통신한다.
• HTTP POST는 GET과 비교해 파라미터들이 위치하는 곳이 다를 뿐 보안
과는 무관하다. (패킷스니핑)
• MD5, SHA-1, SHA-256, SHA-512 등의 해싱은 무결성 인증을 위해 사용
하는 것이지 암호화 알고리즘이 아니다. (MD5, SHA-1은 무력화되었다.)
• 로그인 성공은 사용자 “인증”을 완료했다는 것이며, 해당하는 “접근 권한”
을 부여한다는 것이다. 그러나 이 상태(세션)는 적절한 시기에 만료시켜야
한다.
안전한 로그인 구현 예제
• REST API 지향
• RSA 암호화를 통해 개인정보를 암호화
• secure한 cookie를 이용해 RSA 개인키 보관
• token과 REDIS를 이용한 session 관리
Flask, Redis, Retrofit
• Python Flask: Django와 더불어 많이 사용되고 있는 Python
웹 프레임워크. Django는 Full-Stack 프레임워크인 반면에
Flask는 필요한 기능만 제공하는 Micro 프레임워크이다.
• Redis: REmote DIctionary System의 약자로 메모리 기반의
Key/Value 자료구조 서버이다.
• Retrofit: Square Inc.에서 개발한 Java용 네트워크 라이브러
리. Android 개발에서는 Volley 이후로 많이 쓰이고 있다.
Flask?
http://127.0.0.1:5000/ 으로 접속 시 “Safety Login” 표시
Redis?
“myKey”라는 키로 “myValue”라는 값을 얻을 수 있음
Retrofit?
“/user/login”에 GET으로 요청해서 비동기로 응답받음
redis-py
Python에서 Redis를 연결하는 인터페이스 클라이언트
서버사이드 API 설계
POST /api/user/signup: 회원가입
*편의상 DB 대신 상수를 이용한 점 양해바랍니다.
서버사이드 API 설계
GET /api/user/login: RSA 공개키 발급
서버사이드 API 설계
PUT /api/user/login: 로그인
서버사이드 API 설계
GET /api/user/profile: 사용자 프로필 조회
Android 클라이언트 접속
Retrofit을 이용한 서버사이드 API 인터페이스
Android 클라이언트 접속
SignupActivity: 회원가입 요청
Android 클라이언트 접속
LoginActivity: RSA 공개키 요청
Android 클라이언트 접속
LoginActivity: 공개키를 이용한 RSA 암호화
Android 클라이언트 접속
LoginActivity: 로그인 요청
안전한 로그인 구현 예제
지금까지 설명한 예제 소스코드를 다음에 공개했습니다.
https://gitlab.com/ewhappcenter/safety-login.git
안전한 로그인 구현 예제
• 이 예제는 “예시”로서 간단한 구현체이다. 따라서 다음과 같은 문
제가 있으며, 실서비스에서 사용하는 것을 권장하지 않는다.
1. RSA 암호화를 해서 전송하더라도 중간자 공격에 취약하다.
(SSL 연결 필요)
2. 전체 내용 자체를 RSA 암호화 하는 것만으로는 빠른 성능을
보장할 수 없다. (내용을 AES 암호화하고 AES 키를 RSA
암호화하는 방법을 추천)
감사합니다.
이화앱센터 안드로이드팀장 한만종
han@manjong.org

Contenu connexe

Tendances

AWS Black Belt Online Seminar 2017 EC2 Windows
AWS Black Belt Online Seminar 2017 EC2 WindowsAWS Black Belt Online Seminar 2017 EC2 Windows
AWS Black Belt Online Seminar 2017 EC2 WindowsAmazon Web Services Japan
 
AWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツールAWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツールMasaki Suzuki
 
muCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David BorsosmuCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David BorsosOpenCredo
 
Amazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Web Services Japan
 
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築Amazon Web Services Japan
 
AWS Black Belt Techシリーズ Amazon ElastiCache
AWS Black Belt Techシリーズ Amazon ElastiCacheAWS Black Belt Techシリーズ Amazon ElastiCache
AWS Black Belt Techシリーズ Amazon ElastiCacheAmazon Web Services Japan
 
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...Serverless Design Patterns for Rethinking Traditional Enterprise Application ...
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...Amazon Web Services
 
Heterogenous Migration with DMS & SCT
Heterogenous Migration with DMS & SCTHeterogenous Migration with DMS & SCT
Heterogenous Migration with DMS & SCTAmazon Web Services
 
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 IntroAmazon Web Services Korea
 
Azure AD による Web API の 保護
Azure AD による Web API の 保護 Azure AD による Web API の 保護
Azure AD による Web API の 保護 junichi anno
 
Dep005 azure ネットワーク設計
Dep005 azure ネットワーク設計Dep005 azure ネットワーク設計
Dep005 azure ネットワーク設計Tech Summit 2016
 
Elastic Stack を網羅する ハンズオンワークショップを 作ってみた.pdf
Elastic Stack を網羅する ハンズオンワークショップを 作ってみた.pdfElastic Stack を網羅する ハンズオンワークショップを 作ってみた.pdf
Elastic Stack を網羅する ハンズオンワークショップを 作ってみた.pdfKoji Kawamura
 
Map Services on Amazon AWS, Microsoft Azure and Google Cloud Platform
Map Services on Amazon AWS, Microsoft Azure and Google Cloud PlatformMap Services on Amazon AWS, Microsoft Azure and Google Cloud Platform
Map Services on Amazon AWS, Microsoft Azure and Google Cloud Platform문기 박
 
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015OpenID Foundation Japan
 
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3Ji-Woong Choi
 
Introduction to Oracle Cloud Infrastructure Services
Introduction to Oracle Cloud Infrastructure ServicesIntroduction to Oracle Cloud Infrastructure Services
Introduction to Oracle Cloud Infrastructure ServicesKnoldus Inc.
 
AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021
AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021
AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021Amazon Web Services Korea
 
Introduction to Azure SQL DB
Introduction to Azure SQL DBIntroduction to Azure SQL DB
Introduction to Azure SQL DBChristopher Foot
 
AWS初心者向けWebinar .NET開発者のためのAWS超入門
AWS初心者向けWebinar .NET開発者のためのAWS超入門AWS初心者向けWebinar .NET開発者のためのAWS超入門
AWS初心者向けWebinar .NET開発者のためのAWS超入門Amazon Web Services Japan
 

Tendances (20)

AWS Black Belt Online Seminar 2017 EC2 Windows
AWS Black Belt Online Seminar 2017 EC2 WindowsAWS Black Belt Online Seminar 2017 EC2 Windows
AWS Black Belt Online Seminar 2017 EC2 Windows
 
AWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツールAWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツール
 
muCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David BorsosmuCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David Borsos
 
Amazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がり
 
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
 
AWS Black Belt Techシリーズ Amazon ElastiCache
AWS Black Belt Techシリーズ Amazon ElastiCacheAWS Black Belt Techシリーズ Amazon ElastiCache
AWS Black Belt Techシリーズ Amazon ElastiCache
 
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...Serverless Design Patterns for Rethinking Traditional Enterprise Application ...
Serverless Design Patterns for Rethinking Traditional Enterprise Application ...
 
Heterogenous Migration with DMS & SCT
Heterogenous Migration with DMS & SCTHeterogenous Migration with DMS & SCT
Heterogenous Migration with DMS & SCT
 
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro
 
Azure AD による Web API の 保護
Azure AD による Web API の 保護 Azure AD による Web API の 保護
Azure AD による Web API の 保護
 
Dep005 azure ネットワーク設計
Dep005 azure ネットワーク設計Dep005 azure ネットワーク設計
Dep005 azure ネットワーク設計
 
Elastic Stack を網羅する ハンズオンワークショップを 作ってみた.pdf
Elastic Stack を網羅する ハンズオンワークショップを 作ってみた.pdfElastic Stack を網羅する ハンズオンワークショップを 作ってみた.pdf
Elastic Stack を網羅する ハンズオンワークショップを 作ってみた.pdf
 
Map Services on Amazon AWS, Microsoft Azure and Google Cloud Platform
Map Services on Amazon AWS, Microsoft Azure and Google Cloud PlatformMap Services on Amazon AWS, Microsoft Azure and Google Cloud Platform
Map Services on Amazon AWS, Microsoft Azure and Google Cloud Platform
 
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
 
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3
[오픈소스컨설팅]유닉스의 리눅스 마이그레이션 전략_v3
 
Introduction to Oracle Cloud Infrastructure Services
Introduction to Oracle Cloud Infrastructure ServicesIntroduction to Oracle Cloud Infrastructure Services
Introduction to Oracle Cloud Infrastructure Services
 
AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021
AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021
AWS를 활용해서 글로벌 게임 런칭하기 - 박진성 AWS 솔루션즈 아키텍트 :: AWS Summit Seoul 2021
 
Azure Network 概要
Azure Network 概要Azure Network 概要
Azure Network 概要
 
Introduction to Azure SQL DB
Introduction to Azure SQL DBIntroduction to Azure SQL DB
Introduction to Azure SQL DB
 
AWS初心者向けWebinar .NET開発者のためのAWS超入門
AWS初心者向けWebinar .NET開発者のためのAWS超入門AWS初心者向けWebinar .NET開発者のためのAWS超入門
AWS初心者向けWebinar .NET開発者のためのAWS超入門
 

En vedette

안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기은아 정
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 YoungSu Son
 
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)성일 한
 
리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDB리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDBManjong Han
 
유니브북 출시부터 운영까지
유니브북 출시부터 운영까지유니브북 출시부터 운영까지
유니브북 출시부터 운영까지Manjong Han
 
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)성일 한
 
Android 5.0 & Material Design
Android 5.0 & Material DesignAndroid 5.0 & Material Design
Android 5.0 & Material DesignManjong Han
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기Juwon Kim
 
About IssueTracker
About IssueTrackerAbout IssueTracker
About IssueTrackerManjong Han
 
gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기Manjong Han
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.Kris Jeong
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Kyoung Up Jung
 
Python과 flask 입문(1)
Python과 flask 입문(1)Python과 flask 입문(1)
Python과 flask 입문(1)성천 이
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신NAVER D2
 
Compass first meetup
Compass first meetupCompass first meetup
Compass first meetupShuo Yang
 
[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)Sang Don Kim
 
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!SangHoon Han
 

En vedette (20)

안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
 
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
 
리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDB리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDB
 
유니브북 출시부터 운영까지
유니브북 출시부터 운영까지유니브북 출시부터 운영까지
유니브북 출시부터 운영까지
 
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #2 (ABCD)
 
Android 5.0 & Material Design
Android 5.0 & Material DesignAndroid 5.0 & Material Design
Android 5.0 & Material Design
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기
 
About IssueTracker
About IssueTrackerAbout IssueTracker
About IssueTracker
 
gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
 
플라스크 템플릿
플라스크 템플릿플라스크 템플릿
플라스크 템플릿
 
Python과 flask 입문(1)
Python과 flask 입문(1)Python과 flask 입문(1)
Python과 flask 입문(1)
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
Redis acc
Redis accRedis acc
Redis acc
 
[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신
 
Compass first meetup
Compass first meetupCompass first meetup
Compass first meetup
 
[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)
 
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
 

Similaire à Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기

REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션Lee Geonhee
 
(131102) #fitalk get windows logon password in memory dump
(131102) #fitalk   get windows logon password in memory dump(131102) #fitalk   get windows logon password in memory dump
(131102) #fitalk get windows logon password in memory dumpINSIGHT FORENSIC
 
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라MinKyu Kim
 
web study 1day
web study 1dayweb study 1day
web study 1day준호 우
 
W3C HTML5 컨퍼런스 2020 - 웹 환경에서 블록체인 노드와 통신 및 신원인증 (DID)
W3C HTML5 컨퍼런스 2020 - 웹 환경에서 블록체인 노드와 통신 및 신원인증 (DID)W3C HTML5 컨퍼런스 2020 - 웹 환경에서 블록체인 노드와 통신 및 신원인증 (DID)
W3C HTML5 컨퍼런스 2020 - 웹 환경에서 블록체인 노드와 통신 및 신원인증 (DID)Benjamin Oh
 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introductionJinkyoung Kim
 
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPAPgDay.Seoul
 
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발강 민우
 
Trusted Pass 소개서 2016_08_22
Trusted Pass 소개서 2016_08_22Trusted Pass 소개서 2016_08_22
Trusted Pass 소개서 2016_08_22Wonil Seo
 
Amazon Cognito를 활용한 모바일 인증 및 보안, 자원 접근 제어 기법 - AWS Summit Seoul 2017
Amazon Cognito를 활용한 모바일 인증 및 보안, 자원 접근 제어 기법 - AWS Summit Seoul 2017Amazon Cognito를 활용한 모바일 인증 및 보안, 자원 접근 제어 기법 - AWS Summit Seoul 2017
Amazon Cognito를 활용한 모바일 인증 및 보안, 자원 접근 제어 기법 - AWS Summit Seoul 2017Amazon Web Services Korea
 
이더리움 기초 스터디 (암호, 스토리지)
이더리움 기초 스터디 (암호, 스토리지)이더리움 기초 스터디 (암호, 스토리지)
이더리움 기초 스터디 (암호, 스토리지)Colin Chae
 
100.RED HAT SINGLE SIGN-ON
100.RED HAT SINGLE SIGN-ON100.RED HAT SINGLE SIGN-ON
100.RED HAT SINGLE SIGN-ONOpennaru, inc.
 
API Management Reference Architecture
API Management Reference ArchitectureAPI Management Reference Architecture
API Management Reference ArchitectureSeong-Bok Lee
 
성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3Amazon Web Services Korea
 
AWS Meetup 프리젠테이션.pdf
AWS Meetup 프리젠테이션.pdfAWS Meetup 프리젠테이션.pdf
AWS Meetup 프리젠테이션.pdfAlexLee226686
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 

Similaire à Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기 (20)

REST API 설계
REST API 설계REST API 설계
REST API 설계
 
게이트단의 보안
게이트단의 보안게이트단의 보안
게이트단의 보안
 
HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션
 
(131102) #fitalk get windows logon password in memory dump
(131102) #fitalk   get windows logon password in memory dump(131102) #fitalk   get windows logon password in memory dump
(131102) #fitalk get windows logon password in memory dump
 
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
 
web study 1day
web study 1dayweb study 1day
web study 1day
 
W3C HTML5 컨퍼런스 2020 - 웹 환경에서 블록체인 노드와 통신 및 신원인증 (DID)
W3C HTML5 컨퍼런스 2020 - 웹 환경에서 블록체인 노드와 통신 및 신원인증 (DID)W3C HTML5 컨퍼런스 2020 - 웹 환경에서 블록체인 노드와 통신 및 신원인증 (DID)
W3C HTML5 컨퍼런스 2020 - 웹 환경에서 블록체인 노드와 통신 및 신원인증 (DID)
 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introduction
 
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
 
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발
[IGC 2017] AWS 김필중 솔루션 아키텍트 - AWS 를 활용한 모바일 백엔드 개발
 
Trusted Pass 소개서 2016_08_22
Trusted Pass 소개서 2016_08_22Trusted Pass 소개서 2016_08_22
Trusted Pass 소개서 2016_08_22
 
Amazon Cognito를 활용한 모바일 인증 및 보안, 자원 접근 제어 기법 - AWS Summit Seoul 2017
Amazon Cognito를 활용한 모바일 인증 및 보안, 자원 접근 제어 기법 - AWS Summit Seoul 2017Amazon Cognito를 활용한 모바일 인증 및 보안, 자원 접근 제어 기법 - AWS Summit Seoul 2017
Amazon Cognito를 활용한 모바일 인증 및 보안, 자원 접근 제어 기법 - AWS Summit Seoul 2017
 
이더리움 기초 스터디 (암호, 스토리지)
이더리움 기초 스터디 (암호, 스토리지)이더리움 기초 스터디 (암호, 스토리지)
이더리움 기초 스터디 (암호, 스토리지)
 
100.RED HAT SINGLE SIGN-ON
100.RED HAT SINGLE SIGN-ON100.RED HAT SINGLE SIGN-ON
100.RED HAT SINGLE SIGN-ON
 
API Management Reference Architecture
API Management Reference ArchitectureAPI Management Reference Architecture
API Management Reference Architecture
 
성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3
 
HTTPS
HTTPSHTTPS
HTTPS
 
AWS Meetup 프리젠테이션.pdf
AWS Meetup 프리젠테이션.pdfAWS Meetup 프리젠테이션.pdf
AWS Meetup 프리젠테이션.pdf
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
RED HAT SINGLE SIGN-ON
RED HAT SINGLE SIGN-ONRED HAT SINGLE SIGN-ON
RED HAT SINGLE SIGN-ON
 

Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기

  • 1. Flask, Redis, Retrofit을 이용한 Android 로그인 서비스 구현하기 2015.01.15 이화앱센터 안드로이드팀장 한만종
  • 2. 로그인이란? Logging in or signing in or on is the process by which individual access to computer system is controlled by identifying and authenticating the user through the credentials presented by the user. Wikipedia
  • 3. Authentication? Authorization? 인증(authentication)은 자신이 누구라고 주장하는 사람을 확인하 는 절차이다. 권한부여(authorization)는 가고싶은 곳으로 가도록 혹은 원하는 정보를 얻도록 허용하는 과정이다. httpd.apache.org
  • 4. 로그인 구현 이렇게?? • “아이디는 사용자를 구분하는 누구나 알 수 있는 문자열.” • “비밀번호는 안보이게 자주 쓰이는 MD5 암호화해서 보내자.” • “DB에 저장된 아이디와 암호화된 비밀번호를 비교하면 되겠지.” • “HTTP POST 방식은 비밀스럽게 통신하는 방식이야.” • “로그인을 하고나면 로그아웃하기 전까지 로그인한 것으로 간주.”
  • 5. 로그인 구현 이렇게?? • “아이디는 사용자를 구분하는 누구나 알 수 있는 문자열.” • “비밀번호는 안보이게 자주 쓰이는 MD5 암호화해서 보내자.” • “DB에 저장된 아이디와 암호화된 비밀번호를 비교하면 되겠지.” • “HTTP POST 방식은 비밀스럽게 통신하는 방식이야.” • “로그인을 하고나면 로그아웃하기 전까지 로그인한 것으로 간주.”
  • 6. 안전한 로그인 구현 조건 • 비밀번호를 포함한 개인정보는 전송 시 모두 암호화해야 한다. • 또한, HTTP 보다는 HTTPS(SSL)를 이용해서 통신한다. • HTTP POST는 GET과 비교해 파라미터들이 위치하는 곳이 다를 뿐 보안 과는 무관하다. (패킷스니핑) • MD5, SHA-1, SHA-256, SHA-512 등의 해싱은 무결성 인증을 위해 사용 하는 것이지 암호화 알고리즘이 아니다. (MD5, SHA-1은 무력화되었다.) • 로그인 성공은 사용자 “인증”을 완료했다는 것이며, 해당하는 “접근 권한” 을 부여한다는 것이다. 그러나 이 상태(세션)는 적절한 시기에 만료시켜야 한다.
  • 7. 안전한 로그인 구현 예제 • REST API 지향 • RSA 암호화를 통해 개인정보를 암호화 • secure한 cookie를 이용해 RSA 개인키 보관 • token과 REDIS를 이용한 session 관리
  • 8. Flask, Redis, Retrofit • Python Flask: Django와 더불어 많이 사용되고 있는 Python 웹 프레임워크. Django는 Full-Stack 프레임워크인 반면에 Flask는 필요한 기능만 제공하는 Micro 프레임워크이다. • Redis: REmote DIctionary System의 약자로 메모리 기반의 Key/Value 자료구조 서버이다. • Retrofit: Square Inc.에서 개발한 Java용 네트워크 라이브러 리. Android 개발에서는 Volley 이후로 많이 쓰이고 있다.
  • 9. Flask? http://127.0.0.1:5000/ 으로 접속 시 “Safety Login” 표시
  • 12. redis-py Python에서 Redis를 연결하는 인터페이스 클라이언트
  • 13. 서버사이드 API 설계 POST /api/user/signup: 회원가입 *편의상 DB 대신 상수를 이용한 점 양해바랍니다.
  • 14. 서버사이드 API 설계 GET /api/user/login: RSA 공개키 발급
  • 15. 서버사이드 API 설계 PUT /api/user/login: 로그인
  • 16. 서버사이드 API 설계 GET /api/user/profile: 사용자 프로필 조회
  • 17. Android 클라이언트 접속 Retrofit을 이용한 서버사이드 API 인터페이스
  • 20. Android 클라이언트 접속 LoginActivity: 공개키를 이용한 RSA 암호화
  • 22. 안전한 로그인 구현 예제 지금까지 설명한 예제 소스코드를 다음에 공개했습니다. https://gitlab.com/ewhappcenter/safety-login.git
  • 23. 안전한 로그인 구현 예제 • 이 예제는 “예시”로서 간단한 구현체이다. 따라서 다음과 같은 문 제가 있으며, 실서비스에서 사용하는 것을 권장하지 않는다. 1. RSA 암호화를 해서 전송하더라도 중간자 공격에 취약하다. (SSL 연결 필요) 2. 전체 내용 자체를 RSA 암호화 하는 것만으로는 빠른 성능을 보장할 수 없다. (내용을 AES 암호화하고 AES 키를 RSA 암호화하는 방법을 추천)