Форум поддержки модулей от kaliostro  

Вернуться   Форум поддержки модулей от kaliostro > DataLife Engine > Запрос на создание хаков

Запрос на создание хаков Запросы на модификации DataLife Engine.

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.01.2014, 00:47   #1
viktor6
Junior Member
 
Регистрация: 19.04.2012
Сообщений: 29
viktor6 is on a distinguished road
По умолчанию Wargaming.Net ID (OpenID) + vBulletin 3.8.7

Нужен мод для авторизации через Wargaming.Net ID (OpenID)? У самого знаний не хватает.
Для знающих людей какраз открытый бета тест https://ru.wargaming.net/developers/

чтобы была авторизация как на этих сайтах
http://wotreplays.ru
http://res-mods.ru

Какая стоимость этого мода будет?
viktor6 вне форума   Ответить с цитированием
Старый 09.01.2014, 18:56   #2
viktor6
Junior Member
 
Регистрация: 19.04.2012
Сообщений: 29
viktor6 is on a distinguished road
По умолчанию Re: Wargaming.Net ID (OpenID) + vBulletin 3.8.7

От небольшая информация

Этап первый. Авторизация.
Теория:

Задача: на основе WG API разработать модуль авторизации на сайте.
Необходимый результат: авторизация в один клик.
Для аутентификации пользователей на данный момент есть три метода
auth/login - этот метод используется, непосредственно, для авторизации.
auth/prolongate - с помощью этого метода мы можем продлить access_token без участия пользователя (а так же получить некоторые дополнительные данные)
auth/logout - метод для уничтожения access_token

Стоит заметить, что в примере идет описание работы серверного приложения.
Метод auth/login разработан для получения сторонним приложением (нашим сайтом) ключа доступа - access_token - который дает возможность получить детальные данные о игроке WG, если тот дает на это согласие.
Да, на основе метода можно создать модуль авторизации, но это не основная задача метода.
Вариант решения данной задачи я обсуждал с MustBeDead, его комментарий:

На текущий момент access_token необходим всего лишь для получения приватных данных в запросах.
Вы же пытаетесь интегрировать получение ключа доступа к приватным данным (access_token) с авторизацией на портале.
Мне неизвестна специфика работы Вашего портала, поэтому сложно рекомендовать что-то конкретное.
Можно использовать и предложенный Вами вариант, как временный.


Обратите внимание!
Принято решение расширить возможности метода auth/login и будет введено разделение (при успешно введенных сведениях):
1) На один URL будет сделана переадресация пользователя;
2) На второй будет отправлены сведения по авторизации (методом POST или GET).
Это значит, что в ближайшее время работа метода изменится, нужно будет оперативно отреагировать и изменить модуль авторизации.

Вернемся к теории.
Что мы будем делать:
Генерировать ссылку для перенаправления пользователя.*
Перенаправлять пользователя на страницу ввода емейла, пароля.
Ждать возврата пользователя.
Проверять данные, которые получим после возврата пользователя
ну и дальше по обстоятельствам =)
*В принципе,наверно, ссылку можно сгенерировать всего один раз, а использовать многократно... но передавая одни и те же параметры - мы получаем разные ссылки - круто же, да? Именно поэтому мы и будем генерировать ссылку каждый раз. :tongue:
А теперь подробнее.
1.
Для того, что бы wargaming узнал, с какого именно сайта пришел пользователь, и куда его отправить после авторизации, нам нужно получить специальную ссылку.
Ссылка генерируется самим wg на основе нескольких параметров, которые мы и передадим.
$APPLICATION_ID - это (барабанная дробь:smiles application_id нашего приложения.
$SITE_ADR - это параметр redirect_uri - ссылка на наш скрипт обработчик. Она будет иметь вид http://example.com/auth.php
nofollow=1 Значение true параметра nofollow говорит о том, что нам нужно получить именно ссылку
Наш auth.php будет выполнять сразу две задачи: генерировать ссылку, и производить авторизацию. (А со временем,в примере, и logout добавится)
Для того, что бы сказать нашему скрипту, что нам нужно сгенерировать ссылку, передадим в POST запросе параметр GetUrl
2.
Переадресовывать пользователя мы будем с помощью javascript.
Используя js мы сможем написать "Загрузка..." (или вставить loader.gif) после клика по кнопочке "Войти" - это всегда выглядит красиво.
В то время, когда пользователь восхищается надписью (ну или картинкой), мы отправим запрос к api, получим ссылку, и наконец таки перенаправим пользователя по ней.
3.
После того как игрок авторизируется на сайте WG и разрешит нашему сайту просматривать его детальную статистику он будет перенаправлен на
$SITE_ADR?&status=ok&access_token=XXX&nickname=STR EJlA&account_id=422766&expires_at=1389218111
Если не произойдет никаких ошибок...
Таким образом наш скрипт получит данные
status access_token nickname account_id expires_at
Но все эти данные нужно проверить!
4.
Если мы планируем делать именно авторизацию, то мы должны точно знать, что полученные данные правдивы и переданы именно с сайта WG, а не прописаны вручную.**
** Вот именно из-за этого момента и будет переделана работа метода - на данный момент мы не можем точно знать, пришел ли игрок с сайта wargaming с этими параметрами или сам набрал их в адресной строке.***
*** $_SERVER['HTTP_REFERER'] не дает полной гарантии.
Для того, что бы проверить правдивость данных мы воспользуемся методом auth/prolongate*
*Это один из вариантов. Кроме пролонга мы можем так же сделать запрос на account/info с полученным токеном - если удастся получить приватные данные, значит все ок.
Воспользовавшись им мы сможем проверить, действительный ли access_token мы получили, и кому (account_id) он принадлежит.
5.
Если все в порядке, мы запишем нужные данные в БД, установим пользователю куки (или пропишем данные в сессию), и будем знать, что пользователь авторизирован.

Практика

Поскольку на написание теории ушло больше времени чем я планировал, я вынужден оставить здесь, пока, только одно из сообщений, переписки с MustBeDead.

Добрый день. Спасибо за детальное объяснение, однако вопросы все же возникли.
Использую второй вариант (API).
Получаю ссылку для перенаправления юзера:
Spoiler

js
PHP код:
$.ajax({

type"POST",

urlSERVER_ADR+"sys/auth.php",

data"GetUrl=1",

success: function(result){

window.location=result;

}

}); 
php
PHP код:
...

if(
$_POST[GetUrl]){

$url 'https://api.worldoftanks.ru/wot/auth/login/';

$fields 'application_id='.APPLICATION_ID.'&redirect_uri='.SITE_ADR.'sys/auth.php&nofollow=1&expires_at=300';

$ch curl_init();

curl_setopt($chCURLOPT_URL$url);

curl_setopt($chCURLOPT_POSTtrue);

curl_setopt($chCURLOPT_HEADER0);

curl_setopt($chCURLOPT_AUTOREFERER1);

curl_setopt($chCURLOPT_SSL_VERIFYPEER0);

curl_setopt($chCURLOPT_SSL_VERIFYHOST0);

curl_setopt($chCURLOPT_USERAGENTMY_USER_AGENT);

curl_setopt($chCURLOPT_POSTFIELDS$fields);

curl_setopt($chCURLOPT_RETURNTRANSFER1);

curl_setopt($chCURLOPT_TIMEOUT60*60);

$returndata json_decode(curl_exec($ch), true);

curl_close($ch);

echo 
$returndata[data][location];

exit();

}

... 
он вводит мыло-пас, подтверждает, что доверяет и возвращается на скрипт:


PHP код:
if($_GET[status]){

if(isset(
$_GET[status]) and isset($_GET[access_token]) and isset($_GET[nickname]) and isset($_GET[account_id]) and isset($_GET[expires_at])){

  if(
$_GET[expires_at])){$error_code=$_GET 

;}else{$error_code="КОД НЕ ЯВЛЯЕТСЯ ЧИСЛОМ!";}
PHP код:
critical_error(403,"Ошибка авторизации. Код ошибки: $error_code");

}

$step2=prolongate($_GET[access_token]);

if(
$step2[account_id]==$_GET[account_id] and id_in_login($step2[account_id])==$_GET[nickname]){

if(!
id_in_login_local($_GET[account_id])){//первый вход

fifo($_GET[account_id],"create");//ставим в очередь на создание

SetCookie("first_autorization","1",time()+60*60*24*31*12,'/');

}else{

auth($_GET[account_id],$step2[access_token],$step2[expires_at]);

}

session_start();

$_SESSION['login']=$_GET[nickname];

$_SESSION['id']=$_GET[account_id];

$_SESSION['access_token']=$step2[access_token];

$_SESSION['expires_at']=$step2[expires_at];

header("Location: ".SITE_ADR.$_GET[nickname]);

exit();

}else{

critical_error(403,"Ошибка авторизации");

}

}


Где я проверяю, основные данные.
Если "на первый взгляд" все в порядке,
то используется ф-я prolongate, которая использует метод auth/prolongate и тем самым подтверждает - что данным которые пришли в get запросе можно доверять:


PHP код:
function prolongate($access_token){

$expires_at=14*24*60*60;

$url 'https://api.worldoftanks.ru/wot/auth/prolongate/';

$fields 'application_id='.APPLICATION_ID.'&access_token='.$access_token.'&expires_at='.$expires_at;

$ch curl_init();

curl_setopt($chCURLOPT_URL$url);

curl_setopt($chCURLOPT_POSTtrue);

curl_setopt($chCURLOPT_HEADER0);

curl_setopt($chCURLOPT_AUTOREFERER1);

curl_setopt($chCURLOPT_SSL_VERIFYPEER0);

curl_setopt($chCURLOPT_SSL_VERIFYHOST0);

curl_setopt($chCURLOPT_USERAGENTMY_USER_AGENT);

curl_setopt($chCURLOPT_POSTFIELDS$fields);

curl_setopt($chCURLOPT_RETURNTRANSFER1);

curl_setopt($chCURLOPT_TIMEOUT60*60);

$returndata json_decode(curl_exec($ch), true);

curl_close($ch);

if(
$returndata[status]=="ok"){

return(
$returndata[data]);

}else{

return(
0);

}


После проверки if($step2[account_id]==$_GET[account_id] and id_in_login($step2[account_id])==$_GET[nickname]){
я могу доверять всем полученным данным от пользователя, а access_token и expires_at уже новые.
Ну и напоследок ф-я auth пишет данные в БД

Вроде все правильно, и что самое странное - даже работает =)

Подозреваю, что вместо домена, из redirect_uri, на странице подтверждения выводится "api.worldoftanks.ru", так-как домена в redirect_uri нет. :sceptic:
сейчас константа SITE_ADR это "http://109.162.81.28/"
соответственно redirect_uri = "http://109.162.81.28/sys/auth.php"



Взято тут

Последний раз редактировалось viktor6; 09.01.2014 в 19:16.
viktor6 вне форума   Ответить с цитированием
Старый 16.01.2014, 20:12   #3
viktor6
Junior Member
 
Регистрация: 19.04.2012
Сообщений: 29
viktor6 is on a distinguished road
По умолчанию Re: Wargaming.Net ID (OpenID) + vBulletin 3.8.7

эх жаль что тут нет знающих людей кторые могли бы сделать такую авторизацию если на воблу не получается то может на дле получится у кого нибуть?
viktor6 вне форума   Ответить с цитированием
Старый 20.01.2014, 21:55   #4
viktor6
Junior Member
 
Регистрация: 19.04.2012
Сообщений: 29
viktor6 is on a distinguished road
По умолчанию Re: Wargaming.Net ID (OpenID) + vBulletin 3.8.7

ребята ну помогите сделать уже весь инет перерыл нечего не нашол
вот какието файлы нашол но как их прикрутить к дле не могу понять
Вложения
Тип файла: zip openid.zip (7.0 Кб, 31 просмотров)

Последний раз редактировалось viktor6; 23.01.2014 в 20:26.
viktor6 вне форума   Ответить с цитированием
Старый 19.05.2014, 18:56   #5
viktor6
Junior Member
 
Регистрация: 19.04.2012
Сообщений: 29
viktor6 is on a distinguished road
По умолчанию Re: Wargaming.Net ID (OpenID) + vBulletin 3.8.7

Вот на чем остановился проблема с мылом так как варгейминг не отдает мыло, если его изменить в профиле то получается при повторной авторизации получается новый акаунт.
вот сайт для теста http://dle.plusnet.ks.ua
PHP код:
<script type="text/javascript" charset="utf-8">
 /*function login() {
 alert ("OKay");
  // document.forms[0].submit();
};*/
</script>

<?php

//=====================================================
// DataLife Engine 10.1
//-----------------------------------------------------
// Module for user authorization service
// 
//=====================================================




require 'functions.openid.php';
try
{
    
$openid=new LightOpenID('http://dle.plusnet.ks.ua/engine/modules/openid/openid.php');
    if(!
$openid->mode)
    {
        if(isset(
$_POST['openid_identifier']))
        {
            
$openid->identity=$_POST['openid_identifier'];
            
header('Location: '.$openid->authUrl());
        }
        }
    elseif(
$openid->mode=='cancel'$openid_e_message='Пользователь отменил аутентификацию!';
    else
    {
        if(
$openid->validate()) $openid_link=$openid->identity;
        else 
$openid_e_message='Пользователь не вошел';
        
//print_r($openid->getAttributes());
    
}
}
catch(
ErrorException $e){$openid_error=$e->getMessage();}

if(isset(
$openid_link))
{
$userpart explode("/"$openid_link);
$user explode("-"$userpart[4]);

//$openid_identity - ссылка на проифиль
//$user[0] - идентификатор (account_id)
//$user[1] - игровое имя (ник)

echo "Profile: $openid_link <br />
ID - 
$user[0] <br />
Nickname: 
$user[1]";
//Дальнейшие действия с переменными

/*REGISTER USER*/
    
$regpassword md5$user[0] );
    
$name trim$db->safesqlhtmlspecialchars$user[1], ENT_COMPAT$config['charset'] ) ) );    
    
$name preg_replace('#\s+#i'' '$name);    
    
$email $openid_link;
            
            
$add_time time() + ($config['date_adjust'] * 60);
            
$_IP get_ip();
            if( 
intval$config['reg_group'] ) < $config['reg_group'] = 4;
            
            
$row $db->super_query"SELECT * FROM " USERPREFIX "_users WHERE xfields = ".$user[0]."" );
        
        if (!
$row['user_id']) {
            
            
$db->query"INSERT INTO " USERPREFIX "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip) VALUES ('$name', '$regpassword', '$email', '$add_time', '$add_time', '" $config['reg_group'] . "', '', '', '', '".$user[0]."', '" $_IP "')" );
            
$id $db->insert_id();
            
            
        }
        else {
            
$id $row['user_id'];
            if (
$row['name']<>$user[1]) {
                
$db->super_query"UPDATE " USERPREFIX "_users SET name='".$user[1]."' WHERE user_id = ".$row['user_id']."" );
            }
        }
        
set_cookie"dle_user_id"$id365 );
        
set_cookie"dle_password"$user[0], 365 );
            
        
$_SESSION['dle_user_id'] = $id;
        
$_SESSION['dle_password'] = $user[0];
        
header('Location: '.$_SERVER["PHP_SELF"]); 
}
else
{
echo 
"<form method=\"post\"><input type=\"hidden\" name=\"openid_identifier\" value=\"ru.wargaming.net/id/\"></form>
<a href=\"#\" onclick=\"document.forms[0].submit()\"><img src=\"http://dle.plusnet.ks.ua/engine/modules/openid/visual-wot-logo.png\" align=\"center\" width=\"150px\"></a>"
;
}

?>
viktor6 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 20:41.


Powered by vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot