# SSO问题：缺少SSO或SIG参数

**URL:** <https://meta.discourse.org/t/sso-issue-missing-sso-or-sig-parameters/328082>\
**Category:** SSO\
**Created:** [2024年九月25日 15:03 UTC](https://meta.discourse.org/t/sso-issue-missing-sso-or-sig-parameters/328082 "2024-09-25T15:03:45Z")\
**Posts on this page:** 1\
**Showing post:** 4

<div class="post-metadata">

**Author:** ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)\
**Post date:** [2024年九月26日 00:15 UTC](https://meta.discourse.org/t/sso-issue-missing-sso-or-sig-parameters/328082/4 "2024-09-26T00:15:57Z")

</div>

> [@John\_Smith](#):
>
> 这实际上不是我的技能范围

看起来配置不正确。也许可以退一步看看。我现在本地设置没有配置SSO提供商站点，但这或许能帮到你一部分。

在 Discourse 中，请确保配置了以下设置：

 ![20240925_16h42m40s_grim](https://global.discourse-cdn.com/meta/original/4X/3/b/a/3ba229ca9870e4d5e21b3be2353dd5a2f72f91a3.png)

`discourse connect url` 设置应为处理你已发布代码的URL。

`discourse connect secret` 设置应为一个至少10个字符的字符串。请注意，你已将7个字符的字符串 `keyhere` 硬编码到你已发布的代码中。我假设你在运行代码时会更改该值。将其设置为你在 Discourse 上输入的值。

现在注销你的 Discourse 站点。打开浏览器的 Web 检查器到其网络选项卡。点击 Discourse 上的“登录”按钮。你应该会看到类似下面截图的前两个请求：

 ![20240925_16h52m35s_grim](https://global.discourse-cdn.com/meta/original/4X/d/7/3/d7359723f35964a12b0b266aeb2952487eb1ac15.png)

第一个请求将是 `http://forum.example.com/session/sso?return_path=%2F`

下一个请求应该是 `https://example.com/?sso=<sso_payload_sent_from_discourse>&sig=<sso_signature>`

`example.com` 和 `forum.example.com` 应设置为你正在使用的实际域名。

如果一切配置正确，我预计这会将 `sso` 和 `sig` 参数的值分配给你在此处设置的变量：

```php
$sso = $_GET['sso'];
$sig = $_GET['sig'];

```

如果是我，我可能会注释掉其余代码，只确认你能接收到 payload 并将其分配给变量。

启用 [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true) 后，你可以通过访问 `/u/admin-login` 路由重新登录你的 Discourse 站点。如果你可以访问 Discourse 站点的 Rails 控制台，你也可以通过在 Rails 控制台中禁用 [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true) 来重新登录：

```plaintext
SiteSetting.enable_discourse_connect = false

```

你已发布代码的其余部分可能存在错误。例如，我认为在生成预期的 sig 之前，你需要对 `sso` 参数的值调用 `urldecode`。看看 [WP Discourse](https://github.com/discourse/wp-discourse) 插件是如何处理的：

> <https://github.com/discourse/wp-discourse/blob/main/lib/sso-provider/sso.php#L41-L48>

上面函数中的 `$payload` 只是 `sso` 查询参数的值，在经过此处的清理后：[wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub](https://github.com/discourse/wp-discourse/blob/main/lib/sso-provider/discourse-sso.php#L137%E3%80%82)

---

_[View the full topic](https://meta.discourse.org/t/sso-issue-missing-sso-or-sig-parameters/328082)._
