MediaWiki용 SSO 확장 기능인 DiscourseSsoConsumer

DiscourseSsoConsumer는 MW 사이트가 Discourse Connect Provider API를 통해 사용자를 인증할 수 있게 해주는 MediaWiki 확장 프로그램입니다(즉, 사용자가 비밀번호를 Discourse에 입력하는 방식). 처음 출시된 지 1년 만에, 어제 2.0.0 버전이 출시되었습니다. 이 확장 프로그램이 더 쉽게 검색될 수 있도록(원래 SSO Provider 주제에 단 하나만 있던 고립된 게시물과 달리) 이제 이 확장 프로그램에 전용 주제를 개설할 때가 되었다고 생각했습니다: Use Discourse as an identity provider (SSO, DiscourseConnect) - #104 by mdoggydog

composer를 통해 설치할 수 있습니다. 설치 및 구성 방법은 README에 나와 있습니다.

5개의 좋아요

이것이 작동하려면 MediaWiki의 최소 버전이 있나요?

v2.0.0의 최소 MediaWiki 버전은 1.35입니다(아직 더 새로운 버전에서 테스트되지 않았습니다).

이 확장 기능은 원래 MW 1.31에서 개발/테스트되었습니다. v1.1.0과 v1.2.0은 MW 1.31에서 작동할 가능성이 높지만, 해당 버전에서 테스트되지는 않았습니다.

1개의 좋아요

@mdoggydog
MediaWiki 1.37을 사용 중이며, composer를 통해 이 확장 기능을 설정했습니다. 다음 오류가 발생합니다.

[YidklSqHVG68-iRmgGiwzwAAAFA] /view/Special:PluggableAuthLogin Error: Call to undefined method MediaWiki\Auth\AuthManager::singleton()

Backtrace:

from /var/www/vhosts/mywebsite.com/httpdocs/w/extensions/DiscourseSsoConsumer/src/DiscourseSsoConsumer.php(132)
#0 /var/www/vhosts/mywebsite.com/httpdocs/w/extensions/PluggableAuth/includes/PluggableAuthLogin.php(36): MediaWiki\Extension\DiscourseSsoConsumer\DiscourseSsoConsumer->authenticate()
#1 /var/www/vhosts/mywebsite.com/httpdocs/w/includes/specialpage/SpecialPage.php(647): PluggableAuthLogin->execute()
#2 /var/www/vhosts/mywebsite.com/httpdocs/w/includes/specialpage/SpecialPageFactory.php(1366): SpecialPage->run()
#3 /var/www/vhosts/mywebsite.com/httpdocs/w/includes/MediaWiki.php(314): MediaWiki\SpecialPage\SpecialPageFactory->executePath()
#4 /var/www/vhosts/mywebsite.com/httpdocs/w/includes/MediaWiki.php(930): MediaWiki->performRequest()
#5 /var/www/vhosts/mywebsite.com/httpdocs/w/includes/MediaWiki.php(564): MediaWiki->main()
#6 /var/www/vhosts/mywebsite.com/httpdocs/w/index.php(53): MediaWiki->run()
#7 /var/www/vhosts/mywebsite.com/httpdocs/w/index.php(46): wfIndexMain()
#8 {main}

AuthManager::singleton() 메서드가 1.35에서 비추천(deprecated) 처리되었고 1.37에서 제거된 것으로 보입니다.

지금 이 문제를 수정한 것 같습니다. 이 확장 기능의 현재 dev-main 버전을 시도해 보세요. (composer를 사용하여 설치할 때 버전 번호로 "dev-main"를 사용할 수 있습니다.) 제 환경에서는 1.35에서 정상적으로 작동하며, 1.37에서도 정상적으로 작동한다면 버그 수정 릴리스(예: 2.0.1)로 올바르게 태그하겠습니다.

1개의 좋아요

감사합니다, 잘 작동했어요 :+1:

멋지네요, 감사합니다. 2.0.1 버전이 출시되었습니다.

1개의 좋아요

저는 안드로이드 폰에 PWA 스탠드론으로 앱을 설치했습니다. 미디어위키(MediaWiki)에 로그인하면 디스커스(Discourse) PWA로 리다이렉트되어 열리고, 그 후 PWA 안에서 미디어위키 URL이 열리는데, 원래는 해당 웹 브라우저로 리다이렉트되어야 합니다. 디스커스가 로그인을 시작한 해당 웹 브라우저를 제대로 감지하고 리다이렉트하지 않는 것 같습니다. 이 문제는 미디어위키 확장 프로그램과는 무관하며, 디스커스가 리다이렉트/외부 URL을 처리하는 방식과 관련이 있습니다. 디스커스 프로그레시브 웹 앱(PWA)과 함께 로그인이 작동하도록 수정할 수 있는 설정이 있을까요?

죄송합니다. Discourse PWA에 대한 경험이 전혀 없습니다.

하지만 PWA와 SSO 제공자로서의 Discourse 간 상호작용에는 근본적인 결함이 있을 것 같습니다. 즉, SSO 컨슈머가 이미 Discourse에 로그인된 사용자를 다시 인증하려고 할 때, 클라이언트 브라우저에 Discourse 서버로 리다이렉트하라고 지시하게 되죠. 이때 Discourse 서버가 사용자의 기존 쿠키를 확인한 뒤 컨슈머로 리다이렉트하도록 기대하는 것입니다… 그리고 이 모든 리다이렉트가 사용자에게 최종 페이지 로드만 보이도록 브라우저 내에서 조용히 이루어지기를 기대하는 것이죠.

하지만 PWA는 특정 URL/도메인에 대해 호출되는 완전히 별개의 애플리케이션으로 Android에 등록되어 있잖아요? PWA가 원래의 브라우저로 리다이렉트할 때, 원래 브라우저는 이 새로운 링크가 원래 요청과 관련이 있다는 것을 어떻게 알 수 있을까요? 그리고 Android는 PWA가 실제로 사용자 입력을 필요로 할 때만 PWA를 사용자에게 표시해야 한다는 것을 어떻게 알 수 있을까요? :philosoraptor: