Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Authenticate with a Minecraft account
* Authenticate with a Minecraft account
* After a few fails, Mojang server will deny all requests, so use a proxy to bypass that limit
* @example $account = authenticate('', '123456', '');
* @param string $id Minecraft username or Mojang email
* @param string $password Account's password
* @param string $proxy Proxy address like: "ip:port"
* @return array|bool Array with id and name, false if authentication failed
function authenticate($id, $password, $proxy = null) {
if (!function_exists('curl_init') or !extension_loaded('curl')) {
return false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
if ($proxy) curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
'agent' => array(
'name' => 'Minecraft',
'version' => 1,
'username' => $id,
'password' => $password
$output = curl_exec($ch);
$json = json_decode($output, true);
if (!empty($json) and is_array($json) and array_key_exists('selectedProfile', $json) and is_array($json['selectedProfile'])
and array_key_exists('id', $json['selectedProfile']) and array_key_exists('name', $json['selectedProfile'])) {
return array(
'id' => $json['selectedProfile']['id'],
'name' => $json['selectedProfile']['name']
return false;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment