Microsoft MVP성태의 닷넷 이야기
닷넷: 2201. C# - Facebook 연동 / 사용자 탈퇴 처리 방법 [링크 복사], [링크+제목 복사],
조회: 10696
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 7개 있습니다.)
.NET Framework: 193. 페이스북(Facebook) 계정으로 로그인하는 C# 웹 사이트 제작
; https://www.sysnet.pe.kr/2/0/953

.NET Framework: 198. 윈도우 응용 프로그램에 Facebook 로그인 연동
; https://www.sysnet.pe.kr/2/0/970

.NET Framework: 245. ASP.NET 서버 측 코드에서 페이스북 계정 연동하는 방법
; https://www.sysnet.pe.kr/2/0/1143

개발 환경 구성: 313. Nuget Facebook 라이브러리를 이용해 ASP.NET 웹 폼과 로그인 연동하는 방법
; https://www.sysnet.pe.kr/2/0/11182

개발 환경 구성: 436. 페이스북 HTTPS 인증을 localhost에서 테스트하는 방법
; https://www.sysnet.pe.kr/2/0/11855

개발 환경 구성: 482. Facebook OAuth 처리 시 상태 정보 전달 방법과 "유효한 OAuth 리디렉션 URI" 설정 규칙
; https://www.sysnet.pe.kr/2/0/12189

닷넷: 2201. C# - Facebook 연동 / 사용자 탈퇴 처리 방법
; https://www.sysnet.pe.kr/2/0/13526




C# - Facebook 연동 / 사용자 탈퇴 처리 방법

제 웹 사이트처럼 페이스북 연동을 해서 사용자 가입을 하면, 탈퇴는 어떻게 할 수 있을까요? ^^ 이런 경우, 사용자는 페이스북 계정 관리 페이지에 접속해,

페이스북 - 내가 사용 중인 어플리케이션 설정 페이지
; https://www.facebook.com/settings?tab=applications

자신이 가입한 서비스 목록에서 선택해 탈퇴를 할 수 있습니다. 그런 경우, 페이스북 측은 당연히 해당 계정이 서비스 이용을 해제했다는 알림을 해야만 그 서비스 측에서는 해당 계정에 대한 정보를 삭제할 수 있습니다.

이를 위해 제공하는 설정이 바로 "승인 취소" - "콜백 URL 승인 취소" 링크입니다.

facebook_user_withdraw_2.png

Visual Studio의 경우라면, 개발 과정에서는 Dev Tunnels를 이용해 로컬 PC에 응용 프로그램을 실행한 다음 "콜백 URL 승인 취소"에 "https://[생략].asse.devtunnels.ms/" 경로를 입력해 두는 식으로 테스트할 수 있습니다.

실제로 해보면, 사용자가 서비스 이용 중지를 하는 경우 페이스북 측에서는 아래와 같은 형식의 요청이 날아옵니다.

Accept: */*
Host: localhost:5153
User-Agent: facebookexternalua
Accept-Encoding: deflate, gzip
Content-Type: application/x-www-form-urlencoded
Content-Length: 163

signed_request=okeW...[생략]...MjR9

signed_request의 형식은 facebook에서 공개하고 있어,

Signed Requests
; https://developers.facebook.com/docs/reference/login/signed-request/
; https://developers.facebook.com/docs/games/build/legacy-web-games/get-started/login#parsingsr

저대로 디코딩을 할 수 있지만, ^^ 당연히 여러분이 사용 중인 언어에 해당하는 예제가 이미 웹에는 있을 것입니다.

How to get the facebook signed request in c#
; https://stackoverflow.com/questions/19046207/how-to-get-the-facebook-signed-request-in-c-sharp

string appSecret = "[...app_secret...]";
string signedRequest = Request.Form["signed_request"];

string data = DecodeSignedRequest(signedRequest, appSecret);

public static string DecodeSignedRequest(string signed_request, string app_secret)
{
    try
    {
        if (signed_request.Contains("."))
        {
            string[] split = signed_request.Split('.');

            string signatureRaw = FixBase64String(split[0]);
            string dataRaw = FixBase64String(split[1]);

            // the decoded signature
            byte[] signature = Convert.FromBase64String(signatureRaw);

            byte[] dataBuffer = Convert.FromBase64String(dataRaw);

            // JSON object
            string data = Encoding.UTF8.GetString(dataBuffer);

            byte[] appSecretBytes = Encoding.UTF8.GetBytes(app_secret);
            System.Security.Cryptography.HMAC hmac = new System.Security.Cryptography.HMACSHA256(appSecretBytes);
            byte[] expectedHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(split[1]));
            if (expectedHash.SequenceEqual(signature))
            {
                return data;
            }
        }
    }
    catch
    {
        // error
    }
    return "";
}

private static string FixBase64String(string str)
{
    while (str.Length % 4 != 0)
    {
        str = str.PadRight(str.Length + 1, '=');
    }
    return str.Replace("-", "+").Replace("_", "/");
}

위의 과정을 거쳐 signed_request를 해독하면 이런 결과가 나옵니다.

{"user_id":"520333434958903","algorithm":"HMAC-SHA256","issued_at":1705146378}

바로 저 "user_id"를 기준으로 서비스에 등록된 사용자 데이터를 삭제할 수 있습니다.




참고로, 사용자 계정 해제에 이와 유사한 메뉴가 하나 더 있습니다.

facebook_user_withdraw_1.png

위의 화면처럼, "사용자 데이터 삭제"이기 때문에 "데이터 삭제 콜백 URL"로 선택하고 주소를 등록하면 그쪽으로 콜백이 있을 것 같은데, 실제로 테스트를 해보면 아무런 요청도 없습니다.

공식 문서에 보면,

데이터 삭제 요청 콜백
; https://developers.facebook.com/docs/development/create-an-app/app-dashboard/data-deletion-callback/

데이터 삭제 콜백은 앱 사용자가 앱을 삭제하거나 Facebook 계정 설정에서 앱과 공유하는 데이터(예: 이메일 주소)에 대한 액세스 권한을 삭제할 때마다 호출됩니다.


아마도, 스마트폰의 앱과 연동하는 유형에서 해당 앱을 삭제하는 것만으로 콜백을 전달하는 걸로 보입니다. 나중에 이런 앱을 만들어 테스트해 보면 알 수 있겠지요. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 1/14/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 181  [182]  183  184  185  186  187  188  189  190  191  192  193  194  195  ...
NoWriterDateCnt.TitleFile(s)
431정성태1/8/200721550Windows: 12. 비스타는 안전한 윈도우인가? [2]
430정성태1/7/200727473웹: 6. IIS 7 마이그레이션 정리 - Sysnet
427정성태12/30/200618201Team Foundation Server: 14. VS.NET IDE에 통합된 TFS Annotate [1]
425정성태12/29/200622127Windows: 11. Vista IIS 7(Integrated mode)에서의 ASP.NET F5 디버깅 방법
424정성태12/29/200620223기타: 16. 첫걸음 [2]
426정성태12/30/200618627    답변글 기타: 16.1. 예외 발생
420정성태12/27/200623335Windows: 10. Internet Explorer 7.0 호환성 백서 (Word 문서, 1.92MB) [7]파일 다운로드1
419정성태12/25/200625029Windows: 9. VS.NET 2005 원격 디버깅 구성
418정성태12/25/200633086웹: 5. IIS 7에서 클라이언트 측 인증서 사용 시 주의점 [2]
417정성태12/24/200625603Windows: 8. VS.NET 2005에서의 웹 애플리케이션 디버깅 설정
416정성태1/31/200725599오류 유형: 23. MSI 설치 시 로그 파일 생성하는 레지스트리 설정 [3]
415정성태12/31/200629376개발 환경 구성: 20. 인증서 오류 체크 목록
413정성태12/20/200626313VC++: 26. volatile 키워드 [1]파일 다운로드1
412정성태12/17/200630108오류 유형: 22. VS.NET 2005 SP1 설치 도중 오류 [9]
411정성태12/16/200619136오류 유형: 21. TFS SP1 설치 관련 오류 (2) - KB919156 패치 이후 TFS 접근 문제
410정성태12/16/200620483오류 유형: 20. TFS SP1 설치 관련 오류 (1) - KB919156 패치
408정성태12/10/200622655Windows: 7. USB 드라이브 내용 암호화
407정성태12/10/200620267오류 유형: 19. Vista 에서의 VS.NET 2005 로 개발한 어셈블리에 대한 서명 확인 오류
406정성태12/10/200625027Windows: 6. IE 7 검색 공급자 - 영한 사전
403정성태12/6/200632147Windows: 5. Vista 와 웹 인증 등록 서비스의 문제 [5]
402정성태12/11/200623129Windows: 4. Vista 설치 후기 [1]
409정성태12/11/200627156    답변글 Windows: 4.1. Vista 설치 후기 - 두 번째 이야기 [3]
396정성태2/13/200729858오류 유형: 18. "Automatic Updates" 서비스 CPU 100% 점유 현상
393정성태11/8/200619385오류 유형: 17. Unable to start debugging - The binding handle is invalid.
371정성태10/23/200618540오류 유형: 16. STS Communication failed.
370정성태11/12/200622475.NET Framework: 75. Windows CardSpace 이야기 (이 글의 내용은 재작성되어질 예정입니다.)
... 181  [182]  183  184  185  186  187  188  189  190  191  192  193  194  195  ...