# SSOログインが機能しなくなったようです

**URL:** <https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691>\
**Category:** Bug\
**Created:** [2022 年 1 月 23 日午後 12:13 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691 "2022-01-23T12:13:12Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![jeffbonasso](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jeffbonasso/32/247236_2.png) [@jeffbonasso](https://meta.discourse.org/u/jeffbonasso)\
**Post date:** [2022 年 1 月 23 日午後 12:13 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/1 "2022-01-23T12:13:12Z")

</div>

数年前から私のサイトでSSO連携を行っており、問題なく動作していました。

最近、ユーザーからログインしようとすると、サイトにリダイレクトされてログインし、その後Discourseに戻ってもログインが必要なまま表示されるという報告がありました。デバッグを試みましたが、問題は見つかりませんでした。ログインのためのリダイレクトが完了する際に、何かがうまくいっていないようです。

Discourseを見ると、ユーザーアカウントは作成されていますが、何らかの理由でログインされていません。

以下に、私が確認している状況を示す簡単なビデオを添付します。

[![](https://global.discourse-cdn.com/meta/original/4X/0/e/1/0e19b00a64df09aadf51579a1b4b6cc9b8283cab.jpeg "Discourse SSO Issue") ](https://vimeo.com/669098132/a2b927a065)

以下の情報に従いました。

> [@Discourse の公式シングルサインオン DiscourseConnect のセットアップ (sso)](https://meta.discourse.org/t/discourseconnect-official-single-sign-on-for-discourse-sso/13045):
>
> [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true) は、Discourse のコア機能の一つで、ユーザー登録とログインをすべて別のサイトに完全に委譲する「シングルサインオン（SSO）」を設定できるようにします。これは、[プロ、ビジネス、エンタープライズホスティングのお客様](https://discourse.org/pricing) に提供されています。 information_source （2021 年 2 月）「[Discourse SSO](https://meta.discourse.org/t/13045?silent=true)」は現在「[DiscourseConnect](https://meta.discourse.org/t/13045?silent=true)」となっています。古いバージョンの Discourse を実行している場合、以下の設定名は discourse\_connect\_... ではなく sso\_... となります。 問題点 Discourse サイトと連携しようとする多くのサイトでは、すべてのユーザー登録を別のサイトに保持したいと考えています。このような設定では、すべてのログイン操作をその異なるサイトに委譲する必要があります。 既存の認証と併用して SSO を使用したい場合はどうすればよいですか？ [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true) の目的は、Discourse の認証を置き換えることです。新しいプロバイダー…

…そして、最新のdiscourse-sso JavaScriptライブラリを使用しています。

これは私のAWS Lambdaで、API Gatewayによってフロントされています。

```plaintext
'use strict';

exports.handler = (event, context, callback) => {
    console.log(event);

    var discourse_sso = require('discourse-sso');
    var sso = new discourse_sso(" ********************"); // シークレットは非表示

    var body = JSON.parse(event.body);

    var payload = body.sso; // 受信リクエストから取得
    var sig = body.sig; // 受信リクエストから取得
    
    if(sso.validate(payload, sig)) {
        var nonce = sso.getNonce(payload);
        
        var userparams = {
            // 必須、それ以外は例外をスローします
            "nonce": nonce,
            "external_id": body.externalId,
            "email": body.email,
            // オプション
            "username": body.username,
            "name": body.name
        };
        
        console.log("User: " + JSON.stringify(userparams));
        
        var q = sso.buildLoginString(userparams);

        console.log("q: " + q);

        // リダイレクト
        var response = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"q":q})
        };
        
        callback(null, response);
    } else {
        // 検証に失敗した場合どうするか？
        var responseError = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"error":"SSO Validation Error"})
        };

        callback(null, responseError);
    }
};

```

Discourseからログインボタンがクリックされると、私のウェブアプリが呼び出され、ユーザーが検証され、検証が成功すると以下のコードが呼び出されます。

```javascript
						if (state.get(["appState", "urlParams", "sso"]) && state.get(["appState", "urlParams", "sig"])) {
							var userMetadata = getUserMetadata(result);

							var body = {
								sso: state.get(["appState", "urlParams", "sso"]),
								sig: state.get(["appState", "urlParams", "sig"]),
								externalId: keyPrefix,
								email: userMetadata.email,
								name: userMetadata.name,
								username: username
							};

							request
								.post('https:// **********.execute-api.us-east-1.amazonaws.com/prod/discourse-sso')
								.send(body)
								.end(function (err, res) {
									if (err || !res.ok) {
										alert(err.message);
									} else {
window.location.replace("https://forum.miralouaero.com/session/sso_login?" + res.body.q);
									}
								});
						}

```

何が起こっているのか理解する上で、どのような助けでもいただけると幸いです。

---

_[View the full topic](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691)._
