取消SSO不工作

2024-06-26 13:52:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python和Django登录到discus。管理员已确认帐户已启用SSO,他们的调试工具确认我的登录令牌正确。。但是我的配置似乎被忽略了。。登录按钮不会被替换,等等。。在

下面是JS discus实现的一个示例。。在

var disqus_shortname = 'outfit418alpha';
var disqus_config = function() {
        this.page.remote_auth_s3 = 'eyJ1c2VybmFtZSI6ICJkaXNxdXMiLCAiaWQiOiA1OTEsICJlbWFpbCI6ICJkaXNxdXNAb3V0Zml0NDE4LmNvbSJ9 577222fb9c6d5e03238fb70d29ac1104469e1e85 1390561160';
        this.page.api_key = 'jkNAtL6ivcDNjDBbl9RFMy3prUSypfTto1IRlrsaMFXqFauGQlQQHAwOo8R8bRlG';
        this.sso = {
            url: '/profile/login/',
            logout: '/profile/logout/',
        }
    }

    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();

有人能告诉我我哪里出错了吗?在


Tags: djangovar管理员page帐户thisprofiledocument
2条回答

为了在Django网站上集成discus-SSO,我们在GitHub上完成了几个代码实现。我们的要求很简单,我们使用了以下工作流程:

在取消.py公司名称:

import base64
import hashlib
import hmac
import json as simplejson
import time

DISQUS_SECRET_KEY = 'SECRET KEY FROM API'
DISQUS_PUBLIC_KEY = 'PUBLIC KEY FROM API'


def get_disqus_sso(user_id=None, username=None, email=None):
    if user_id:
        user_data = {
            'id': user_id,
            'username': username,
            'email': email,
        }
    else:
        user_data = {}
    # create a JSON packet of our data attributes
    data = simplejson.dumps(user_data)
    # encode the data to base64
    message = base64.b64encode(data)
    # generate a timestamp for signing the message
    timestamp = int(time.time())
    # generate our hmac signature
    sig = hmac.HMAC(DISQUS_SECRET_KEY,
                    '%s %s' % (message, timestamp), hashlib.sha1).hexdigest()

# return a script tag to insert the sso message
    return """<script type="text/javascript">
    var disqus_config = function() {
        this.page.remote_auth_s3 = "%(message)s %(sig)s %(timestamp)s";
        this.page.api_key = "%(pub_key)s";
        this.sso = {
        name:   "Screener Talks",
        button:  "http://www.screener.in/static/img/social/disqus.png",
        url:     "http://www.screener.in/register/",
        logout:  "http://www.screener.in/logout/",
        };
    }
    </script>""" % dict(
        message=message,
        timestamp=timestamp,
        sig=sig,
        pub_key=DISQUS_PUBLIC_KEY,
    )

在视图.py公司名称:

^{pr2}$

在模板.html公司名称:

    <div id="disqus_thread"></div>
    <script type="text/javascript">
        var disqus_shortname = 'SITESHORTNAME'; 
        var disqus_identifier = 'POST ID';
        var disqus_title = 'POST TITLE';
        /* * * DON'T EDIT BELOW THIS LINE * * */
        (function() {
            var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
            dsq.src = '//' + 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">comments powered by <span class="logo-disqus">Disqus</span></a>
    {{ disqus_sso|safe }}

大部分代码来自GitHub上的各种代码片段,但不幸的是,我找不到确切的源代码。这可能会有帮助:https://github.com/jumoconnect/openjumo/blob/master/jumodjango/lib/disqus.py

目前还没有足够的信息来找出问题所在,因为到目前为止,所有可用的信息都能查出来。以下是我们需要解决的问题:

  1. 除了“SSO登录”选项之外,您是否看到所有登录按钮?在
  2. 如何生成hmac字符串?您是否在使用公钥的相应密钥,以及在remote_auth_s3字符串末尾签名时使用的相同时间戳?在
  3. 您是否正在API应用程序设置中作为受信任域输入的域进行测试?在
  4. 您看到在threadDetails.json请求中发送的有效负载了吗?检查方法如下:http://help.disqus.com/customer/portal/articles/1148640

我会根据这些更新答案。在

我确实有一些建议来解决我看到的一些其他问题。在

首先,看起来您只是缺少了SSO所需的一些配置变量。这些都是可能的:

this.sso = {
          name:   "SampleNews",
          button:  "http://example.com/images/samplenews.gif",
          icon:     "http://example.com/favicon.png",
          url:        "http://example.com/login/",
          logout:  "http://example.com/logout/",
          width:   "800",
          height:  "400"
    };

其中,nameurl,和{}至少应该使用,所以请确保包括这些内容。在

第二,不要在this.sso配置中使用相对url。因为这些url是在iframe中使用的(技术上discus.com网站),一些浏览器会将url解析为http://disqus.com/profile/login/,这显然不符合预期。在

相关问题 更多 >