Microsoft MVP성태의 닷넷 이야기
닷넷: 2201. C# - Facebook 연동 / 사용자 탈퇴 처리 방법 [링크 복사], [링크+제목 복사],
조회: 10817
글쓴 사람
정성태 (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

비밀번호

댓글 작성자
 




... 151  152  153  154  155  156  157  158  159  [160]  161  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1048정성태5/27/201132238개발 환경 구성: 123. Apache 소스를 윈도우 환경에서 빌드하기
1047정성태5/27/201126101.NET Framework: 217. Firebird ALinq Provider - 날짜 필드에 대한 낙관적 동시성 쿼리 오류
1046정성태5/26/201130762.NET Framework: 216. 라이선스까지도 뛰어넘는 .NET Profiler [5]
1045정성태5/24/201131848.NET Framework: 215. 닷넷 System.ComponentModel.LicenseManager를 이용한 라이선스 적용 [1]파일 다운로드1
1044정성태5/24/201132403오류 유형: 122. zlib 빌드 오류 - inflate.obj : error LNK2001: unresolved external symbol _inflate_fast
1043정성태5/24/201131377.NET Framework: 214. 무료 Linq Provider - DbLinq를 이용한 Firebird 접근파일 다운로드1
1042정성태5/23/201137700개발 환경 구성: 122. PHP 소스를 윈도우 환경에서 빌드하기
1041정성태5/22/201128611.NET Framework: 213. Linq To SQL - ALinq Provider를 이용하여 Firebird 사용파일 다운로드1
1040정성태5/21/201138936개발 환경 구성: 121. .NET 개발자가 처음 설치해 본 Apache + PHP [2]
1039정성태5/17/201131633.NET Framework: 212. Firebird 데이터베이스와 ADO.NET [2]파일 다운로드1
1038정성태5/16/201133609개발 환경 구성: 120. .NET 프로그래머에게도 유용한 Firebird 무료 데이터베이스 [2]
1037정성태5/11/201128430개발 환경 구성: 119. Visual Studio Professional 이하 버전에서도 TFS의 정적 코드 분석 정책 연동이 가능할까? [3]
1036정성태5/7/201194246오류 유형: 121. Access DB에 대한 32bit/64bit OLE DB Provider 관련 오류 [11]
1035정성태5/7/201128996오류 유형: 120. File cannot be opened. Ensure it is a valid Data Link file.
1034정성태5/2/201126054.NET Framework: 211. 파일 잠금 없이 .NET 어셈블리의 버전을 구하는 방법 [2]파일 다운로드1
1033정성태5/1/201131756웹: 19. IIS Express - appcmd.exe를 이용한 applicationHost.config 변경 [2]
1032정성태5/1/201128393웹: 18. IIS Express를 NT 서비스로 변경
1031정성태4/30/201129548웹: 17. IIS Express - "IIS Installed Versions Manager Interface"의 IIISExpressProcessUtility 구하는 방법 [1]파일 다운로드1
1030정성태4/30/201151810개발 환경 구성: 118. IIS Express - localhost 이외의 호스트 이름으로 접근하는 방법 [4]파일 다운로드1
1029정성태4/28/201140950개발 환경 구성: 117. XCopy에서 파일/디렉터리 확인 질문 없애기 [2]
1028정성태4/27/201138341오류 유형: 119. Visual Studio 2010 SP1 설치 후 Windows Phone 개발자 도구로 인한 재설치 문제 [3]
1027정성태4/25/201127515디버깅 기술: 40. 상황별 GetFunctionPointer 반환값 정리 - x86파일 다운로드1
1026정성태4/25/201145810디버깅 기술: 39. DebugDiag 1.1을 사용한 덤프 분석 [7]
1025정성태4/24/201127864개발 환경 구성: 116. IIS 7 관리자 - Active Directory Certification Authority로부터 SSL 사이트 인증서 받는 방법 [2]
1024정성태4/22/201129194오류 유형: 118. Windows 2008 서버에서 Event Viewer / PowerShell 실행 시 비정상 종료되는 문제 [1]
1023정성태4/20/201130076.NET Framework: 210. Windbg 환경에서 확인해 본 .NET 메서드 JIT 컴파일 전과 후 [1]
... 151  152  153  154  155  156  157  158  159  [160]  161  162  163  164  165  ...