소셜 미디어 공유 활성화

사용자가 다양한 소셜 네트워크에 컨텐츠를 공유할 수 있도록 해주는 자격 증명을 설정합니다.

사용자가 소셜 미디어 사이트에서 컨텐츠를 공유할 수 있도록 하려면 Livefyre의 소셜 공유 기능을 구현하고 이러한 사이트에 적합한 인증을 제공하는 OAuth 시스템을 만듭니다. 이 시스템을 통해 Livefyre는 소셜 미디어를 통해 컨텐츠를 공유하기로 선택할 때 사용자를 대신하여 작동합니다.

노트

서로 다른 공급자마다 OAuth 요구 사항이 다릅니다. OAuth 구현과 관련된 정보를 얻으려면 제공자와 문의하십시오.

필수 소셜 자격 증명

사용자 정의 사용자 ID 시스템을 사용하는 경우 사용자가 Livefyre 앱에서 Twitter, Facebook 또는 LinkedIn에 공유할 수 있도록 소셜 자격 증명을 제공해야 합니다.

노트

Janrain Engage를 사용하는 고객은 Engage Domain 및 Engage API 키만 제공해야 합니다.

다음 소셜 자격 증명을 입력하거나 업데이트하려면 Admin Console의 통합 설정 패널을 사용합니다.

필수 자격 증명:

  • ​FacebookClient ID 클라이언트 암호 OAuth 프록시 리디렉션
  • ​LinkedInAPI 키 API 암호
  • ​TwitterAccess 토큰 액세스 토큰 비밀 API 키 API 암호

Twitter

Twitter 자격 증명은 Twitter 앱 대시보드에서 사용할 수 있습니다. 다음 자격 증명을 찾으려면:

  • Twitter의 앱 개발 페이지를 앱 소유자로 열고 애플리케이션을 찾은 다음 제목을 클릭합니다.
  • "액세스 토큰"으로 스크롤하여 "액세스 토큰" 및 "액세스 토큰 비밀"의 값을 찾습니다.

다음을 수행해야 합니다.

  • twitter 앱에서 콜백 URL 필드에 값을 입력합니다. 이 필드는 단순 자리 표시자일 수 있지만 비워 둘 수 없습니다.
  • 응용 프로그램 유형을 readwrite 액세스 권한을 모두 갖도록 설정합니다.
  • twitter 앱 웹 사이트 URL이 Livefyre 코어 앱과 동일한 호스트 도메인에 있는지 확인합니다.
노트

twitter 컨텐츠를 표시하는 모든 애플리케이션은 디스플레이 요구 사항을 준수해야 합니다. 자세한 내용은 Twitter 표시 지침을 참조하십시오.

LinkedIn

linkedIn 자격 증명은 LinkedIn 응용 프로그램 API 키의 OAuth 키 섹션에서 사용할 수 있습니다.

  • LinkedIn 개발자 페이지 https://developer.linkedin.com/에서 계정에 로그인합니다.
  • 오른쪽 상단에서 자신의 이름을 가리키고 드롭다운 메뉴에서 API 키를 선택합니다.
  • 애플리케이션 제목을 클릭합니다.
  • OAuth 키 섹션에서 API 키 및 비밀 키 값 가져오기

Facebook

Facebook 자격 증명은 개발자 앱 페이지에서 사용할 수 있습니다.

  • Facebook의 개발자 앱 페이지를 앱 소유자로 열고 애플리케이션을 찾은 다음 제목을 클릭합니다.
  • 앱 ID 및 앱 암호 값을 선택합니다. 앱 비밀의 경우 표시 버튼을 클릭하여 표시할 수 있습니다.

facebook에 공유하려면 Facebook 요청을 가져오고 Facebook에 필요한 도메인 관행을 따르도록 리디렉션 페이지를 설정해야 합니다. facebook이 요청이 올바른 소스에서 왔는지를 확인할 수 있도록 페이지는 도메인에서 호스팅되어야 합니다.

Facebook 리디렉션

호스팅된 페이지에는 다음 코드가 포함되어야 합니다.

루비

facebook OAuth 리디렉션을 수행하는 데 Ruby 및 Rails를 사용하는 예입니다.

require "base64"

class Controller < ActionController::Base
   def base64url_decode(str)
      str.gsub! '-_', '+/'
      Base64.decode64(str.ljust(str.length+str.length%4, '='))
   end

   def index
      lfoauth = params[:lfoauth]
      if not lfoauth
         render :status => :forbidden, :text => 'Missing lfoauth.'
      end

      redirect = base64url_decode lfoauth

      match = /^(http:\/\/|https:\/\/)?([^\/?]+)/i.match(redirect)
      host = match[2]

         if not host.include? 'fyre.co'
      render :status => :forbidden, :text => 'Invalid host.'
         end

         sep = (redirect.include? '?') ? '&' : '?'
      params.delete :lfoauth

         rdir = redirect + sep + params.to_query
      redirect_to rdir
   end
end

파이톤

Python 및 Dango를 사용하여 Facebook OAuth 리디렉션을 수행하는 예입니다.

import base64, re
from django.views.decorators.http import require_GET
from django.http.response import HttpResponseRedirect, HttpResponseBadRequest

def base64url_decode(st):
    return base64.b64decode(re.sub("-_","+/", st).ljust(len(st)+len(st)%4, '='))

@require_GET
def handle_lfoauth(request):
    lfoauth = request.GET.get('lfoauth', None)
    import pdb; pdb.set_trace()
    if not lfoauth:
        return HttpResponseBadRequest('Missing lfoauth.')

    redirect = base64url_decode(lfoauth)

    match = re.match(r"^(http:\/\/|https:\/\/)?([^\/?]+)", redirect, re.IGNORECASE)
    host = match.group(2)

    # validate the destination to secure this proxy
    if not 'fyre.co' in host:
        return HttpResponseBadRequest('Invalid host.')

    # if params were included in the uri already, append with &, otherwise ?
    sep = '&' if '?' in redirect else '?'

    # remove lfoauth from query param
    dict_ = request.GET.copy()
    dict_.pop('lfoauth')

    # attach remaining param to redirect
    rdir = redirect + sep + dict_.urlencode()

    # this does the actual redirection
    return HttpResponseRedirect(rdir)

NodeJS

NodeJS 및 Sail/Express를 사용하여 Facebook OAuth 리디렉션을 수행하는 예입니다.

/*
 *
 */
var S = require('string'),
     querystring = require('querystring');

var base64UrlDecode = function(str) {
     var temp = S(str.replace('-_', '+/')).padRight(str.length+(str.length%4), '=').s
     return new Buffer(temp, 'base64').toString('utf8');
}

module.exports = {
  index: function(req, res) {
     var lfoauth = req.param('lfoauth');

     if (typeof lfoauth === 'undefined') {
        res.send(400, 'Missing lfoauth.');
     }

     var redirect = base64UrlDecode(lfoauth);

     var match = redirect.match(/^(http:\/\/|https:\/\/)?([^\/?]+)/i);
     var host = match[2]

     if (host.indexOf('fyre.co') <= -1) {
        res.send(400, 'Invalid host.');
     }

     var sep = redirect.indexOf('?') > -1 ? '&' : '?';

     delete req.query['lfoauth'];
     var rdir = redirect + sep + querystring.stringify(req.query);

     res.redirect(rdir);
  },

  _config: {}
};

Java

이것은 Java 및 Spring 컨트롤러를 사용하여 Facebook OAuth 리디렉션을 수행하는 예입니다.

/*
 *
 */
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.jboss.resteasy.spi.BadRequestException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.view.RedirectView;

@Controller
public class RedirectController {
    @RequestMapping("/fbredirect")
    public View facebook(@RequestParam Map<string,object> allRequestParams) {
        if (!allRequestParams.containsKey("lfoauth")) {
            throw new BadRequestException("Missing lfoauth.");
        }

        String redirect = base64UrlDecode((String) allRequestParams.get("lfoauth"));

        Pattern p = Pattern.compile("^(http:\\/\\/|https:\\/\\/)?([^\\/?]+)", Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(redirect);
        if (!m.find() || !m.group(2).contains("fyre.co")) {
            throw new BadRequestException("Invalid host.");
        }

        Map<string, object=""> params = new HashMap<string, object="">(allRequestParams);
        params.remove("lfoauth");
        String rdir = redirect + (redirect.contains("?") ? '&' : '?') + mapToQueryString(params);

        return new RedirectView(rdir);
    }

    private String base64UrlDecode(String str) {
        return new String(Base64.decodeBase64(StringUtils.rightPad(str.replaceAll("-_", "+/"), str.length()+(str.length()%4), '=')));
    }

    private String mapToQueryString(Map<string, object=""> map) {
        String queryparam = "";
        for (String key : map.keySet()) {
            if (map.get(key) instanceof Collection) {
                for (Object item : (Collection) map.get(key)) {
                    queryparam = queryparam.concat(String.format("%1$s=%2$s&", key, item.toString()));
                }
            } else {
                queryparam = queryparam.concat(String.format("%1$s=%2$s&", key, map.get(key).toString()));
            }
        }
        return StringUtils.removeEnd(queryparam, "&");
    }
}

PHP

<?php
/*
Purpose: Provide a landing page for the last step of successful oAuth
         that is on the correct (Facebook approved) domain.

Location: This file should be hosted on the same domain as your
          Facebook App's "site url".

Input Parameters:
    - (GET) lfoauth: This should be a url-safe base64-encoded URL that
      is the "real" final redirection URL. Livefyre sets this.

      For testing purposes, this can be set to a url-safe base64-encoded
      URL of your choosing, but the domain name must end in .fyre.co in
      order to be considered valid.

    - (GET) [all other parameters]: Any other parameters should simply
      be passed thru on the redirection URL. If the decoded URL from "lfoauth"
      includes querystring parameters, then the additional parameters included
      with the initial request should be appended with "&..."

Output: The response should indicate that the browser redirect (302) to the
        "real" URL which is encoded in the "lfoauth" parameter.

*/

function base64url_decode($data) {
  return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}

if (isset($_GET['lfoauth'])) {
    // Warning: If implemented with non-PHP, b64 may fail because we have
    // stripped padding (trailing ='s), to comply with Facebook parameters.
    // The decode needs to be non-strict in this sense.

    $rdir = base64url_decode($_GET['lfoauth']);

    // validate the destination to secure this proxy
    preg_match("/^(https?:\/\/)?([^\/?]+)/i", $rdir, $domain_only);
    $host = $domain_only[2];
    if (!strstr($host,'fyre.co')) {
        echo "Error - this redirection is not allowed! ".$host;
        exit;
    }

    // if params were included in the uri already, append with &, otherwise ?
    $sep = strstr($rdir,'?') ? '&' : '?';

    // don't include this in the params we add to the redirect url
    unset($_GET['lfoauth']);

    // assemble a new querystring from the remaining inbound GET params
    $rdir = $rdir.$sep.http_build_query($_GET);

    // this does the actual redirection, PHP's implementation is weird
    header('Location: '.$rdir);
}
?>

"게시물 위치" 공급자 구성

기본적으로 Facebook, LinkedIn 및 Twitter "게시물 위치" 단추가 Livefyre 코어 응용 프로그램에 표시됩니다. postToButtons 매개 변수를 사용하여 Livefyre 앱을 임베드할 때 표시할 공급자를 구성합니다.

var convConfig = {}; // Ignoring other options for this example
convConfig.postToButtons = ['tw', 'fb', 'li']; // Or any subset of these
fyre.conv.load(networkConfig, [convConfig], function() {});

postToButtons 는 다음 옵션 중 일부를 포함하는 배열입니다.

  • tw:Twitter
  • fb:Facebook
  • li:linkedIn

이 페이지에서는