모바일 장치에서 클라우드 컴퓨팅 활용 방안 – 3) 안전하게 외부의 사용자 인증 정보를 활용 하기

(임베디드 월드 2012년 6월호에 기고 했던 원고를 협의 하에 포스팅합니다. 원고의 저작권은 임베디드 월드(https://www.embeddedworld.co.kr/) 에 있습니다. 원문 주소 : https://www.embeddedworld.co.kr/atl/view.asp?a_id=5627 )

모바일 장치에서 클라우드 컴퓨팅 활용 방안 – 3) 안전하게 외부의 사용자 인증 정보를 활용 하기

: 애플리케이션 개발사에서 사용자의 비밀번호 같은 정보를 직접 관리하지 않고, 이미 갖고 있는 페이스북이나 윈도우 라이브 아이디등을 활용하여 서비스를 이용할 수 있도록 클라우드 플랫폼 서비스를 이용하는 방법을 알아봅니다.

일간지를 보다 보면 온라인 서비스 업체에서 저장하고 있던 사용자 정보가 해킹 등을 통해서 외부에 유출 되는 사고 들을 심심치 않게 접할 수 있다. 만약에 본인이 사용하는 아이디와 비밀 번호를 인증이 필요한 복수의 서비스에 동일하게 등록 해두고 쓴다면, 이처럼 개인 정보가 유출이 되었을 때 등록한 다른 사이트에도 악용될 수 있기 때문에 문제가 심각해질 수 있다.

사용자 정보 유출이 발생하는 원인은 개인 정보를 저장 시에 암호화 하지 않아서 생기는 경우도 있지만, 암호화를 한다고 하더라도 이것이 외부 해킹에 대해서 완벽히 안전하다고 볼 수는 없다.

일단 안전하게 사용자 정보를 관리하는 측면에서 보면 가능한 한 사용자의 아이디나 비밀번호와 같은 식별 정보를 최소화 하는 것이다. 예를 들면 사용자의 비밀번호가 서비스 업체의 DB에 저장되지 않고, 다른 외부에서 사용하는 인증 서비스를 통해서 인증을 하고 서비스를 제공하는 것이다.

이렇게 하면 사용자 입장에서는 외부의 인증 서비스를 통해서 특정 사이트를 이용할 수 있으면 해당 사이트가 보안과 관련해서 신뢰도가 높지 않다고 하더라도 자신의 개인 정보를 노출하지 않고 이용할 수 있게 된다. 서비스 업체의 DB에는 사용자가 서비스와 관련해서 저장하는 정보만을 기록 되는 것이다.

서비스의 관리자 입장에서도 사용자 비밀번호 같은 보관 시에 암호화가 필요한 개인정보를 직접 관리하지 않아도 됨으로써, 보안과 관련한 부담을 일정 부분 덜 수 있게 된다. 또한 사용자가 비밀번호를 잊어버려서 요청 하면 이를 변경하기 위한 처리를 관리 입장에서 할 필요가 없어지게 된다.

이것을 가상 시나리오를 통해서 다시 한번 살펴보자. 아래와 같은 여행 정보 웹 사이트에 사용자가 방문을 했다고 가정을 하면 create account 를 통해서 이 사이트에 대한 아이디와 비밀번호를 이용하는 계정을 만들고 사용할 수도 있겠지만, 외부 사용자 인증을 할 수 있도록 구성 되어 있다면 사용자 입장에서는 추가적인 계정을 생성하지 않아도 된다.

로그인을 하기 위해서 login 버튼을 누르면, 이 웹 사이트에서 활용할 수 있도록 연결 된 외부 사용자 인증 서비스들이 나오게 된다. 현재 이 웹사이트에는 마이크로소프트의 라이브 아이디, 회사 내의 계정 정보, 페이스 북, 구글 그리고 야후 의 계정 정보를 사용할 수 있도록 되어 있는 것을 볼 수 있다.

clip_image002

여행 사이트에 외부 인증을 적용한 샘플 사이트 (좌)

clip_image004

제공하는 외부 인증 서비스 (우)

이 인증 서비스들 중에 페이스북을 선택 했다면 아래처럼 페이스북에서 제공하는 사용자 인증 페이지로 연결을 해서 사용자에 대한 인증을 하고, 이용하고자 하는 웹 사이트에 관련 정보를 전달해서 로그인 할 수 있다.

clip_image006

페이스북 인증을 진행하고 있는 화면(좌)

clip_image008

외부 인증을 통해서 웹 사이트에 로그인 (우)

그렇다면 모바일 장치에서 사용하는 애플리케이션이나 웹 환경에서 이런 처리를 가능케 하기 위해서 어떤 처리가 필요한지 알아보자.

일반적으로 이와 같은 외부 인증을 통해서 서비스가 가능하게 만들기 위해서는 웹 사이트에서 외부 인증 서비스와의 표준적인 통신 방법을 통해서 로그인을 할 수 있도록 개발을 하면 된다. 하지만, 외부 인증 시스템이 위의 예제에서와 같이 여러 개일 경우에 각 인증 시스템 마다 인증 방식에 대한 차이가 있을 수 있고, 이것들에 대해서 각기 개발하고 이후에 유지 보수 하는 것이 쉽지 않을 수 있다.

퍼블릭 클라우드 서비스인 윈도우 애저에서는 빌딩 블록 서비스 형태로 외부 인증 서비스를 자신의 서비스에 쉽게 붙여서 사용할 수 있는 액세스 제어 서비스 (Access Control Service, ACS) 를 제공하고 있다. 이것을 이용하면 외부 인증 서비스 별로 차이 점에 대한 큰 고민 없이 유사한 방식으로 인증 처리를 진행할 수 있다.

그러면 윈도우 애저에서 운영되는 ACS를 활용해서 브라우저나 모바일 장치에서 애플리케이션 등의 특정 서비스에 외부 인증 서비스를 통해서 로그인 하는 방식이 어떤지 살펴보자.

clip_image010

(1) 모바일 장치에서 사용자가 웹 애플리케이션 서비스 쪽으로 리소스를 요청하면 (2) 인증이 되지 않았으므로 ACS로 돌려보내게 된다. (3) ACS 에 인증을 위해 접근하면 (4) ACS는 인증 토큰을 받을 수 있는 외부 인증 서비스들을 선택할 수 있는 페이지(Home-realm Discovery)를 보여주고 (5) 외부 인증 서비스 공급자(아이덴티티프로바이더, IDP)로 돌려보낸다.

(6) IDP 중에 하나를 선택해서 로그인을 시도하면 (7) 해당 IDP를 통해서 인증을 진행해서, 인증이 성공되면 토큰이 발행되고 (8) 다시 ACS 로 돌려보내진다. (9) 이때 ACS에 IDP로부터 받은 토큰을 보내고 (10) ACS에서는 해당 IDP 토큰의 유효성을 확인하고, IDP로부터 어떤 정보를 가져올 것인지 규칙 엔진을 실행한 후에 ACS 토큰을 발행해서 (11) ACS로 돌려보낸다.

(12) 이후 ACS 토큰을 최초에 리소스를 요청했던 이와 같은 형태로 인증을 할 수 있는 서비스(릴레잉 파티, 신뢰당사자 그룹)로 보내고, (13) 애플리케이션에서는 이 ACS 토큰의 유효성을 확인해서 (14) 요청한 리소스에 대응하는 값을 반환해 준다.

이를 데이터 흐름을 시각적으로 표현 하면 아래와 같은 형태로 구성해 볼 수 있으며, 주황색 팔각형이 IDP 토큰이고 녹색 오각형이 ACS 토큰이다.

clip_image012

소셜 서비스 프로바이더 인증 정보를 통한 애플리케이션 인증 절차

이전에 두 차례 진행된 연재에서는 예제를 구성할 때 윈도우 폰을 모바일 장치로 이용했는데, 이번에는 윈도우 8(베타)이 설치된 모바일 장치를 사용해서 이것이 ACS를 이용하도록 하겠다. 실습을 해보기 위해서는 먼저 윈도우 8 Consumer Preview 이상의 버전이 설치된 환경과 개발 툴인 Visual Studio 11 그리고 Windows Azure Toolkit for Windows 8이 추가로 설치되어 있어야 한다. 그리고 ACS 테스트를 위해서는 윈도우 애저를 사용할 수 있는 계정을 갖고 있어야 한다.

가장 먼저 할 일은 윈도우 애저에서 외부 서비스 인증을 활용하기 위한 액세스 제어 서비스(ACS)를 구성하는 일이다. 이를 위해서 먼저 윈도우 애저 관리 포털에서 ACS가 사용할 네임스페이스를 만들어 준다.

clip_image014

윈도우 애저 관리 포털에서 ACS 의 네임스페이스를 생성

그리고 ACS 설정 페이지에서 ID 공급자 중에 어떤 외부 인증을 사용할 것인지를 확인한다. 현재 ACS에서 기본적으로 페이스북, 구글, 윈도우 라이브 아이디, 야후의 인증 서비스를 사용할 수 있고, 이외에 ACS에서 사용할 수 있는 표준화된 인증 방식을 사용하는 인증 서비스 제공자의 경우는 필요 시에 추가해서 사용할 수 있다.

clip_image016

ACS의 기본 ID 공급자들을 보고, 필요 시에 추가할 수 있는 화면

그리고 신뢰 당사자 응용 프로그램 메뉴에서 ACS를 사용할 응용 프로그램 추가하고 관리할 수 있다. 이번 예제에서는 툴킷에 포함된 ‘WAToolkit for Windows 8 sample’ 이라는 응용 프로그램을 사용할 예정이다.

clip_image018

ACS를 사용할 신뢰 당사자 응용 프로그램(릴레잉 파티)를 추가 및 관리하는 화면

규칙그룹은 외부 인증 서비스에서 어떤 정보들을 가져 올 것인지에 대해서 설정 하는 부분이며, 이번 예제에서는 각 인증 서비스 제공자로부터 이메일 주소와 사용자 이름 정도의 내용을 가져와서 대상 애플리케이션에서 활용할 수 있도록 구성되어 있다.

clip_image020

ID 공급자의 어떤 정보를 가져올 것인지 설정하는 규칙 그룹 편집 화면

이제 응용 프로그램에서 ACS에 접속하고 사용할 수 있도록 대칭 키 값을 확인해서, 이것을 클라이언트 애플리케이션에 넣어서 ACS를 사용할 수 있도록 구성한다.

clip_image022

ACS의 해당 서비스에 대한 대칭키 값 확인

대칭 키를 애플리케이션에 입력해서 인증 시에 활용하는 방법은 다양할 것이며, 툴킷의 샘플의 경우 설치 시에 애플리케이션에서 사용할 수 있게 입력해주는 스크립트가 포함되어 있다.

clip_image024

Windows Azure Toolkit for Windows 8 설치 시 ACS 대칭 키를 입력

이제 윈도우 애저 및 클라이언트에서 ACS 설정이 모두 끝났고 실행해서 테스트를 해보는 과정만 남았다. 툴킷의 ACS 샘플은 두 개의 솔루션으로 나눠져 있으며, 하나는 윈도우 애저 용으로 개발된 클라우드 솔루션인 ModernCloudIdentity이다. 이 솔루션을 실행해 주면 윈도우 애저 상의 ACS와 연동 되어서, 외부 인증 테스트를 할 수 있는 웹 서비스를 제공한다.

clip_image026

ModernCloudIdentity 솔루션이 구동 후에 나타나는 브라우저 화면

정상적으로 클라우드 애플리케이션이 구동이 된 이후에는 다른 하나의 솔루션으로 윈도우 8에서 구동되는 ACSMetroClient가 있다. 이 솔루션을 실행시키면 로그 인 버튼이 있고, 이 버튼을 클릭하면 ACS에서 설정된 외부 인증 정보 서비스 목록을 확인할 수 있다. 이 중 하나를 선택해서 인증을 되는 것을 출력되는 메시지 등을 통해서 확인할 수 있다.

clip_image028

ACS를 사용할 클라이언트로서 구동되는 윈도우 8 메트로 스타일 앱

clip_image030

로그인을 위해서 외부 인증 서비스 제공자 중에 하나를 선택하는 화면

clip_image032

윈도우 라이브 라이디를 이용해서 인증을 시도

clip_image034

성공적으로 인증이 된 것을 메시지를 통해서 확인

지금까지 총 세 번의 연재를 통해서 모바일 장치에서 클라우드를 활용해서 푸시 알림, 저장소 그리고 외부 인증 처리를 하는 것에 대한 내용을 다루었다. 예제로 설명한 모바일 장치는 윈도우 폰이나 윈도우 8이었지만, 안드로이드나 iOS를 운영체제로 사용하는 다른 모바일 장치에서도 유사한 형태로 활용이 가능하다.

아무쪼록 클라우드의 장점인 자유로운 확장성과 비용 효율성 그리고 높은 안정성을 활용해서 모바일 장치에서 구동 되는 서비스가 많아졌으면 하는 바램이다.

이 연재와 관련한 문의가 있다면, 필자의 블로그(https://blogs.msdn.com/jspark) 를 통해서 문의해 주길 바란다.