Extensão:CentralAuth
CentralAuth allows merging several existing separate account systems into one global account system.
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:
- Install Extension:AntiSpoof , since it is a required dependency.
- #Faça o download do último snapshot e extraia-o para seu diretório
extensions
. - #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 executetables-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 tabelaspoofuser
do banco de dados do wiki local e importá-la para o novo$wgVirtualDomainsMapping['virtual-centralauth']
.
- If you use Extension:AntiSpoof you'll need to create a global
- Adicione
wfLoadExtension( 'CentralAuth' );
a LocalSettings.php para cada um de seus wikis, ou em outro arquivo PHP que esteja incluído emLocalSettings.php
em cada um de seus wikis. - 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
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
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' ];
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 Para usar um banco de dados com um prefixo de tabela, defina essa variável como " 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 |
$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 |
$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 |
$wgCentralAuthCookieDomain
|
''
|
Domínio para definir cookies globais.
Por exemplo, |
$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 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 |
$wgCentralAuthRC
|
[]
|
Array of settings for sending the CentralAuth events to the RC Feeds.
|
$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.
|
$wgCentralAuthEnableGlobalRenameRequest
|
false
|
Feature flag for Special:GlobalRenameRequest .
|
$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.
|
$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:
You can use the exact names or regular expressions.
|
$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 .
|
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
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
- Single login specifications on Meta-Wiki
- Help:Unified login on Meta-Wiki
- Extension:CentralAuth/authentication - CentralAuth authentication features
$wgSharedDB
- User:Legoktm/evil-plans2.txt - 2015 plan to phase out CentralAuth at WMF
- Global session threat assessment
- Integrated watchlists
- CentralAuth control flow
- Stuck global renames
Esta extensão está sendo usada(o) por um ou mais projetos da Wikimedia. Isto significa que, provavelmente, a extensão é estável e funciona bem o suficiente para ser utilizada(o) em sites da web de alto tráfego. Procure pelo nome dessa extensão nos arquivos de configuração CommonSettings.php e InitialiseSettings.php da Wikimedia para verificar onde ela foi instalada. Uma lista completa das extensões instaladas numa wiki em particular podem ser visualizadas na página Special:Version da wiki. |
Esta extensão está incluída nas seguintes fazendas/hospedagens (farms/hosts) e/ou pacotes wiki: Esta não é uma lista autoritativa (oficial). Algumas fazendas/hospedagens (farms/hosts) e/ou pacotes wiki podem conter esta extensão mesmo que não estejam listados aqui. Sempre verifique com suas fazendas/hospedagens (farms/hosts) ou pacotes wiki para confirmar. |