7/22/2017

[CODING] MediaWiki 에 Google Login 연동하기(Interoperability GoogleLogin)

MediaWiki 내 Google Login 연동과정 중 있었던 내용을 정리할겸 포스팅 작성합니다.
구글 로그인 연동을 하게되면 로그인 과정이 간단해질뿐만 아니라 SSL 미 적용 시 보안적으로도 이점이 있습니다.

MediaWIki는 기본적으로 JS단 난독화 없이 평문으로 전송되기 때문에 SSL이 적용되있지 않다면 스니핑을 통해 쉽게 패스워드 획득이 가능합니다.


다만 타 로그인 사용 시 해당 서비스의 API를 이용하기 때문에 직접적인 패스워드가 노출되지는 않습니다. 물론 양쪽 다 SSL이 적용되어있지 않으면 궁극적으론 취약합니다. (이런 경우 수두룩하게 봄)

다만 난이도가 아주 쉬움에서 보통으로 올라갈뿐이죠. 아무튼 조금이라도 튼튼하고, 편리하게 쓰기 위한 로그인 연동 과정을 시작해보도록 하죠.

Google API 설정하기

구글 API에서 Google+ 관련 항목을 사용하시면 OAuth를 통해 로그인 연동이 가능해집니다. 가장 첫 단추로 google api 쪽 세팅이 먼저 필요합니다.

아래 링크 참고하셔서 콘솔로 들어가주신 후 사용자 인증정보(OAuth) 생성으로 접근합니다.

https://console.developers.google.com/


다음 웹 어플리케이션(Web Application) 으로 생성합니다.
(MediaWiki 는 웹 기반이기 떄문, 혹시라도 다른 플랫폼에서 연동하시는거면 맞춰서 진행 필요)


완료되면 인증키와 비밀키 2가지를 리턴해줍니다. 잘 메모(그냥 창을 냅둬도 되고, 나중에 볼 수 있으니 그냥 닫아도 되고, 외우셔도 되고..) 해둡니다.

Install GoogleLogin Extension

OAuth API를 생성해두었으니 MediaWiki에 Extension을 달아 Google Login을 진행해봅시다. 아래 링크(공식 Extension)를 통해서 자신의 MediaWIki 버전에 맞는 Extension을 받아줍니다. 링크타고 들어가서 버전 선택하시면 다운로드 가능하죠.

https://www.mediawiki.org/wiki/Special:ExtensionDistributor/GoogleLogin

다운로드가 완료되면 Wiki 디렉토리 내 Extension에 풀어서 넣어줍니다.


Edit LocalSettings.php

거의 다 완료되었습니다. 이제 Extension 사용을 위해 LocalSettings.php에서 Extension을 로드하고 관련 데이터를 작성합니다.
#> vim LocalSettings.php
require_once 'autoload.php'; # 각각 개인의 autoload.php의 위치
require_once "$IP/extensions/GoogleLogin/GoogleLogin.php"; #Extension 내 GoogleLogin.php의 위치
$wgGLAppId = 'Your ClientID';   #아까 OAuth를 통해 만든 ID
$wgGLSecret = 'Your SecretKey'; #아까 OAuth를 통해 만든 Secret Key
작성 후 update를 통해 DB 반영까지 진행합니다.
#> php update.php

물론 마지막에도 이슈가 있어 직접 DB 쿼리로 처리했네요. 아래 Troubleshotting에서..

TroubleShotting

물론 진행 중 여러가지 문제가 발생할 수 있습니다. 저에게서 나온 몇가지 사항부터 기록해봅니다.

1. update.php 없이 진행하기(DB쿼리 편집 및 실행)

제 테스트환경에선 terminal 에서 php 실행이 불가능하여 직접 DB에 입력하는 방법을 사용하였습니다.
GoogleLogin Extension 하위 경로에서 includes > sql 로 들어갑니다.

#> cd [your_wiki_dir]/extensions/GoogleLogin/includes/sql
#> ls

user_google_user.sql  user_google_user_user_id_index.sql

각각 sql 파일을 열어보시면..
--
-- extension Google Login SQL schema
--
CREATE TABLE /*$wgDBprefix*/user_google_user (
  user_googleid DECIMAL(25,0) unsigned NOT NULL PRIMARY KEY,
  user_id int(10) unsigned NOT NULL,
  KEY(user_id)
) /*$wgDBTableOptions*/;
와 같은 형태입니다.

우리는 php 를 통해 실행하지 않기 때문에 몇가지 사항만 수정해주면 됩니다.
--
-- extension Google Login SQL schema
--
use yourdb; --일단 db부터 골라야겠지요. 


CREATE TABLE user_google_user (  --아 명칭이 가물가물하네요.. 각 테이블 앞에붙는 명시자가 있는 경우 붙여서 작성합니다.
  user_googleid DECIMAL(25,0) unsigned NOT NULL PRIMARY KEY,
  user_id int(10) unsigned NOT NULL,
  KEY(user_id)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; -- 혹시 db 세팅이 있다면 같이 넣어주고요.

sql 명령으로 db 쿼리를 실행합니다.
(http://www.hahwul.com/2016/06/debian-linux-terminal-sql-execute-sql.html)

#> mysql -u [yourid] -p < user_google_user.sql
user_google_user_user_id_index.sql 이 친구도 유사하게 편집 후 실행합니다.

#> mysql -u [yourid] -p < user_google_user_user_id_index.sql

2. Google에서 Redirect URL이 잘못되었다고 나타난경우

이 경우 로그인 페이지에서 로그인 후 넘어가는 URL을 Redirect 허용 URL에 넣어줍니다. 요청 중 URL이 바뀌어버리는 경우가 있어 추가로 몇개 더 등록해주시면 편합니다.

Reference

https://www.mediawiki.org/wiki/Manual:Upgrading/ko
https://zetawiki.com/wiki/%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4_GoogleLogin_%ED%99%95%EC%9E%A5%EA%B8%B0%EB%8A%A5_%EC%84%A4%EC%B9%98
http://www.hahwul.com/2016/06/debian-linux-terminal-sql-execute-sql.html


HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

0 개의 댓글:

Post a Comment