Extensão:CentralAuth

This page is a translated version of the page Extension:CentralAuth and the translation is 38% complete.
Outdated translations are marked like this.
Manual de extensões do MediaWiki
CentralAuth
Estado da versão: estável
Implementação Identidade de usuário , Banco de dados , Página especial , API
Descrição Permite mesclar contas em contas globais
Autor(es) Brooke Vibberdiscussão
Política de
compatibilidade
Snapshots releases along with MediaWiki. Master is not backward compatible.
Modifica o banco
de dados
Sim
Virtual domain virtual-centralauth
Tabelas globalnames
localnames
globaluser
localuser
global_user_groups
global_group_permissions
wikiset
global_group_restrictions
renameuser_status
renameuser_queue
users_to_rename
global_edit_count
global_user_autocreate_serial
Licença GNU GPL (Licença Pública Geral) 2.0 ou superior
Download
  • $wgCentralAuthAutoLoginWikis
  • $wgCentralAuthCookiePath
  • $wgCentralAuthEnableSul3
  • $wgCentralAuthAutomaticVanishPerformer
  • $wgCentralAuthReadOnly
  • $wgCentralAuthAutoMigrate
  • $wgCentralAuthFallbackAppealUrl
  • $wgCentralAuthBlockAppealWikidataIds
  • $wgCentralAuthSul3SharedDomainRestrictions
  • $wgCentralAuthSharedDomainPrefix
  • $wgCentralAuthEnableGlobalRenameRequest
  • $wgCentralAuthRestrictSharedDomain
  • $wgCentralAuthGlobalPasswordPolicies
  • $wgCentralAuthCookieDomain
  • $wgCentralAuthWikisPerSuppressJob
  • $wgCentralAuthFallbackAppealTitle
  • $wgCentralAuthCookies
  • $wgCentralAuthRC
  • $wgCentralAuthGlobalBlockInterwikiPrefix
  • $wgCentralAuthAutoMigrateNonGlobalAccounts
  • $wgCentralAuthDatabase
  • $wgCentralAuthDryRun
  • $wgCentralAuthAutomaticGlobalGroups
  • $wgCentralAuthTokenSessionTimeout
  • $wgCentralAuthLoginIcon
  • $wgCentralAuthStrict
  • $wgCentralAuthPrefsForUIReload
  • $wgCentralAuthLoginWiki
  • $wgCentralAuthWikidataApiUrl
  • $wgCentralAuthSessionCacheType
  • $wgGlobalRenameDenylist
  • $wgCentralAuthOldNameAntiSpoofWiki
  • $wgCentralAuthRejectVanishUserNotification
  • $wgCentralAuthAutoCreateWikis
  • $wgCentralAuthCookiePrefix
  • centralauth-createlocal
  • centralauth-merge
  • centralauth-unmerge
  • centralauth-lock
  • centralauth-suppress
  • globalgrouppermissions
  • globalgroupmembership
  • centralauth-rename
Quarterly downloads 51 (Ranked 85th)
Para traduzir a extensão CentralAuth, verifique sua disponibilidade no translatewiki.net
Problemas Tarefas em aberto · Relatar um bug

CentralAuth allows merging several existing separate account systems into one global account system.

Atenção Atenção: O CentralAuth foi projetado especificamente para projetos da Wikimedia que já tinham milhões de contas que precisavam ser mescladas em uma tabela global.

Se você está iniciando um novo wiki farm do zero e não precisa mesclar contas existentes em uma tabela global, é muito mais fácil configurar contas globais usando $wgSharedDB em vez de CentralAuth.[1][2]

However, $wgSharedDB is only useful for preventing conflicts of username creations, and does not handle anything such as universal sign-on (instead, users are required to sign in to each wiki), or cross-cluster account rights and management. Esta extensão fornece essa funcionalidade ao custo da complexidade.

If you end up using this extension on a third-party wiki, it is likely that you will end up having to troubleshoot complex issues that potentially require diving into the source code to resolve.

You have been warned.

Instalação

Consulte a seção setup abaixo para obter os pré-requisitos para usar o CentralAuth. Em seguida, siga estas instruções quando estiver pronto para ativar o CentralAuth:

  1. Install Extension:AntiSpoof , since it is a required dependency.
  2. #Faça o download do último snapshot e extraia-o para seu diretório extensions.
  3. #Escolha um banco de dados e crie as tabelas do banco de dados do CentralAuth. Você pode usar um banco de dados existente ou criar um novo; a extensão por padrão usa um banco de dados chamado $1 (veja $2 abaixo). (The extension by default uses the wiki's local database, which is convenient for automated testing but doesn't really make sense on a real wiki farm (as it will be different for every wiki, but the point of CentralAuth is sharing data between wikis) so you'll need to reconfigure that; see $wgVirtualDomainsMapping['virtual-centralauth'] below.) Use este banco de dados e execute tables-generated.sql.
    • If you use Extension:AntiSpoof you'll need to create a global spoofuser table (to block new usernames that look similar to existing usernames in any wiki). Uma maneira de fazer isso é despejar a tabela spoofuser do banco de dados do wiki local e importá-la para o novo $wgVirtualDomainsMapping['virtual-centralauth'].
  4. Adicione wfLoadExtension( 'CentralAuth' ); a LocalSettings.php para cada um de seus wikis, ou em outro arquivo PHP que esteja incluído em LocalSettings.php em cada um de seus wikis.
  5. A extensão deve estar agora ativa.

Create a new database

Aqui estão exemplos de comandos SQL e shell para criar o banco de dados do centralauth, copie a tabela spoofuser para ela e migre os dados de usuário existentes para ela. Substitua $wgDBname e $wgDBuser pelos valores para sua própria instalação do wiki.

Crie um novo banco de dados (Lembre-se de que esta etapa é opcional, você pode usar um de seus bancos de dados existentes, nesse caso, pule para a etapa de criação de tabelas):

$ cd extensions/CentralAuth
$ mysql -u root -p
(enter password for root SQL user)
CREATE DATABASE centralauth;
USE centralauth;
GRANT all on centralauth.* to '$wgDBuser'@'localhost';
quit

Run maintenance scripts

O seguinte assume que seu diretório de trabalho atual é sua instalação do MediaWiki (não seu diretório CentralAuth). Crie as tabelas de central auth (usando sql.php é preferível.

php maintenance/run.php sql --wikidb centralauth extensions/CentralAuth/schema/<db_type>/tables-generated.sql

Se o AntiSpoof estiver instalado, crie a tabela via (Alternativamente, você pode copiar uma tabela AntiSpoof existente se quiser manter as entradas anteriores):

php maintenance/run.php sql --wikidb centralauth extensions/AntiSpoof/sql/<db_type>/tables-generated.sql

Execute os scripts de migração do usuário

$ php maintenance/run.php CentralAuth:migratePass0.php
$ php maintenance/run.php CentralAuth:migratePass1.php

Upgrading

CentralAuth is designed for large wiki farms who run database updates manually in order to enable zero-downtime upgrades. For that reason, the CentralAuth database will not be updated with the usual upgrade process. Third-party users are expected to follow CentralAuth development and apply database migrations manually instead.

Setup

  Atenção: Uma wiki de login central é necessário se você quiser ter um login universal em diferentes domínios primários (ou seja, se seus wikis não estiverem em subdomínios do mesmo domínio). Veja abaixo para detalhes.

Primeiro, você precisará configurar sua família de wikis usando $wgConf , ou CentralAuth não poderá ser usado para sua família de wikis. Isso inclui definir $wgLocalDatabases e atribuí-lo a $wgConf->wikis e $wgConf->settings (o mínimo é $wgCanonicalServer , $wgServer e $wgArticlePath ). Siga os exemplos cuidadosamente. Se você estiver criando uma nova família de wikis, tenha em mente que pode ser mais fácil se os bancos de dados dos wikis em cada grupo tiverem o mesmo sufixo (por exemplo, bancos de dados hipotéticos enwiki, dewiki, frwiki, etc., pertencentes a wikis pertencentes ao mesmo grupo, todos têm o sufixo "wiki").

Depois de instalar a extensão, você deve coletar alguns dados no banco de dados do CentralAuth. Para configurar contas globais retroativamente, você terá que executar os scripts migratePass0.php e migratePass1.php. O primeiro armazena informações sobre seus wikis no banco de dados do CentralAuth, enquanto o segundo usa heurísticas de migração automática para gerar contas globais. Um usuário pode mesclar suas contas manualmente via Special:MergeAccount. Dry runs podem ser usadas para fins de teste.

Para habilitar grupos globais, você terá que fazer uma entrada na tabela global_group_permissions em seu banco de dados do CentralAuth, com ggp_group='steward' e (para acesso à interface de gerenciamento de grupo) ggp_permission=globalgrouppermissions. Um exemplo de consulta que é recomendado usar é:

INSERT INTO global_group_permissions (ggp_group,ggp_permission) VALUES ('steward','globalgrouppermissions'), ('steward','globalgroupmembership');

Then, promote some users into stewards:

INSERT IGNORE INTO global_user_groups (gug_user, gug_group) VALUES ((SELECT gu_id FROM globaluser WHERE gu_name='Admin'), 'steward');

Existem várias configurações que você pode querer modificar (por exemplo, se deve fornecer login único em um domínio inteiro) listadas em CentralAuth.php. Em particular, você desejará substituir o valor padrão de $wgVirtualDomainsMapping['virtual-centralauth'] se seu banco de dados do CentralAuth tiver um nome diferente de $2. Certifique-se de colocar essas configurações após a linha wfLoadExtension em LocalSettings.php, por exemplo:

wfLoadExtension( 'CentralAuth' );
$wgVirtualDomainsMapping['virtual-centralauth'] = [ 'db' => 'centralauth' ];

"SUL2" behavior

  Atenção: Como todos os usuários logados terão uma sessão no wiki de login central, é recomendável configurar um novo wiki com o menor número possível de extensões instaladas (não usando um wiki existente para esta finalidade). Isso reduzirá o risco de vulnerabilidades XSS.
  Atenção: O login universal pode ser interrompido nas versões mais recentes do Google Chrome devido à política de cookies do SameSite. Para consertar isso, você precisa adicionar:
$wgCookieSameSite = "None";
$wgUseSameSiteLegacyCookies = true;
Além disso, você deve executar seu site em HTTPS.


Em julho de 2013, a WMF mudou sua abordagem para registrar usuários em vários wikis. Quando configurado para essa nova abordagem, após o login bem-sucedido e a criação da conta, o CentralAuth redireciona para Special:CentralLogin/start?token=somevalue em um "wiki de login central", que define cookies nesse wiki e redireciona de volta para o wiki conectado. Ele omite a página "sucesso na criação de login/conta", redirecionando de volta para a página "retornar" em que o usuário estava originalmente. Ele coloca imagens de pixel 1x1 no rodapé dessa página, no lugar dos ícones usados anteriormente na página "sucesso na criação de login/conta".

As configurações para isso são, aproximadamente,

# General CentralAuth configuration
$wgCentralAuthCookies = true;
// default is to use the local wiki database
$wgVirtualDomainsMapping['virtual-centralauth'] = [ 'db' => 'centralauthDatabaseName' ];
$wgCentralAuthAutoMigrate = true;
$wgCentralAuthAutoLoginWikis = [
    # Mapping from domain name to wiki id for other wikis to automatically login into
    'enwiki.mediawiki.mwdd.localhost' => 'enwiki',
];

# Activates the redirect to the "central login wiki"
$wgCentralAuthLoginWiki = 'WikiIdOfLoginWiki';

$wgCentralAuthLoginWiki is the ID (usually the database-name) of the wiki to which CentralAuth will redirect on login and create account actions.

Problemas de cache

Para melhores resultados, é recomendável usar o memcached. Se você tiver apenas um único servidor, os caches do acelerador (CACHE_ACCEL) como o APCu também podem funcionar, mas não os use se você tiver vários servidores. Se você não tiver um cache configurado (ou seja, CACHE_NONE) por $wgMainCacheType, ou estiver usando CACHE_DB, então você precisa ter certeza de que todos os seus wikis usam a mesma tabela de cache.

Por padrão, cada wiki em seu wiki farm usará a tabela objectcache em seu próprio banco de dados (com seu próprio prefixo db) quando $wgMainCacheType for definido como CACHE_NONE ou CACHE_DB. Para fazer isso funcionar com o CentralAuth, precisamos dizer aos wikis para usar uma tabela de cache central.

Se você quiser fazer uma tabela de cache central no banco de dados centralauth (e supondo que um de seus wikis existentes tenha um nome de banco de dados enwiki), execute um código como o seguinte para copiar a tabela para seu outro banco de dados:

CREATE TABLE centralauth.objectcache LIKE enwiki.objectcache

Em seguida, adicione a seguinte configuração a todos os wikis para instruí-los a usar a tabela central em vez de sua própria tabela:

$wgSharedDB = 'centralauth'; // or whatever database you use for central data
$wgSharedTables = [ 'objectcache' ]; // remember to copy the table structure's to the central database first
$wgCentralAuthSessionCacheType = CACHE_DB; // Tell mediawiki to use objectcache database for central auth.

When running PHPUnit tests locally with your wiki farm and do not want them to fail due to an attempt to clone database tables with the shared tables config above, use:

if ( defined( 'MW_PHPUNIT_TEST' ) ) {
	$wgSharedTables = [];
} else {
	$wgSharedTables = [ 'objectcache' ];
}

HTTP and HTTPS

Since 2023, CentralAuth does not support mixed-protocol HTTP/HTTPS wikis, only pure-HTTPS wikis (with $wgForceHTTPS set to true) and pure-HTTP wikis (primarily for local testing). See issue T348852.

Configuração

Database Virtual Domains Mapping

Since MediaWiki 1.41, you can configure database virtual domains mapping for CentralAuth, and this replaced $wgCentralAuthDatabase. To setup virtual domains mapping with CentralAuth, use:

// 'centralauth' is the name of the your CentralAuth database.
$wgVirtualDomainsMapping['virtual-centralauth'] = [ 'db' => 'centralauth' ];
Definições de configuração em Extension.json Config section
parâmetro padrão comentário
(deprecated) $wgCentralAuthDatabase null Nome do banco de dados em que você mantém os dados de central auth.

Se isso não estiver na conexão de banco de dados principal, não se esqueça de também configurar $wgDBservers para ter uma entrada com uma configuração de groupLoads para o grupo 'CentralAuth'. Alternativamente, você pode usar $wgLBFactoryConf para configurar um objeto LBFactoryMulti.

Para usar um banco de dados com um prefixo de tabela, defina essa variável como "{$database}-{$prefix}".

NOTE: This setting has been deprecated, use virtual domains mapping as described above.

$wgCentralAuthAutoMigrate false Se true, as contas desanexadas existentes serão migradas automaticamente, se possível, no primeiro login.

Todas as novas criações de conta deverão ser anexadas.

If false, unattached accounts will not be harassed unless the individual account has opted in to migration.

$wgCentralAuthAutoMigrateNonGlobalAccounts false Se true, as contas desanexadas existentes onde não existe uma conta global serão comparadas para ver se uma mesclagem pode ser feita com base em senhas e e-mails sem conflitos (todas as contas mescladas).

Este foi anteriormente controlado por $wgCentralAuthAutoMigrate

$wgCentralAuthStrict false Se true, as contas restantes que não foram anexadas serão proibidas de fazer login até que sejam resolvidas.
$wgCentralAuthDryRun false Se true, a fusão não será realmente possível através da interface Special:MergeAccount.
$wgCentralAuthCookies false Se true, os cookies de sessão e token globais serão definidos juntamente com a sessão por wiki e os tokens de login quando os usuários fizerem login com uma conta global.

Isso permite que outros wikis no mesmo domínio façam login de forma transparente.

$wgCentralAuthLoginWiki false Nome do banco de dados de um wiki de login central. Esta é uma alternativa para configurar cookies cross-domain diretamente para cada wiki em $wgCentralAuthAutoLoginWikis. Se definido, um único wiki de login usará uma sessão/cookie para lidar com sessões de login unificadas em wikis.

No login, os usuários serão redirecionados para a página Special:CentralLogin/login do wiki de login e, em seguida, redirecionados para Special:CentralLogin de volta no wiki de origem. No processo, o cookie e a sessão do wiki de login central serão definidos. À medida que o usuário acessa outros wikis, o wiki de login será verificado via JavaScript para verificar o status do login e definir a sessão local e os cookies.

Isso requer $wgCentralAuthCookies.

$wgCentralAuthCookieDomain '' Domínio para definir cookies globais.

Por exemplo, '.wikipedia.org' para trabalhar em todos os subdomínios de wikipedia.org em vez de apenas o atual. Deixe em branco para definir o cookie apenas para o domínio atual, como se todos os seus wikis estivessem hospedados no mesmo subdomínio.

$wgCentralAuthCookiePrefix 'centralauth_' Prefixo para cookies de autenticação global do CentralAuth.
$wgCentralAuthCookiePath '/' Path for CentralAuth global authentication cookies. Defina esta variável se desejar restringir os cookies a um determinado caminho dentro do domínio especificado por $wgCentralAuthCookieDomain.
$wgCentralAuthAutoLoginWikis [] Lista de IDs de wiki que devem ser chamados no login para tentar definir cookies de terceiros para o estado global da sessão.

O ID do wiki é tipicamente o nome do banco de dados, exceto quando são usados prefixos de tabela, caso em que é o nome do banco de dados, um separador de hífen e, em seguida, o prefixo da tabela.

Isso permite um farm com vários domínios de segundo nível configure uma sessão global em todos eles acessando um wiki de cada domínio (en.wikipedia.org, en.wikinews.org, etc.).

Feito acessando Special:CentralAutoLogin/start em cada wiki.

Se estiver vazio, nenhum outro wiki será atingido.

A chave deve ser definida para o nome de domínio do cookie.

$wgCentralAuthAutoCreateWikis [] Lista de IDs de wiki nas quais uma conta local anexada deve ser criada automaticamente quando a conta global for criada.

The wiki ID is typically the database name, except when table prefixes are used, in which case it is the database name, a hyphen separator, and then the table prefix.

$wgCentralAuthLoginIcon false Local filesystem path to the icon returned by Special:CentralAutoLogin should be a 20x20px PNG.
$wgCentralAuthPrefsForUIReload [ 'skin', 'language', 'thumbsize', 'underline', 'stubthreshold', 'showhiddencats', 'justify', 'numberheadings', 'editondblclick', 'editsection', 'editsectiononrightclick', 'usenewrc', 'extendwatchlist' ] User preferences for which we should recommend reloading the page after a successful central login query.

If you need to do something more complicated than just $userOptionsLookup->getOption( $user, $pref ) !== $userOptionsLookup->getDefaultOption( $pref ), use the hook CentralAuthIsUIReloadRecommended.

$wgCentralAuthRC [] Array of settings for sending the CentralAuth events to the RC Feeds.

@example $wgRCFeeds['example'] = [ 'uri' => "udp://localhost:1336" ];

$wgCentralAuthWikisPerSuppressJob 10 Size of wikis handled in one suppress user job. Keep in mind that one wiki requires ~10 queries.
$wgCentralAuthReadOnly false Like $wgReadOnly, used to set extension to database read only mode.

@var bool

$wgCentralAuthEnableGlobalRenameRequest false Feature flag for Special:GlobalRenameRequest.

@var bool

$wgCentralAuthGlobalPasswordPolicies [] Global password policies. These are applied like local password policies, the strongest policy applicable to a user is used. Policies can apply to either a local group (if the user is a member of that group on any wiki, the policy will apply to that user) or global group.

@var array

$wgGlobalRenameDenylist null A list of users who won't be allowed to create new global rename requests through Special:GlobalRenameRequest.

There are two ways to set it:

  • Using a wiki-page: use a Title object to have a wiki-page (MediaWiki:GlobalRenameDenylist for example) as the banned-list. The wiki-page must be a list with one item per line, and must exist otherwise Special:GlobalRenameRequest will throw a MWException.
    Example: $wgGlobalRenameDenylist = Title::makeTitle( NS_MEDIAWIKI, 'GlobalRenameDenylist' );.
  • Using a URL: put a complete URL which must return, using HTTP, a plain-text list of the banned users (and nothing else).
    For example, with a URL pointing to a wiki page: $wgGlobalRenameDenylist = "https://yourwiki/yourpath/index.php?title=MediaWiki:GlobalRenameDenylist&action=raw";

You can use the exact names or regular expressions.

@var Title|string|null

$wgCentralAuthGlobalBlockInterwikiPrefix "global" When globally suppressing a user, a block against this user is inserted in all wikis. CentralAuth will set the author of theses blocks as $wgCentralAuthGlobalBlockInterwikiPrefix>(user-who-made-the-suppression's nickname). For example, if $wgCentralAuthGlobalBlockInterwikiPrefix = "Admins";, and Joe suppresses John, all wikis will show in BlockList a block against John made by Admins>Joe.

@var string

Use

Allows for a single-user login (SUL) system using MediaWiki's AuthPlugin system. User creation and login is done globally using one central user table across all wikis. Note that local user accounts are automatically created on account creation/login however.

This extension also implements global user groups, to which global accounts can belong to.

User rights

CentralAuth defines several new user rights:

User right Abilities Default group Status
centralauth-createlocal Forcibly create a local account for a global account Stewards and sysops Active in MW 1.36+
centralauth-lock Prevent users from logging in on any wiki Stewards Active
centralauth-suppress Suppress or unhide global accounts Stewards Active
centralauth-rename Rename global accounts Stewards Active
centralauth-unmerge Unmerge global accounts from a local account Stewards Active
centralauth-merge Merge all CentralAuth accounts globally All users Active; usually automatic
globalgrouppermissions Manage permissions of global groups Global Stewards Active; not assigned to local stewards by default
globalgroupmembership Edit membership to global groups Global Stewards Active; not assigned to local stewards by default

Functions

Single-user login (SUL)

A user with an account on more than one wiki may use Special:MergeAccount to create their global user account, which can then be used on any wiki. Users with the centralauth-unmerge permission (given to stewards by default) can undo a merging of a global account, where the passwords are all reset back to the pre-merge setting. User accounts can now also be renamed globally.

Locking and hiding global users

 
Screenshot of Special:CentralAuth interface on Meta-Wiki, showing lock/hide interface.

A global account can be locked or hidden by a user with the centralauth-lock and centralauth-suppress permissions, respectively, given to the local group 'stewards' by default. A locked global account will be immediately logged out of any session on any wiki it is currently logged in to. A hidden global account's username is not visible in any logs except the global account log.

Wiki sets

A wiki set is a group of wikis specified by a user with the globalgrouppermissions right. Sets can be opt-in (wikis are not in it by default) or opt-out (wikis are in it unless opted out).

Global user groups

Once you have enabled global user groups as described in the installation section, a migrated steward can use the Special:GlobalGroupPermissions interface to configure global user groups, and their rights. A global user group is active on all wikis (the users in it have its rights on all the wikis) by default, unless the group has been specified to only be active on a specific wiki set (the users in the group only have the rights if they are on a wiki in the set). Global group permissions are not listed at Special:ListUsers, but instead Special:GlobalUsers. They are assigned by a user with the globalgroupmembership permission (by default the global group stewards), and give the specified rights to the user even if the local rights defined by $wgGroupPermissions do not do so.

Licensing and downloads

The extension is available under the GNU General Public License 2.0 or later, and can be downloaded from Git, or accessed via the web-based viewer.

The software is provided as-is. Updates will be made according to the needs of Wikimedia wikis; or where critical vulnerabilities are discovered.

API

References

Ver também