# SSO 로그인이 작동하지 않는 것 같습니다

**URL:** https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691
**Category:** Bug
**Created:** [1월 23, 2022, 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:** 12
**Page:** 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: [1월 23, 2022, 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)

다음 정보를 따랐습니다:

> [@Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)](https://meta.discourse.org/t/discourseconnect-official-single-sign-on-for-discourse-sso/13045):
>
> [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true) is a core Discourse feature that allows you to configure “Single Sign-On (SSO)” to completely outsource all user registration and login from Discourse to another site. Offered to our [pro, business and enterprise hosting customers](https://discourse.org/pricing). information_source (Feb 2021) ‘[Discourse SSO](https://meta.discourse.org/t/13045?silent=true)’ is now ‘[DiscourseConnect](https://meta.discourse.org/t/13045?silent=true)’. If you are running an old version of Discourse, the settings below will be named sso\_... rather than discourse\_connect\_... The Problem Many sites wishing to integrate wit…

…그리고 최신 discourse-sso 자바스크립트 라이브러리를 사용하고 있습니다.

다음은 API Gateway 앞에 배치된 제 AWS Lambda입니다…

```plaintext
'use strict';

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

    var discourse_sso = require('discourse-sso');
    var sso = new discourse_sso(" ********************"); // secret hidden

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

    var payload = body.sso; // fetch from incoming request 
    var sig = body.sig; // fetch from incoming request 
    
    if(sso.validate(payload, sig)) {
        var nonce = sso.getNonce(payload);
        
        var userparams = {
            // Required, will throw exception otherwise 
            "nonce": nonce,
            "external_id": body.externalId,
            "email": body.email,
            // Optional 
            "username": body.username,
            "name": body.name
        };
        
        console.log("User: " + JSON.stringify(userparams));
        
        var q = sso.buildLoginString(userparams);

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

        // Redirect
        var response = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"q":q})
        };
        
        callback(null, response);
    } else {
        // What to do if doesn't validate?
        var responseError = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"error":"SSO Validation Error"})
        };

        callback(null, responseError);
    }
};

```

Discourse에서 로그인 버튼을 클릭하면 내 웹 앱이 호출되며, 사용자가 검증된 후 검증이 통과되면 다음을 호출합니다…

```plaintext
						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);
									}
								});
						}

```

무엇이 잘못되고 있는지 이해하는 데 도움이 되기를 바랍니다.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [1월 23, 2022, 12:25오후 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/2 "2022-01-23T12:25:14Z")

</div>

이 문제는 이번 달에 출시된 Chrome 97의 [버그](https://bugs.chromium.org/p/chromium/issues/detail?id=1286367)로 인해 발생했을 가능성이 가장 높습니다. Google이 수정 사항을 배포할 때까지 기다리는 동안, Discourse에 임시 해결책을 추가했습니다. 사이트를 최신 버전으로 업그레이드하면 문제가 해결될 것입니다.

---

<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: [1월 23, 2022, 12:59오후 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/3 "2022-01-23T12:59:54Z")

</div>

불행히도 호스팅 제공업체를 사용 중입니다. 다른 우회 방법이 있을까요? 일단 Discourse에서 SSO를 끄고, 문제가 수정되면 다시 켜는 방식이 괜찮을까요? 그렇게 하면 문제가 생길까요? 그 경우 사용자가 수동으로 계정을 생성해야 한다고 생각하는데, SSO를 다시 활성화했을 때 기존 시스템과 연결된 새 계정이 생성되는지 궁금합니다.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [1월 23, 2022, 1:31오후 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/4 "2022-01-23T13:31:13Z")

</div>

> [@jeffbonasso](#):
>
> 불행히도 호스팅 제공업체를 사용 중입니다. 다른 우회 방법이 있을까요?

아쉽게도 그렇지 않습니다. 저희의 관리형 [discourse.org](http://discourse.org) 호스팅은 최신 상태로 유지되고 있습니다. 어떤 제공업체를 사용 중이신지 공유해 주실 수 있을까요? 연락하여 업데이트에 대해 알려드릴 수 있을지도 모릅니다.

> [@jeffbonasso](#):
>
> 일단 Discourse에서 SSO를 끄고, 수정된 후에 다시 켜면 문제가 생기지 않을까요?

이메일 주소가 일치한다면 원활하게 작동해야 합니다. 처음에는 사용자가 “비밀번호 찾기” 버튼을 사용하여 비밀번호를 생성해야 합니다.

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [1월 23, 2022, 1:43오후 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/5 "2022-01-23T13:43:11Z")

</div>

@jeffbonasso 현재 저희 서비스를 이용하고 계시는 것 같아, 해결책을 찾아보겠습니다. 이 주제를 참조하여 제발 콘솔 패널을 통해 티켓을 생성해 주시겠어요?

> [@jeffbonasso](#):
>
> 일단 Discourse에서 SSO를 끄고, 수정이 완료되면 다시 켜면 문제가 생길까요?

아니요, 그렇게 하시면 됩니다. 다시 켜면 SSO가 이메일 주소를 인식할 것입니다.  
다만 기존 사용자들은 포럼에 직접 비밀번호가 없기 때문에 로그인하는 데 어려움을 겪을 수 있습니다.

@david 여쭙고 싶은 것이 있는데, 해당 수정 사항이 포함된 Discourse 커밋은 어느 것인가요?

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [1월 23, 2022, 2:54오후 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/6 "2022-01-23T14:54:32Z")

</div>

안정(stable) 브랜치의 경우, 수정 사항은 다음과 같습니다:

> <https://github.com/discourse/discourse/commit/909de9b36c86d98793127fadc54bc3e656949c1e>
>
> This is a workaround a behavior change in Chromium v97.
> The following text was …sent to the blink-dev mailing list:
> 
> \> This change broke a SingleSignOn login on the FOSS software Discourse. We have a flow like:
> \>
> \> 1. User visits forum.siteA.com, click login
> \> 2. Gets redirected to idp.siteB.com
> \> 3. Fills login details
> \> 4. Gets redirected to forum.siteA.com/session/sso\_login?parameters
> \> 5. Gets redirected to forum.siteA.com/homepage
> \>
> \> On step 4, the response includes a \`set-cookie\` header, with proper \`HttpOnly; SameSite=Lax; Secure \`and set. But if there is an active service worker, the login will fail as that cookie will be rejected by Chromium due to SameSite rules now.
> \>
> \> t=2971 \[st=258\] COOKIE\_INCLUSION\_STATUS
> \> --\> domain = "forum.siteA.com"
> \> --\> name = "\_t"
> \> --\> operation = "store"
> \> --\> path = "/"
> \> --\> status = "EXCLUDE\_SAMESITE\_LAX, DO\_NOT\_WARN"
> \>
> \> The service worker is a vanilla WorkboxJS service worker that intercepts all GETs with the "Network First" strategy.
> \>
> \> Disabling the service worker or using Firefox results in a successful login. There is no warning in either DevTools network tab nor the console that the cookie was rejected.
> \>
> \> Chrome 96: login works
> \> Chrome 97: login does not work
> \> Chrome 98: login does not work
> \>
> \> Is this expected behavior? Even if the request \`GET forum.siteA.com\` was initiated because of a redirect from a different domain, is it expected that Chrome will silently drop same site cookies from forum.siteA.com?
> 
> Co-authored-by: Rafael dos Santos Silva \<xfalcox@gmail.com\>

beta 및 tests-passed 브랜치에도 유사한 커밋이 있습니다.

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [1월 23, 2022, 3:16오후 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/7 "2022-01-23T15:16:00Z")

</div>

데이비드, 감사합니다.

해당 수정 사항은 이미 1월 13일부터 @jeffbonasso 님의 포럼에 존재하므로, 이것이 원인일 수는 없습니다(혹은 보고받은 오류들이 그 이전 날짜의 것인가요?).

---

<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: [1월 23, 2022, 4:48오후 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/8 "2022-01-23T16:48:34Z")

</div>

제가 만든 영상은 오늘 아침에 생성한 테스트 사용자로 촬영한 것이며, 고객들이 경험한 현상과 일치했습니다. 흥미롭게도 방금 Safari로 로그인해 보니 정상적으로 작동했습니다. 그런 다음 다시 Chrome을 시도해 보았는데, 이 역시 이제 정상 작동합니다. 방금 테스트한 Chrome 버전은 97.0.4692.99 (공식 빌드) (x86\_64)입니다. 문제가 있었던 고객에게 연락하여 여전히 문제가 있는지 확인해 보겠습니다.

---

<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: [1월 23, 2022, 5:27오후 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/9 "2022-01-23T17:27:51Z")

</div>

참고로… 고객이 Chrome 기반 브라우저인 Brave를 사용 중이라고 보고했습니다. 그는 여전히 작동하지 않는다고 했으며, 이후 Edge를 시도했는데 정상적으로 작동했습니다.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [1월 24, 2022, 4:47오전 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/10 "2022-01-24T04:47:32Z")

</div>

우리의 우회 방식은 [크롬 전용](https://github.com/discourse/discourse/commit/2d67315c320c07f04202db694766c371a9ba1612)이며, 여기서 네트워킹을 확장할 필요가 있을 수 있습니다 @Falco / @david

이러한 문제를 겪는 사용자들이 켤 수 있도록 서비스 워커를 비활성화하는 사이트 설정을 추가해야 한다고 생각합니다.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [1월 24, 2022, 4:51오전 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/11 "2022-01-24T04:51:07Z")

</div>

> [@sam](#):
>
> 우리의 우회 방법은 [크롬 전용](https://github.com/discourse/discourse/commit/2d67315c320c07f04202db694766c371a9ba1612)입니다. @Falco / @david 님, 여기서 네트워크를 확장해야 할 수도 있습니다.

이미 2022-01-19T03:00:00Z 이후 최신 크롬 버전에서 수정되었으므로, 이 수정 사항이 포함된 릴리스 97.0.4692.99에는 중대한 보안 수정 1건과 고위험 보안 수정 15건이 포함되어 있어 크롬 파생 브라우저도 곧 따라올 것으로 생각합니다.

> **[Stable Channel Update for Desktop](https://chromereleases.googleblog.com/2022/01/stable-channel-update-for-desktop_19.html)**
>
> The Stable channel has been updated to 97.0.4692.99 for Windows, Mac and Linux which will roll out over the coming days/weeks. Extended stab...

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [1월 24, 2022, 10:23오전 UTC](https://meta.discourse.org/t/sso-login-appears-to-have-stopped-working/215691/12 "2022-01-24T10:23:39Z")

</div>

> [@sam](#):
>
> 우리의 우회 방법은 [Chrome에만 해당](https://github.com/discourse/discourse/commit/2d67315c320c07f04202db694766c371a9ba1612)합니다.

우리는 [DiscourseConnect 수정 사항](https://github.com/discourse/discourse/commit/909de9b36c86d98793127fadc54bc3e656949c1e)을 모든 브라우저에 적용했습니다. 이후의 전역 수정 사항은 Chrome에 특화되어 있었지만, 사용자 에이전트 문자열 덕분에 Edge/Brave에도 적용되어야 합니다:

Edge: `'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.55'`

그리고 Brave는 기본적으로 [기본 Chrome 사용자 에이전트를 커스터마이즈하지 않는 것으로](https://community.brave.com/t/when-will-brave-get-its-own-user-agent/209343) 보입니다.
