slipp.net은 페이스북에 앱을 등록하고 페이스북 OAuth 인증을 통해 로그인하도록 구현되어 있다. 따라서 페이스북으로 로그인한 사용자는 페이스북의 자신의 담벼락에 자신이 쓴 글이나 답변 글을 전송할 수 있는 기능을 추가했다. 이 기능을 개발한 후 내가 쓴 글을 공유하기 위해 이 기능을 유용하게 사용해왔다. 그런데 최근에 다른 사용자들이 글이 전송되지 않는다는 이야기를 들었다. 그래서 원인을 찾아보니 인증 실패가 원인이었다. 원인을 찾기 위해 몇 시간 삽질했는데 나와 같은 경험을 하는 개발자가 있을 것으로 생각해 공유한다. 에러 메시지는 다음과 같았다.
Received Facebook error response of type OAuthException: (#200) The user hasn't authorized the application to perform this action
이와 관련해 온라인 검색을 해보니 무수히 많은 자료가 있다. 앱을 통해 담벼락에 글을 쓸 수 있도록 하려면 먼저 페이스북 앱에서 글쓰기가 가능하도록 다음과 같이 설정해야 한다.
- 먼저 페이스북 앱으로 접근한다.
- 앱 수정 > 허가로 이동한다.
- Extended Permissions에 publish_stream 권한을 추가한다.
- 위와 같이 설정한 후 OAuth 인증 url에 다음과 같이 scope인자에 publish_stream 권한을 전달한다.
- OAuth 인증에서 위와 같이 scope을 추가하면 최초 앱에 접근할 때 다음과 같이 글쓰기 권한을 허가할 것인지를 물어본다.
위 과정을 보면 정말 쉽게 해결할 수 있다. 그런데 spring social security 사용하다 보니까 위 OAuth 인증 URL 찾는데 시간이 한참 걸렸다. 만약 이미 서비스를 운영하는 중이라면 로그아웃 후에 다시 로그인을 하면 위 화면이 뜨면서 허가할 것인지 나타난다.
위 전체 과정은 http://thoughts.citynaksha.com/2011/04/post-on-facebook-page-as-page-not-as.html 문서에서 더 자세하게 참고할 수 있다. 이 이외에도 다양한 action에 대해 권한 설정하는 것이 가능하다.
페이스북에서 사용할 수 있는 permission은 https://developers.facebook.com/docs/reference/login/extended-permissions/ 문서를 참고하면 알 수 있다.