API:Login

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page API:Login and the translation is 100% complete.
Other languages:
Deutsch • ‎Deutsch (Sie-Form)‎ • ‎English • ‎Türkçe • ‎dansk • ‎español • ‎français • ‎italiano • ‎polski • ‎português • ‎português do Brasil • ‎русский • ‎українська • ‎العربية • ‎فارسی • ‎ไทย • ‎中文 • ‎文言 • ‎日本語 • ‎한국어

MediaWiki API puede requerir que tu aplicación o cliente proporcione credenciales de usuario autenticado e inicie sesión para (a) consultar información o acciones de modificación-de-datos (b) realizando grandes consultas con un mayor límite de solicitud.

Dos métodos para autenticar

Hay dos maneras para autenticar al MediaWiki Acción API:

Método 1. login

Los bots y otras aplicaciones no interactivas deben usar owner-OAuth consumer si está disponible, ya que es más seguro. Si no está disponible o no es aplicable al cliente, la acción login se puede usar con bot passwords.

API Documentación


action=login (lg)

(main | login)
  • This module only accepts POST requests.
  • Source: MediaWiki
  • License: GPL-2.0-or-later

Log in and get authentication cookies.

This action should only be used in combination with Special:BotPasswords; use for main-account login is deprecated and may fail without warning. To safely log in to the main account, use action=clientlogin.

Parameters:
lgname

User name.

lgpassword

Password.

lgdomain

Domain (optional).

lgtoken

A "login" token retrieved from action=query&meta=tokens

Ejemplo

Petición de CORREO

lgtoken en la petición anterior se recupera de API:Tokens

Respuesta

{  
   "login": {  
      "lguserid": 21,
      "result": "Success",
      "lgusername": "William"
   }
}

Código de muestra

MediaWiki JS

/*
	login.js
	MediaWiki API Demos
	Demo of `Login` module: Sending request to login
	MIT License
*/

var api = new mw.Api();

api.login( 'your_bot_username', 'your_bot_password' ).done( function ( data ) {
	console.log( 'You are logged in as ' + data.login.lgusername );
} );

JavaScript

/*
	edit.js

	MediaWiki API Demos
	Demo of `Login` module: Sending post request to login

	MIT license
*/

var request = require( 'request' ).defaults( { jar: true } ),
	url = 'https://test.wikipedia.org/w/api.php';

// Step 1: GET request to fetch login token
function getLoginToken() {
	var params = {
		action: 'query',
		meta: 'tokens',
		type: 'login',
		format: 'json'
	};

	request.get( { url: url, qs: params }, function ( error, res, body ) {
		var data;
		if ( error ) {
			return;
		}
		data = JSON.parse( body );
		loginRequest( data.query.tokens.logintoken );
	} );
}

// Step 2: POST request to log in.
// Use of main account for login is not
// supported. Obtain credentials via Special:BotPasswords
// (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword
function loginRequest( loginToken ) {
	var params = {
		action: 'login',
		lgname: 'bot_username',
		lgpassword: 'bot_password',
		lgtoken: loginToken,
		format: 'json'
	};

	request.post( { url: url, form: params }, function ( error, res, body ) {
		if ( error ) {
			return;
		}
		console.log( body );
	} );
}

// Start From Step 1
getLoginToken();

PHP

<?php

/*
    login.php

    MediaWiki API Demos
    Demo of `Login` module: Sending post request to login
    MIT license
*/

$endPoint = "https://test.wikipedia.org/w/api.php";

$login_Token = getLoginToken(); // Step 1
loginRequest( $login_Token ); // Step 2

// Step 1: GET request to fetch login token
function getLoginToken() {
	global $endPoint;

	$params1 = [
		"action" => "query",
		"meta" => "tokens",
		"type" => "login",
		"format" => "json"
	];

	$url = $endPoint . "?" . http_build_query( $params1 );

	$ch = curl_init( $url );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
	curl_setopt( $ch, CURLOPT_COOKIEJAR, "/tmp/cookie.txt" );
	curl_setopt( $ch, CURLOPT_COOKIEFILE, "/tmp/cookie.txt" );

	$output = curl_exec( $ch );
	curl_close( $ch );

	$result = json_decode( $output, true );
	return $result["query"]["tokens"]["logintoken"];
}

// Step 2: POST request to log in. Use of main account for login is not
// supported. Obtain credentials via Special:BotPasswords
// (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword
function loginRequest( $logintoken ) {
	global $endPoint;

	$params2 = [
		"action" => "login",
		"lgname" => "your_bot_username",
		"lgpassword" => "your_bot_password",
		"lgtoken" => $logintoken,
		"format" => "json"
	];

	$ch = curl_init();

	curl_setopt( $ch, CURLOPT_URL, $endPoint );
	curl_setopt( $ch, CURLOPT_POST, true );
	curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params2 ) );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
	curl_setopt( $ch, CURLOPT_COOKIEJAR, "/tmp/cookie.txt" );
	curl_setopt( $ch, CURLOPT_COOKIEFILE, "/tmp/cookie.txt" );

	$output = curl_exec( $ch );
	curl_close( $ch );

	echo( $output );
}

Python

#!/usr/bin/python3

"""
    login.py

    MediaWiki API Demos
    Demo of `Login` module: Sending post request to login
    MIT license
"""

import requests

S = requests.Session()

URL = "https://www.mediawiki.org/w/api.php"

# Retrieve login token first
PARAMS_0 = {
    'action':"query",
    'meta':"tokens",
    'type':"login",
    'format':"json"
}

R = S.get(url=URL, params=PARAMS_0)
DATA = R.json()

LOGIN_TOKEN = DATA['query']['tokens']['logintoken']

print(LOGIN_TOKEN)

# Send a post request to login. Using the main account for login is not
# supported. Obtain credentials via Special:BotPasswords
# (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword

PARAMS_1 = {
    'action':"login",
    'lgname':"your_bot_username",
    'lgpassword':"your_bot_password",
    'lgtoken':LOGIN_TOKEN,
    'format':"json"
}

R = S.post(URL, data=PARAMS_1)
DATA = R.json()

print(DATA)
A partir de MediaWiki 1.27, no se admite el uso de la cuenta principal para iniciar sesión. Obtén credenciales a través de Special:BotPasswords o usa el método clientlogin. Iniciar sesión y permanecer conectado requiere que tu cliente maneje correctamente las cookies HTTP en todas las peticiones. En el ejemplo anterior, mostramos cómo un objeto de sesión requests.Session() ayuda a mantener las cookies.

Errores posibles

Código Información
Failed Nombre de usuario o contraseña ingresado incorrecto. Por favor inténtalo de nuevo.
WrongToken Token proporcionado no válido
NeedToken `lgtoken` No proporcionado
Aborted iniciar sesión utilizando la contraseña de la cuenta principal en lugar de con las contraseñas bot
mustpostparams Se encontraron los siguientes parámetros en la cadena de la consulta, pero deben estar en el cuerpo del POST: $1.

Método 2. clientlogin

Las aplicaciones interactivas, como editores personalizados o aplicaciones de vigilancia que proporcionan un servicio sin intención de reemplazar completamente el sitio web o las aplicaciones móviles que apuntan a reemplazar completamente el acceso a la interfaz de usuario basada en la web, tendrían que utilizar la acción clientlogin. Sin embargo, uno debería preferir usar OAuth si está disponible para autenticar la herramienta, ya que es más fácil y más seguro. Este módulo está disponible desde MediaWiki 1.27.

API Documentación


action=clientlogin (login)

(main | clientlogin)
  • This module only accepts POST requests.
  • Source: MediaWiki
  • License: GPL-2.0-or-later

Log in to the wiki using the interactive flow.

The general procedure to use this module is:

  1. Fetch the fields available from action=query&meta=authmanagerinfo with amirequestsfor=login, and a login token from action=query&meta=tokens.
  2. Present the fields to the user, and obtain their submission.
  3. Post to this module, supplying loginreturnurl and any relevant fields.
  4. Check the status in the response.
    • If you received PASS or FAIL, you're done. The operation either succeeded or it didn't.
    • If you received UI, present the new fields to the user and obtain their submission. Then post to this module with logincontinue and the relevant fields set, and repeat step 4.
    • If you received REDIRECT, direct the user to the redirecttarget and wait for the return to loginreturnurl. Then post to this module with logincontinue and any fields passed to the return URL, and repeat step 4.
    • If you received RESTART, that means the authentication worked but we don't have a linked user account. You might treat this as UI or as FAIL.
Parameters:
loginrequests

Only use these authentication requests, by the id returned from action=query&meta=authmanagerinfo with amirequestsfor=login or from a previous response from this module.

Separate values with | or alternative.
Maximum number of values is 50 (500 for clients allowed higher limits).
loginmessageformat

Format to use for returning messages.

One of the following values: html, none, raw, wikitext
Default: wikitext
loginmergerequestfields

Merge field information for all authentication requests into one array.

Type: boolean (details)
loginpreservestate

Preserve state from a previous failed login attempt, if possible.

Type: boolean (details)
loginreturnurl

Return URL for third-party authentication flows, must be absolute. Either this or logincontinue is required.

Upon receiving a REDIRECT response, you will typically open a browser or web view to the specified redirecttarget URL for a third-party authentication flow. When that completes, the third party will send the browser or web view to this URL. You should extract any query or POST parameters from the URL and pass them as a logincontinue request to this API module.

logincontinue

This request is a continuation after an earlier UI or REDIRECT response. Either this or loginreturnurl is required.

Type: boolean (details)
logintoken

A "login" token retrieved from action=query&meta=tokens

This parameter is required.
*
This module accepts additional parameters depending on the available authentication requests. Use action=query&meta=authmanagerinfo with amirequestsfor=login (or a previous response from this module, if applicable) to determine the requests available and the fields that they use.
Examples:
Start the process of logging in to the wiki as user Example with password ExamplePassword.
api.php?action=clientlogin&username=Example&password=ExamplePassword&loginreturnurl=http://example.org/&logintoken=123ABC [open in sandbox]
Continue logging in after a UI response for two-factor auth, supplying an OATHToken of 987654.
api.php?action=clientlogin&logincontinue=1&OATHToken=987654&logintoken=123ABC [open in sandbox]

Ejemplo 1: Proceso para un wiki sin extensiones especiales de autenticación

Petición de CORREO

Obtén token login en la petición anterior a través de API:Tokens .

Respuesta

{  
   "clientlogin":{  
      "status":"PASS",
      "username":"William"
   }
}

Código de ejemplo

Ejemplo 2: Proceso para un wiki con extensiones especiales de autentificación

Una wiki con extensiones de autenticación especiales como ConfirmEdit (captchas), OpenID , OATHAuth (dos factores de autenticación) puede tener un proceso de autentificación más complicado. Los campos específicos también pueden ser necesarios en ese caso, cuya descripción se puede obtener de la consulta de API:Authmanagerinfo .

Paso 1: Responde el Captcha y selecciona OpenID autentificación

El cliente estaría esperando para redirigir el navegador del usuario al proporcionado redirecttarget. El proveedor de OpenID autentificaría y redirigiría a Special: OpenIDConnectReturn en el wiki, que validaría la respuesta de OpenID y luego redirigiría al

loginreturnurl proporcionado en el primer CORREO a la API con el código y los parámetros

state agregados. El cliente recupera el control del proceso en este punto y realiza su próxima solicitud de API.

Paso 2: Volver de OpenID

Ahora el cliente necesita pedirle al usuario que verifique su aplicación de autentificación de dos factores para el código actual y que la envíe de vuelta al servidor para continuar el proceso de autenticación.

Paso 3: autentificación de Dos factores

Nota: En ciertos casos, es posible recibir una respuesta REINICIAR, por ejemplo, si la extensión OpenID Connecta no tenía asignado para la cuenta OpenID a ningún usuario local. En este caso, el cliente puede reiniciar el proceso de inicio de sesión desde el principio o puede cambiar a creación de cuenta, en cualquier caso pasando el parámetro loginpreservestate o createpreservestate para preservar algún estado.

Notas adicionales

  • En wikis que permiten edición anónima, es posible editar a través del API sin iniciar sesión, pero es altamente recomendable que inicies sesión. En wikis privados, es necesario iniciar sesión para usar

cualquier funcionalidad API .

  • Es recomendado crear una cuenta de usuario separada para tu aplicación. Esto es especialmente importante si tu aplicación está llevando a cabo edición automatizada o invocando consultas grandes o rendimiento-intensivo. Con eso, es fácil rastrear los cambios realizados por la aplicación y aplicar derechos especiales a la cuenta de la aplicación.
  • Si estás enviando una petición que debería ser hecha por un usuario conectado, añade el parámetro assert=user a la petición que estás enviando en orden de verificar si el usuario ha iniciado sesión. Si el usuario no ha iniciado sesión, un error assertuserfailed Será devuelto.
  • Para verificar si una cuenta tiene derechos de bot, añade el parámetro assert=bot a la petición. Si la cuenta no tiene derechos de bot, un código error assertbotfailed será retornado.

Ve también