Extensão:CentralAuth
CentralAuth permite contas globais compartilhadas entre projetos. Esta extensão adiciona as seguintes novas páginas especiais: Special:CentralAuth, Special:CentralLogin (página especial não listada), Special:CentralAutoLogin (página especial não listada), Special:CreateLocalAccount, Special:MergeAccount, Special:GlobalGroupMembership, Special:GlobalGroupPermissions, Special:WikiSets, Special:GlobalUsers, Special:MultiLock, Special:GlobalRenameUser, Special:GlobalRenameProgress
É recomendado que você baixe a versão do CentralAuth que corresponde à sua versão do MediaWiki.
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:
- 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
centralauth
(veja$wgCentralAuthDatabase
abaixo). 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$wgCentralAuthDatabase
.
- 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.
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
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.
Se você não tiver acesso ao shell, também poderá importar tables-generated.sql
por meio de ferramentas de administração de banco de dados como PHPMyAdmin):
Versão MediaWiki: | ≥ 1.38 Gerrit change 758563 |
php maintenance/sql.php --wikidb centralauth extensions/CentralAuth/schema/<db_type>/tables-generated.sql
Versão MediaWiki: | ≤ 1.37 Gerrit change 758563 |
php maintenance/sql.php --wikidb centralauth extensions/CentralAuth/central-auth.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/sql.php --wikidb centralauth extensions/CentralAuth/AntiSpoof/patch-antispoof-global.mysql.sql
Execute os scripts de migração do usuário
$ php extensions/CentralAuth/maintenance/migratePass0.php
$ php extensions/CentralAuth/maintenance/migratePass1.php
Walkthrough é uma configuração mais amigável do que as instruções abaixo.
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.
Certifique-se de colocar o código de configuração depois da linha wfLoadExtension( 'CentralAuth' );
em LocalSettings.php
.
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');
.
Em seguida, execute migrateStewards.php
para promover stewards locais ao status de steward global.
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 $wgCentralAuthDatabase
se seu banco de dados do CentralAuth tiver um nome diferente de 'centralauth'
.
Certifique-se de colocar essas configurações após a linha wfLoadExtension
em LocalSettings.php
, por exemplo:
wfLoadExtension( 'CentralAuth' );
$wgCentralAuthDatabase = 'mycentralauthdatabase';
"SUL2" behavior
Esta página está desatualizada. |
Por favor, [$url expanda] essa página. |
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;
$wgCentralAuthAutoNew = true; // Parameter deleted from MediaWiki 1.27
$wgCentralAuthDatabase = 'centralauthDatabaseName'; // default is 'centralauth'
$wgCentralAuthAutoMigrate = true;
#$wgCentralAuthCookieDomain = '.example.org';
$wgCentralAuthAutoLoginWikis = array(
# Mapping from domain name to wiki id for other wikis to automatically login into
);
# Create the local account on pageview, set false to require a local login to create it.
$wgCentralAuthCreateOnView = true;
# Activates the redirect to the "central login wiki"
$wgCentralAuthLoginWiki = 'WikiIdOfLoginWiki';
# Skips the "login success" page
$wgCentralAuthSilentLogin = true;
# Deprecated, will be removed soon.
$wgCentralAuthUseOldAutoLogin = false;
$wgCentralAuthLoginWiki
is the id (usually the database-name) of the wiki to which CentralAuth will redirect on login and create account.
$wgCentralAuthAutoNew
means account creation will create a new global account (this parameter was deleted from MediaWiki 1.27).
Simulating SUL2 behavior on a single-instance development machine
You can simulate this new behavior on a single-instance development machine.
Você pode definir $wgCentralAuthLoginWiki = $wgDBname
para que o CentralAuth faça suas solicitações de redirecionamento HTTP para o mesmo wiki local.
Isso não exercerá o login central corretamente, mas ativará o comportamento de "returnto
".
O CentralAuth ainda usará seu próprio banco de dados de 'centralauth'
para armazenar nomes de usuários globais.
Para determinar a URL no login wiki, o CentralAuth usa o WikiMap, que assume que um wiki farm foi configurado usando $wgConf .
A configuração (em SiteConfiguration.php
) é muito flexível; uma maneira de configurar um wiki único fictício $wgConf
em LocalSettings.php
é:
// You can't just set wgConf values to the globals defined in Setup.php for your
// local wiki, because it hasn't run yet. You could hard-code $wgConf settings
// here, but instead we set the wgConf values in a hook that runs later.
$wgHooks['SetupAfterCache'][] = function() {
global $wgConf, $wgDBname,
$wgServer, $wgCanonicalServer, $wgArticlePath;
$wgConf->suffixes = array( $wgDBname );
$wgConf->settings['wgServer'][$wgDBname] = $wgServer;
$wgConf->settings['wgCanonicalServer'][$wgDBname] = $wgCanonicalServer;
$wgConf->settings['wgArticlePath'][$wgDBname] = $wgArticlePath;
return true;
};
This is in addition to the settings in #"SUL2" behavior above.
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 = array( '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.
Configuração
parâmetro | padrão | comentário |
---|---|---|
$wgCentralAuthDatabase
|
'centralauth'
|
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 " |
$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 |
$wgCentralAuthCookiesP3P
|
true
|
Specify a P3P header value to be used when setting CentralAuth cookies on the login wiki ($wgCentralAuthLoginWiki ).
When set Set false to disable sending the P3P header altogether. Note this will likely break the auto-login check in IE, unless the header is being set globally elsewhere (e.g. in the webserver). Otherwise, whatever string is assigned here will be sent as the value of the P3P header. @var bool|string |
$wgCentralAuthCreateOnView
|
false
|
If true , local accounts will be created for active global sessions on any page view. This is kind of creepy, so we're gonna have it off for a little bit.
With other default options, the local auto creation will be held off until an active login attempt, while global sessions will still automatically log in those who already have a merged account. |
$wgCentralAuthRC
|
[]
|
Array of settings for sending the CentralAuth events to the RC Feeds.
@example $wgRCFeeds['example'] = array( 'uri' => "udp://localhost:1336", ); |
$wgCentralAuthLockedCanEdit
|
[]
|
List of local pages global users may edit while being globally locked. |
$wgDisableUnmergedEditing
|
false
|
Disable editing for non-global accounts (except on NS_USER_TALK and NS_PROJECT_TALK ).
|
$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 |
$wgCentralAuthUseEventLogging
|
false
|
Use the EventLogging extension to measure various activities. |
$wgCentralAuthPreventUnattached
|
false
|
Don't allow new unattached accounts to be created.
@var bool |
$wgCentralAuthEnableGlobalRenameRequest
|
false
|
Feature flag for Special:GlobalRenameRequest .
@var bool |
$wgCentralAuthCheckSULMigration
|
false
|
Enable special logic to attempt to ease the user facing impact of forced user migrations.
@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 |
$wgCentralAuthUseSlaves
|
false
|
Try to use slave DBs for reads instead of the master all the time.
@var bool |
$wgOverrideCentralIdLookupProvider
|
true
|
Set false if you really want to use 'local' rather than 'CentralAuth' for $wgCentralIdLookupProvider . This isn't the default because using CentralAuth is almost always what you want if CentralAuth is installed.
@var bool |
$wgGlobalRenameBlacklist
|
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, see @var Title|string|null |
$wgGlobalRenameBlacklistRegex
|
false
|
Whether the list in $wgGlobalRenameBlacklist is using regular expressions. If set to false , users will be matched literally, if set to true the username will be tested against the regular expressions (provided that they are valid).
@var bool |
$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 |
Old configuration parameters
parameter | lifetime | default | comment |
---|---|---|---|
$wgCentralAuthAutoNew
|
MediaWiki 1.12–1.26 (2a97957–32276b0) | false
|
If true , new account registrations will be registered globally if the username hasn't been used elsewhere.
|
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-admin
|
Read-only access to global account status | Not applicable | Inactive; defunct |
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
$wgSharedDB
- Global session threat assessment
- w:Wikipedia:Integrated watchlists
- CentralAuth control flow
- wikitech:Stuck global renames
Esta extensão está sendo usado por um ou mais projetos da Wikimedia. Isto significa que, provavelmente, a extensão é estável e funciona bem o suficiente para ser utilizada em sites 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. |
This extension is included in the following packages and/or wiki farms: This is not an authoritative list. Some wiki farms/hosts may contain this extension even if they are not listed here. Always check with your wiki farms/hosts or bundle to confirm. |