【问题标题】:How to lookup SSO user in Disqus?如何在 Disqus 中查找 SSO 用户?
【发布时间】:2014-12-01 05:51:06
【问题描述】:

我在 Disqus 中使用了 SSO,因此我的经过身份验证的用户可以自动发布到我的 Disqus 论坛,而无需单独的身份验证。但是,我找不到通过服务器端 API 调用将我的 SSO 用户列入白名单的方法。在任何与用户相关的 API 调用中似乎都无法识别我的 SSO 用户。

我尝试使用user=[userid]email=[email] 调用whitelists/add,传递了我设置SSO 用户时使用的确切用户ID 和电子邮件。用户 ID 不会返回任何错误,但它什么也不做。传递电子邮件会引发错误。

我尝试通过users/detail API 为我的 SSO 用户查找 Disqus 用户 ID 或用户名:

   user=myuserid (the same id used for SSO)
   email=myuser@email.com  (the same email used for SSO)
   user=remote:forumshortname-myuserid
   user:username=forumshortname-myuserid

运气不好。

/listUsers/users/detail 的API 调用根本没有列出我的sso 用户,因此我无法以这种方式检索他们的用户句柄。

令人沮丧的是,我可以在 UI 控制台中看到用户: https://disqus.com/api/sso/users/ 对于域(而不是论坛),所以我知道这个数据存在。但我找不到通过 API 访问它的方法。

有人有这个工作吗?

【问题讨论】:

    标签: single-sign-on disqus


    【解决方案1】:

    就 Disqus API 而言,SSO 用户的用户 ID 和用户名是由 Disqus 分配的,而不是站点分配的。它们在 Disqus 网络中是独一无二的,即使它们仅在您的站点本地。

    但是,如果您有自己的本地用户 ID,则可以反向查找 Disqus 用户名以使用 API。模式为{sso_slug}-{user_id_md5}

    假设您的 SSO 远程域 slug 是 example,您可以在 python 中这样检索 Disqus 用户名:

    import hashlib
    
    def get_disqus_username(user_id):
        m = hashlib.md5(user_id)
        hashed_id = m.hexdigest()
        return 'example-' + str(hashed_id)
    

    现在您可以像这样发出 API 请求:

    GET https://disqus.com/api/3.0/users/details.json?api_key=YOUR_PUBLIC_KEY&user=username:DISQUS_USERNAME

    【讨论】:

    • 我得到了白名单,可以使用通过您的呼叫检索到的用户 ID。两个注意事项: 1. 不能在用户查找中对用户参数进行 url-encode 或调用失败(尽管编码将是查询字符串参数的“正确”格式); 2. 白名单添加和删除的 api 文档说“用户”参数接受列表对象。不确定实际支持哪种列表语法,或者这是否是一个错误 - 我只能让一个用户 ID 在白名单调用中工作。
    • 1) 您应该能够对实际用户名进行 urlencode,但不能对 username: 部分进行 urlencode。 2) 支持多个值,但像这样:?user=...&user=...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多