Disqus 싱글 서명 열기 정보(SSO)

14127 단어 SSODisqus
블로그와 사이트 리뷰란에 사용되는 디스쿠스는 싱글 서명에 대응하기 때문에 이를 이용하면 표준적인 소셜 로그인(트위터와 페이스북) 외에 자신의 사이트에서 제공하는 로그인 정보를 이용해 리뷰를 할 수 있다.
Getting Started with Single Sign-On
공성단이 대응할 때 일본어 메시지를 발견하지 못했기 때문에 먼저 적었다.
실제 이미지

로그인하면 이렇게 됩니다.공성단 등록 아이콘과 이름을 표시할 수 있습니다.

Disqus 단일 서명 켜기 설정 단계
이렇게 하면 비교적 간단하다.
먼저 이메일로 보내주세요.
표준 상태에서 무효이기 때문에 메일 변경 설정을 보내주세요.
나는 영어에 자신이 없지만 이런 메일은 괜찮다.
I already use DISQUS my blog ( http://kojodan.jp/blog/ ).
Please enable SSO.
나는 이튿날 OK의 답장을 받았다.
표시할 페이지에 설정 삽입
Disqus 의견 표시줄 설정 페이지에 설정 정보(공용 키 및 해싱 ID 정보)를 추가합니다.
var disqus_config = function() {
    // The generated payload which authenticates users with Disqus
    this.page.remote_auth_s3 = "ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123ABCabc123 0000000000";
    this.page.api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
}
물론 여기는 사용자에 따라 달라지기 때문에 동적 출력을 할 수 있습니다.
디버깅용 도구도 준비했습니다.
https://disqus.com/api/sso/
로그인용 아이콘 준비
로그인 단추를 표시할 수 있습니다.

사이즈는 143입니다.×32px.

가장 적합한 포인트
사실 잘 안 돼서 그 부분만 적어놨어요.
mod_pagespeed 귀신의 문.
속도를 높이기 위해mod페이지speed를 사용했지만 모든 사용자의 로그인 정보를 캐시할 수 없기 때문에 이 문제를 피하기 위해서입니다.CGI 호출 설정을 통해 SSO 인증용 해시가 사라졌습니다.
(mod pagespeed를 사용하지 않은 웹 사이트가 외부 JS로 호출됨)
SSI로 불러내면 잘 되니까 지금은 SSI인 것 같지만 채택했다.어쨌든 행동은 매우 중요하다.
이런 느낌으로 부르고 있다.
<div class="well well-small" id="comments"><i class="fa fa-comments-o fa-2x"></i> <b style="font-size: 1.5em;">コメントをぜひ!</b></div>

<div id="disqus_announce" class="alert"><i class="fa fa-info-circle"></i> 攻城団のアカウントでログインすることができます <a href="#loginForm" role="button" data-toggle="modal" class="btn"><i class="fa fa-user"></i> ログイン</a></div>
<div id="disqus_thread"></div>
<!--#exec cgi="../SSI_Disqus_SSO.cgi" —>
죄송하지만 참고할 사람이 있을 수 있으니 코드도 붙여주세요.
SSI_Disqus_SSO.cgi
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw/:standard/;
use CGI::Session;
use JSON;
use MIME::Base64;
use Digest::SHA qw(hmac_sha1_hex);
require "function.pl"; # セッション復元の関数とかが定義されてます

# DISQUS シークレットキー
my $DISQUS_SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
my $DISQUS_PUBLIC_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

# ログインチェック(セッション情報の復元)
my $is_login = 1;
my $session = getSession();
my ($user_id, $email, $handle, $icon, $mypage);
if ($session) {
    $user_id = $session->param('user_id');
    $email   = $session->param('email');
    $handle  = $session->param('handle');
    $icon    = "http://kojodan.jp/profile_images/".$session->param('icon');
    $mypage  = "http://kojodan.jp/profile/".$user_id;
}
$is_login = 0 unless($user_id); 

# 可否フラグと差し替え用HTML
my $remote_auth_s3 = "___________Please_login_kojodan___________";
my $replace = "";
if ($is_login) {
    my %data = (
        "id" => $user_id,
        "username" => $handle,
        "email" => $email,
        "avatar" => $icon,
        "url" => $mypage
    );
    my $json = JSON->new->encode(\%data);
    my $message = encode_base64($json);
    my $timestamp = time();

    $message =~ s/[\r|\n]//g;
    my $hmac = hmac_sha1_hex("$message $timestamp", $DISQUS_SECRET_KEY);

    $remote_auth_s3 = "$message $hmac $timestamp";
    $remote_auth_s3 =~ s/[\r|\n]//g;

    $replace = '$("#disqus_announce").remove();';
}

# 出力するJavaScript
my $output = <<__JS__;

<script type="text/javascript">
$replace
var disqus_config = function() {
  // The generated payload which authenticates users with Disqus
  this.page.remote_auth_s3 = '$remote_auth_s3';
  this.page.api_key = '$DISQUS_PUBLIC_KEY';

  // This adds the custom login/logout functionality
    this.sso = {
          name:   "攻城団",
          button:  "http://static.kojodan.jp/images/DISQUS_login.png",
          icon:    "http://kojodan.jp/favicon.ico",
          url:     "http://kojodan.jp/login_DISQUS.html",
          logout:  "http://kojodan.jp/logout",
          width:   "500",
          height:  "300"
    };
}

/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'kojodanjp'; // required: replace example with your forum shortname

/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
    dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
    <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
    <a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>

__JS__

# 出力開始
print "Content-Type: text/html\n\n";
print $output;
exit;

좋은 웹페이지 즐겨찾기