Extension:OAuth
Stav rozšíření: stabilní |
|
|---|---|
| Implementace | Identita uživatele, Uživatelská práva, API |
| Popis | Umožněte uživatelům bezpečně autorizovat jinou aplikaci ("spotřebitele") k používání API MediaWiki jejich jménem. |
| Autoři | Aaron Schulz, Chris Steipp, Brad Jorsch, Robert Vogel, Dejan Savuljesku |
| Nejnovější verze | 1.1.0 (continuous updates) |
| Zásady kompatibility | Vydání snímků současně s MediaWiki. Hlavní vývojová větev není zpětně kompatibilní. |
| Změny v databázi | Ano |
| Virtuální doména | virtual-oauth |
|
|
|
|
|
|
|
| Licence | GNU General Public License 2.0 nebo novější |
| Stáhnout | |
| Nápověda | Nápověda:OAuth |
| Přeložte rozšíření OAuth, používá-li lokalizaci z translatewiki.net | |
| Vagrant role | oauth |
| Problémy | Otevřené úkoly · Nahlásit chybu |
Rozšíření OAuth implementuje server OAuth v MediaWiki, který podporuje jak verze protokolu OAuth 1.0a, tak OAuth 2.0. Umožňuje vývojářům třetích stran bezpečně vyvíjet aplikace ("spotřebitele"), kterým mohou uživatelé udělit omezenou sadu oprávnění ("udělení"), aby aplikace mohla používat MediaWiki API jménem uživatele.
Požadavky
- OAuth se spoléhá na mezipaměť objektů pro dočasné tokeny a relace. Toto by mělo fungovat, pokud je nastavení konfigurace mezipaměti v pořádku. (Starší verze explicitně vyžadovaly Memcached.)
- V současné době jsou podporovány pouze backendy databází MySQL a SQLite.
- Pokud je instalace MediaWiki soukromá (tj. uživatelé se musí pro přístup ke čtení přihlásit), bude nutné přidat Special:OAuth na bílý seznam.
Instalace
- Stáhněte soubor/y a vložte je do adresáře pojmenovaného
OAuthve vaší složceextensions/.
Vývojáři a přispěvatelé kódu by si místo toho měli nainstalovat rozšíření from Git pomocí:cd extensions/ git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/OAuth
- Při instalaci z Gitu spusťte Composer pro instalaci závislostí PHP zadáním
composer install --no-devv adresáři rozšíření. (Vyskytnou-li se nějaké komplikace, podívejte se na T173141.) - Na konec vašeho souboru LocalSettings.php přidejte následující kód:
wfLoadExtension( 'OAuth' );
- Spusťte aktualizační skript, který automaticky provede všechny nezbytné databázové změny, jaké rozšíření vyžaduje.
- Nakonfigurujte obecné parametry podle potřeby.
- OAuth2 nebude povolen, pokud ponecháte všechna nastavení na výchozích hodnotách.
- Nakonfigurujte uživatelská práva jejich zařazením do příslušných skupin v
$wgGroupPermissions.
Dokončeno – Přejděte na stránku Special:Version vaší wiki a zkontrolujte, zda bylo rozšíření úspěšně nainstalováno.
Instalace Vagrant:
- Pokud používáte Vagrant, instalujte s těmito parametry
vagrant roles enable oauth --provision
Chcete-li přiřadit oprávnění nějaké skupině, například sysopům, přidejte do LocalSettings.php následující řádek:
$wgGroupPermissions['sysop']['mwoauthproposeconsumer'] = true;
Mapování virtuálních domén databáze
Since MediaWiki 1.45, it's recommended to configure database virtual domains mapping for OAuth, see this patch.
$wgMWOAuthCentralWiki a virtuální domény jsou oddělená nastavení.
Chcete-li nastavit mapování virtuálních domén pomocí OAuth, použijte:
$wgMWOAuthCentralWiki = '<central-wiki>';
$wgVirtualDomainsMapping['virtual-oauth'] = [ 'db' => '<oauth-db>' ];
Konfigurace
Parametry
| Název proměnné | Výchozí hodnota | Popis |
|---|---|---|
$wgMWOAuthCentralWiki
|
false
|
ID wiki pro správu OAuth. Na wiki farmách má smysl nastavit toto na wiki, která funguje jako portál, je určena pro správu nebo se pouze stará o přihlášení/autentizaci. Lze jej však nastavit na jakoukoli wiki ve farmě. Pro weby s jednou wiki nebo farmy, kde každá wiki spravuje uživatele samostatně, by měla být hodnota ponechána na false.
|
$wgMWOAuthSharedUserIDs
|
false
|
(zastaralé) Použijte místo toho $wgMWOAuthSharedUserSource
Zda jsou sdílená globální ID uživatelů uložena v tabulkách OAuth.
Na wiki farmách s centrálním ověřovacím systémem (s celočíselnými uživatelskými ID), které sdílejí jednu wiki pro správu OAuth, musí být toto nastaveno na hodnotu true.
Pokud mají wikiny centrální ověřovací systém, ale mají vlastní správu OAuth, pak se může jednat o |
$wgMWOAuthSharedUserSource
|
null
|
Poskytovatel Central ID při sdílení přihlašovacích údajů OAuth přes wiki farmu
Zdroj sdílených uživatelských ID, pokud je povolen.
Pokud je k dispozici CentralIdLookup, jedná se o $providerId pro CentralIdLookup::factory().
Obecně by null bylo to, co chcete, abyste použili výchozího poskytovatele.
Pokud daná třída není k dispozici nebo pojmenovaný poskytovatel není nalezen, je to předáno háčkům OAuthGetUserNamesFromCentralIds, OAuthGetLocalUserFromCentralId, OAuthGetCentralIdFromLocalUser, OAuthGetCentralIdFromUserName.
Toto nemá žádný vliv, pokud je $wgMWOAuthSharedUserIDs nastaveno na hodnotu |
$wgMWOAuthRequestExpirationAge
|
2 592 000 (30 dnů)
|
Sekundy, po kterých je nečinný požadavek na nového spotřebitele označen jako "vypršené". |
$wgMWOAuthSecureTokenTransfer
|
true
|
Vyžadovat SSL/TLS pro vrácení tajných kódů spotřebitele a uživatele. Toto je vyžadováno standardem RFC 5849, ale pokud chce wiki používat OAuth, ale nepodporuje SSL, tato možnost tuto konfiguraci umožňuje. Toto by mělo být nastaveno na hodnotu true pro většinu produkčních nastavení.
|
$wgOAuthSecretKey
|
$wgSecretKey
|
Tajný konfigurační řetězec (náhodný 32bitový řetězec vygenerovaný pomocí "base64_encode(random_bytes(32))") používaný k uložení tajného prvku uloženého v databázi pomocí HMAC za účelem vytvoření sdílených tajných prvků pro spotřebitele. To poskytuje určitou ochranu před útočníkem, který by četl hodnoty z tabulky spotřebitelů (útočník by také potřeboval $wgOAuthSecretKey k vygenerování platných tajných klíčů) a určitou ochranu před potenciálními slabinami v generování tajných klíčů. Pokud je tento řetězec ohrožen, web by měl vygenerovat nový řetězec $wgOAuthSecretKey, který zneplatní autorizace spotřebitelů, které používají podpisy HMAC/sdílené tajné klíče místo veřejných/soukromých klíčů. Spotřebitelé mohou regenerovat svůj nový sdílený tajný klíč pomocí možnosti "Obnovit tajný klíč na novou hodnotu" v části Special:MWOAuthConsumerRegistration/update. Pokud je null, hodnota je nastavena na $wgSecretKey. |
$wgOAuthGroupsToNotify
|
[]
|
Seznam skupin uživatelů, které by měly být informovány o nových návrzích pro spotřebitele. Toto nastavení bude mít účinek pouze po instalaci balíčku Echo. |
$wgMWOauthDisabledApiModules
|
[]
|
Seznam tříd modulů API, které se mají zakázat, když se pro požadavek použije OAuth |
$wgMWOAuthReadOnly
|
false
|
Zabrání zápisu do databáze. Pokud je toto nastaveno, nelze přidávat ani aktualizovat uživatele a nová autorizace jsou zakázána. Autorizační hlavičky pro stávající autorizace budou i nadále fungovat. Užitečné pro migraci databázových tabulek |
$wgMWOAuthSessionCacheType
|
$wgSessionCacheType
|
Mechanismus ukládání dat relace. Pokud je null, výchozí hodnota je $wgSessionCacheType. |
$wgOAuthAutoApprove
|
[]
|
Umožňuje automatické okamžité schválení aplikací s nízkým rizikem. Ve formě [ 'grants' => [ 'grant1', 'grant2', ... ] ]
|
$wgOAuth2EnabledGrantTypes
|
[
"authorization_code",
"refresh_token",
"client_credentials"
]
|
Seznam povolení OAuth2, která mohou klientské aplikace používat. Skutečné granty, které bude klient moci použít v rámci své žádosti, mohou být libovolnou podmnožinou grantů uvedených zde. Granty, kromě těch, které jsou zde uvedeny, jsou považovány za starší granty a toto rozšíření je nepodporuje. |
$wgOAuth2PrivateKey
|
""
|
Soukromý klíč nebo cesta k soukromému klíči použitému k podepsání přenášeného OAuth2 JWT. Postup generování klíčů naleznete v dokumentaci k serveru OAuth 2.0. |
$wgOAuth2PublicKey
|
""
|
Veřejný klíč nebo cesta k veřejnému klíči používanému k ověřování požadavků na prostředky OAuth2. |
$wgOAuth2RequireCodeChallengeForPublicClients
|
true
|
Určuje, zda jsou klienti povinni odesílat výzvy k kódu s požadavky OAuth2. Toto platí pouze pro nedůvěrné klienty. |
$wgOAuth2GrantExpirationInterval
|
"PT1H" (1 hodina)
|
Řídí dobu platnosti přístupových tokenů (uložených v mezipaměti nakonfigurované v MWOAuthSessionCacheType). Nevztahuje se na klienty pouze s oprávněním vlastníka, jejichž přístupové tokeny jsou vždy neomezené. Akceptuje trvání dle ISO 8601 nebo může být nastaveno na "infinity" nebo false pro tokeny s nekončící platností. |
$wgOAuth2RefreshTokenTTL
|
"P1M" (1 měsíc)
|
Řídí dobu platnosti obnovovacích tokenů (uložených v mezipaměti nakonfigurované v MWOAuthSessionCacheType). Akceptuje trvání dle ISO 8601 nebo může být nastaveno na "infinity" nebo false pro tokeny s nekončící platností. |
Uživatelská práva
| Správně | Popis |
|---|---|
mwoauthproposeconsumer |
Navrhování nových konzumentů OAuth |
mwoauthupdateownconsumer |
Upravování konzumentů OAuth, které spravujete |
mwoauthmanageconsumer |
Správa konzumentů OAuth |
mwoauthsuppress |
Utajování konzumentů OAuth |
mwoauthviewsuppressed |
Zobrazování utajených konzumentů OAuth |
mwoauthviewprivate |
Zobrazování soukromých dat OAuth |
mwoauthmanagemygrants |
Správa přístupových oprávnění OAuth |
Koncové body
Pro interakci OAuth 2.0 jsou k dispozici následující koncové body REST.
Získání autorizačního kódu
Používá se pro načtení autorizačního kódu při použití atributu authorizations_code grant.
- Cesta
- /oauth2/authorize
- Povolená metoda
- GET
- Povolené parametry
Název Povinné? Popis response_type Ano client_id Ano redirect_uri Ne Pokud je přítomno, musí přesně odpovídat URI, které bylo nastaveno při registraci klienta. scope Ne state Ne code_challenge Ne Povinné, pokud je $wgOAuth2RequireCodeChallengeForPublicClientsrovnotruecode_challenge_method Ne Povinné, pokud je $wgOAuth2RequireCodeChallengeForPublicClientsrovnotrue
Získání přístupového tokenu
Používá se pro vyžádání přístupových tokenů
- Cesta
- /oauth2/access_token
- Povolená metoda
- POST
- Povolené parametry
Název Povinné? Popis grant_type Ano Typ použitého grantu client_id Ne client_secret Ne Povinné, pokud je klient confidentialredirect_uri Ne Pokud je přítomno, musí přesně odpovídat URI, které bylo nastaveno při registraci klienta. scope Ne code Ne Vyžadováno, pokud se použije grant authorization_coderefresh_token Ne Vyžadováno, pokud se použije grant refresh_tokencode_verifier Ne
Získání informací o uživateli nebo klientovi
Používá se pro načtení chráněných zdrojů pomocí dříve vydaného přístupového tokenu.
V současné době lze pomocí tohoto koncového bodu načíst dva typy zdrojů nahrazením zástupného symbolu {{type}} klíčem typu:
profile- načíst uživatelský profil uživatele, který je reprezentován přístupovým tokenem použitým k provedení požadavku - obvykle se používá k přihlašování uživatelů na webových stránkách třetích stran pomocí MediaWikiscopes- načíst všechny rozsahy, které klient (aplikace) smí používat s aktuálním přístupovým tokenem
- Cesta
- /oauth2/resource/{{type}}
- Povolená metoda
- GET
- POST
- Povolené parametry
- Kromě parametru
{{type}}, který je součástí cesty, nejsou povoleny žádné parametry.
Seznam klientů
Zobrazí klienty OAuth 1.0a nebo 2.0 pro přihlášeného uživatele. Autentizace lze dosáhnout přes CentralAuth nebo zahrnutím přístupového tokenu do autorizační hlavičky.
- Cesta
- /oauth2/client
- Povolená metoda
- GET
- Povolené parametry
oauth_version(volitelné) – buď 1 (pro vrácení pouze klientů OAuth 1.0a), nebo 2 (pro vrácení pouze klientů OAuth 2.0). Výchozí: 2- Parametry stránkování
limit(volitelné) – maximální počet klientů, kteří se mají vrátit. Výchozí: 25offset(volitelné) – počet klientů, které je třeba přeskočit před vrácením prvního výsledku. Výchozí: 0
| Příklad odpovědi |
|---|
{
"clients": [
{
"client_key": "xxxxxxxxxxxxxx",
"name": "TestFromCurl1807",
"version": "2.0",
"email": "admin@example.com",
"callback_url": "http://example.com",
"scopes": [
"authonly"
],
"registration": "20200818230806",
"stage": 0,
"oauth_version": 2,
"description": "foo",
"allowed_grants": [
"authorization_code"
],
"registration_formatted": "23:08, 18 August 2020"
}
],
"total": 1
}
|
Obnovení tajného kódu klienta
Obnoví tajný kód klienta. U klientů pouze s oprávněním vlastníka tento koncový bod také resetuje přístupový token.
- Cesta
- /oauth2/client/{client_key}/reset_secret
- Povolená metoda
- POST
- Povolené parametry
Název Povinné? Popis Výchozí client_keyAno identifikátor klienta reasonNe Řetězec obsahující důvod pro resetování tajemství. ''
| Příklad odpovědi |
|---|
{
"name": "Example",
"client_key": "xxxxxxxxxx",
"secret": "xxxxxxxxxx",
"access_token": "xxxxxxxxxx"
}
|
Vytvoření klienta OAuth 2.0
Vytvoří klienta OAuth 2.0.
- Cesta
- /oauth2/client
- Povolená metoda
- POST
- Povolené parametry
Název Povinné? Popis Výchozí nameAno Jméno klienta descriptionAno Popis klienta emailAno Kontaktní e-mail is_confidentialAno Nastaveno na hodnotu true, pokud je klient důvěrný. Nastaveno na hodnotufalsepro veřejné klienty, jako jsou mobilní a desktopové aplikace.grant_typesAno Typy udělení OAuth 2.0 používané klientem, jeden nebo více z následujících: authorization_code,refresh_token,client_credentialsscopesAno Rozsahy OAuth 2.0, buď mwoauth-authonly,mwoauth-authonlyprivatenebo sada příslušných grantůversionNe Klientská verze. 1.0 wikiNe Příslušný projekt. * pro všechny wiki owner_only? Nastaveno na hodnotu truepro klienta používaného pouze uživatelem, který jej vytvořilcallback_urlNe Návratová URL adresa pro autorizaci uživatelů. ''callback_is_prefixNe Nastavte na hodnotu true, aby klient mohl v požadavcích zadat zpětné volání a použít URL zpětného volání jako povinný prefix.false
| Příklad odpovědi |
|---|
{
"name": "Example",
"client_key": "xxxxxxxxxx",
"secret": "xxxxxxxxxx",
"access_token": "xxxxxxxxxx"
}
|
Související odkazy
- Extension:OATHAuth – podobně pojmenované rozšíření, které implementuje druhý faktor ověřování pomocí jednorázových hesel založených na OATH.
- Extension:WSOAuth – rozšíření MediaWiki, které umožňuje vaší wiki delegovat ověřování na libovolného poskytovatele OAuth používajícího PluggableAuth, včetně wiki, na které běží Extension:OAuth.
- oauthclient-php – klientská knihovna pro uživatele OAuth.
| Toto rozšíření se používá na jednom nebo více projektech Wikimedia. Pravděpodobně to znamená, že rozšíření je stabilní a funguje dostatečně dobře, aby jej mohly používat weby s tak vysokou návštěvností. Vyhledejte tento název rozšíření v konfiguračních souborech CommonSettings.php a InitialiseSettings.php Wikimedie, abyste viděli, kde je nainstalováno. Úplný seznam rozšíření nainstalovaných na konkrétní wiki lze vidět na stránce wiki Special:Version. |
| Toto rozšíření je zahrnuto v následujících wiki farmách/hostitelích a/nebo balíčcích: |
- Stable extensions/cs
- User identity extensions/cs
- User rights extensions/cs
- API extensions/cs
- Extensions which add rights/cs
- AbuseFilter-builder extensions/cs
- AbuseFilter-computeVariable extensions/cs
- AbuseFilter-generateUserVars extensions/cs
- ApiRsdServiceApis extensions/cs
- BeforeCreateEchoEvent extensions/cs
- ChangeTagCanCreate extensions/cs
- ChangeTagsListActive extensions/cs
- GetPreferences extensions/cs
- ListDefinedTags extensions/cs
- LoadExtensionSchemaUpdates extensions/cs
- LoginFormValidErrorMessages extensions/cs
- MediaWikiServices extensions/cs
- MergeAccountFromTo extensions/cs
- MessagesPreLoad extensions/cs
- SetupAfterCache extensions/cs
- SpecialPageAfterExecute extensions/cs
- SpecialPageBeforeFormDisplay extensions/cs
- TestCanonicalRedirect extensions/cs
- GPL licensed extensions/cs
- Extensions in Wikimedia version control/cs
- All extensions/cs
- Extensions requiring Composer with git/cs
- Extensions used on Wikimedia/cs
- Extensions included in Canasta/cs
- Extensions included in Miraheze/cs
- Extensions included in ProWiki/cs
- Extensions included in Telepedia/cs
- Extensions included in Weird Gloop/cs
- Extensions included in wiki.gg/cs
