본문 바로가기

프로그래밍/Android 짜투리 지식

[android] SSO와 Service

SSO를 구현하면서 아주 조금(0.1%)의 OAuth와 Service(AIDL)을 건드려봤다.


AIDL - Android Interface Definition Language


Android Application간의 통신수단

Application을 Server와 Clinet로 굳이 나누었을 때, 


Server는 aidl을 정의하고 Service를 등록하고 구동한다.

Client는 구동중인 Service를 찾아서 binding 한다.


그렇게 바인딩 된 객체를 통해 aidl에 정의된 함수를 Client가 호출하고 Server가 반환 할 수 있다.



SSO - Sing Sign On https://ko.wikipedia.org/wiki/%ED%86%B5%ED%95%A9_%EC%9D%B8%EC%A6%9D


통합인증. 단일 로그인.


OAuth 2.0 - https://ko.wikipedia.org/wiki/OAuth


Facebook과 같은 서비스에서 특정 정보 또는 권한(예를들어 API)을 제한적(Permission)으로 허용하는 인증 키(AuthToken)값을 발급하여 OAuth 사용자(개발자)로 하여금 해당 정보 또는 권한을 허용하도록 하는 프로토콜

이 AuthToken이 있다면 최초 발급시의 토큰 기한(expire time)이내라면 다른 인증 없이 해당 기능에 대한 접근이 통과된다.


물론 최초 인증시에는 해당 서비스에 로그인 해야하고, 로그인이 되어 있다면 사용자(최종 사용자. 컨텐츠 소비자)는 이 접근을 직접 허용해야한다.


OAuth 에는 인증(authentication)가 허가(authorization)가 있다.

인증 : 이러한 접근이 의도되고, 옳은 접근인지 확인

허가 : 접근에 대한 권한을 부여





테스트 한 내용은 SSO를 위한 Library가 있고, 3개의 Client가 되는 Application이 있다.


각각의 Client는 SSO Library를 내장하고 있다.

SSO Library는 Service를 등록하고(없다면) 실행되고 있는 Service (AIDL로 연결된)를 바인딩한다.

SSO의 핵심요소는 어떤 Client든 SSO를 보장해야 한다는 것이다. 그런데, SSOLibrary는 독립적으로 존재해서는 안되고, SDK로 Client에 내장되어 배포 되어야 한다는 제약조건이 있다.

SSO Service는 어디에든 존재하지만 이 서비스는 유일해야한다는 제약이 가장 컸다.


Client A가 Service를 구동시켜서 SSO에 관련된 정보를 관리하고 있다고 하면, Client A가 살아있을때는 아무 문제가 없다. 하지만 Client A가 삭제되면 문제는 발생한다. 물론 Client B또는 C,D,E..등드이 실행되면 즉시 Service는 활성화 되지만 Client A가 가지고 있던 정보는 사라진다.


해결해야 할 문제는 Client에 종속받지 않는 데이터 저장소 인데 기존의 SharedPreference 말고, 서버(Local or Online)가 있어야 하는가. 아니면 Android의 AccountManager를 사용해야 하는가 하는것이 문제로 남는다.


여기서 AccountManager를 사용한다면 AIDL - Service를 구현할 필요도 사라진다. 하지만 AccountManager를 사용하려면 동일한 서명이 필요하고, 동일한 ApplicationID가 필요하다.


어디에 종속되지 않고(물리적공간 제외) 존재하는 SSO core를 구현하는 방법을 고민중..


'프로그래밍 > Android 짜투리 지식' 카테고리의 다른 글

[android] Android studio xml rendering e  (0) 2016.08.02
[android] onTouchEvent  (0) 2016.03.07
[android] Behavior  (3) 2016.01.21
[android] 인상적인 View  (0) 2015.06.23
[android] attr/actionbarSize  (0) 2015.03.24