Jump to content

Extension:OAuth

From mediawiki.org
This page is a translated version of the page Extension:OAuth and the translation is 98% complete.
Nezaměňovat s Extension:OATHAuth nebo Extension:WSOAuth.
Příručka k rozšířením MediaWiki
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
Tabulky oauth_accepted_consumer
oauth_registered_consumer
Licence GNU General Public License 2.0 nebo novější
Stáhnout
Nápověda Nápověda:OAuth
  • $wgOAuth2PublicKey
  • $wgOAuth2RequireCodeChallengeForPublicClients
  • $wgMWOAuthCentralWiki
  • $wgMWOAuthSecureTokenTransfer
  • $wgMWOAuthSharedUserSource
  • $wgOAuth2GrantExpirationInterval
  • $wgOAuthAutoApprove
  • $wgMWOauthDisabledApiModules
  • $wgOAuth2EnabledGrantTypes
  • $wgMWOAuthNonceCacheType
  • $wgOAuthGroupsToNotify
  • $wgMWOAuthRequestExpirationAge
  • $wgOAuth2RefreshTokenTTL
  • $wgMWOAuthSessionCacheType
  • $wgMWOAuthReadOnly
  • $wgOAuth2PrivateKey
  • $wgMWOAuthSharedUserIDs
  • $wgOAuthSecretKey

  • mwoauthproposeconsumer
  • mwoauthupdateownconsumer
  • mwoauthmanageconsumer
  • mwoauthsuppress
  • mwoauthviewsuppressed
  • mwoauthviewprivate
  • mwoauthmanagemygrants
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.

Pokud se pokoušíte vyvinout aplikaci, která na wiki používá OAuth, podívejte se na OAuth pro vývojáře. Pokud se pokoušíte použít nástroj s podporou OAuth na wiki, která má toto rozšíření nainstalováno, podívejte se na OAuth .

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


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;

Database Virtual Domains Mapping

Since MediaWiki 1.45, it's recommended to configure database virtual domains mapping for OAuth, see this patch. $wgMWOAuthCentralWiki and virtual domains are separate settings.

To set up virtual domains mapping with OAuth, use:

$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 true nebo false. Jinak by měla být vždy nastavena na false. Nastavení na hodnotu true vyžaduje CentralIdLookup nebo rozšíření ověřování s podporou MWOAuth. Tato hodnota by se neměla dodatečně měnit, aby se předešlo nejednoznačným ID. Před jakýmikoli takovými změnami by měla být provedena řádná migrace uživatelských ID.

$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 false.

$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 [] Allows automatic immediate approval of low-risk apps. In the form of [ '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. See the OAuth 2.0 Server documentation for how to generate the keys.
$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

Koncové body OAuth 2.0 REST

Pro interakci OAuth 2.0 jsou k dispozici následující koncové body REST.

Cesta Popis Povolené parametry Povolená metoda
/oauth2/authorize Používá se pro načtení autorizačního kódu při použití atributu authorizations_code grant.
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 $wgOAuth2RequireCodeChallengeForPublicClients rovno true
code_challenge_method Ne Povinné, pokud je $wgOAuth2RequireCodeChallengeForPublicClients rovno true
GET
/oauth2/access_token Používá se pro vyžádání přístupových tokenů
Název Povinné? Popis
grant_type Ano Typ použitého grantu
client_id Ne
client_secret Ne Povinné, pokud je klient confidential
redirect_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_code
refresh_token Ne Vyžadováno, pokud se použije grant refresh_token
code_verifier Ne
POST
/oauth2/resource/{{type}} 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í MediaWiki
  • scopes - načíst všechny rozsahy, které klient (aplikace) smí používat s aktuálním přístupovým tokenem
Kromě parametru {{type}}, který je součástí cesty, nejsou povoleny žádné parametry. GET/POST
/oauth2/client 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.
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
}
  • 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í: 25
    • offset (volitelné) – počet klientů, které je třeba přeskočit před vrácením prvního výsledku. Výchozí: 0
GET
/oauth2/client/{client_key}/reset_secret Obnoví tajný kód klienta. U klientů pouze s oprávněním vlastníka tento koncový bod také resetuje přístupový token.
Příklad odpovědi
{
  "name": "Example",
  "client_key": "xxxxxxxxxx",
  "secret": "xxxxxxxxxx",
  "access_token": "xxxxxxxxxx"
}
Název Povinné? Popis Výchozí
client_key Ano identifikátor klienta
reason Ne Řetězec obsahující důvod pro resetování tajemství. ''
POST
/oauth2/client Vytvoří klienta OAuth 2.0.
Příklad odpovědi
{
  "name": "Example",
  "client_key": "xxxxxxxxxx",
  "secret": "xxxxxxxxxx",
  "access_token": "xxxxxxxxxx"
}
Název Povinné? Popis Výchozí
name Ano Jméno klienta
description Ano Popis klienta
email Ano Kontaktní e-mail
is_confidential Ano Nastaveno na hodnotu true, pokud je klient důvěrný. Nastaveno na hodnotu false pro veřejné klienty, jako jsou mobilní a desktopové aplikace.
grant_types Ano Typy udělení OAuth 2.0 používané klientem, jeden nebo více z následujících: authorization_code, refresh_token, client_credentials
scopes Ano Rozsahy OAuth 2.0, buď mwoauth-authonly, mwoauth-authonlyprivate nebo sada příslušných grantů
version Ne Klientská verze. 1.0
wiki Ne Příslušný projekt. * pro všechny wiki
owner_only ? Nastaveno na hodnotu true pro klienta používaného pouze uživatelem, který jej vytvořil
callback_url Ne Návratová URL adresa pro autorizaci uživatelů. ''
callback_is_prefix Ne 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
POST
Pokud jsou přihlašovací údaje OAuth sdíleny v rámci wiki farmy, ujistěte se, že skutečná jména jsou používána/skryta konzistentně napříč všemi wikinami (pomocí přepínače $wgHiddenPrefs ). Na wikinách, kde jsou skutečná jména skryta, zpráva s požadavkem na oprávnění OAuth, která uživateli sděluje, které informace jsou sdíleny, neuvádí skutečné jméno, takže v takovém případě by neměla existovat žádná jiná wiki, odkud by uživatel OAuth mohl tyto informace získat.

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.