Что там с Oauth 2.0 ?



  • Добрый день, посетители форума. Недавно вышла заметка о том, что Freeland с недавнего времени использует Oauth 2.0. Правда в тех постам, где это было написано была ссылка только на сайт Oauth 2.0, а на документацию же ссылок не было. Непонятно, как можно интегрировать аккаунты Freeland с Oauth. Непонятно, как и где регистрировать приложение для работы с Oauth. Хотелось бы хотя увидеть документацию.


  • administrators

    @zhenialeks Добрый день. Действительно документации пока толком нету и процесс еще налаживается (хотя технически работает). У нас уже есть ряд сервисов, которые используют oAuth фриленда и процесс регистрации ручной. Если вы хотите разегестрировать приложение, зарегестрируйтесь в личном кабинете (https://profile.mfcoin.net) и напишите мне (желательно в телегарам alex_mamchenkov):

    1. Имя/Email вашего аккаунта в личном кабинете (к нему будет делаться привязка приложения)
    2. Имя вашего приложения (или домен где оно будет находиться, для отображения пользователям при авторизации)
    3. Callback URL вашего приложения, куда редиректить пользователей после авторизации

    Я вам выдам ClientId и ClientSecret который вы сможете использовать для авторизации и получение базовых данных о пользователе.

    Пример класса User на PHP для работы с oAuth:

    namespace App;
    
    use GuzzleHttp\Client as HttpClient;
    
    class User
    {
        protected $client = null;
    
        protected $config = [];
    
        public function __construct($config)
        {
            $this->config = array_merge($this->config, $config);
            $this->client = new HttpClient;
        }
    
        public function getToken($code) {
            $response = $this->client->post("{$this->config['oauth_url']}/oauth/token", [
                'form_params' => [
                    'grant_type' => 'authorization_code',
                    'client_id' => $this->config['client_id'],
                    'client_secret' => $this->config['client_secret'],
                    'redirect_uri' => $this->config['redirect_url'],
                    'code' => $code
                ]
            ]);
    
            return $this->parseResponse($response);
        }
    
        public function getUserInfo($token)
        {
            $response = $this->client->get("{$this->config['oauth_url']}/api/user", [
                'headers' => [
                    'Authorization' => "Bearer $token",
                    'Accept' => "application/json"
                ]
            ]);
    
            return $this->parseResponse($response);
        }
    
        public function oauthRedirect()
        {
            $query = http_build_query([
                'client_id' => $this->config['client_id'],
                'redirect_url' => $this->config['redirect_url'],
                'response_type' => 'code',
                'scope' => ''
            ]);
            $this->redirect("{$this->config['oauth_url']}/oauth/authorize?$query");
        }
    
        protected function parseResponse($response)
        {
            return json_decode((string) $response->getBody(), true);
        }
    
        public function redirect($url)
        {
            header("Location: $url");
        }
    }
    

    Параметры конфига:

    • client_id - это ваш ClientId что я выдам
    • client_secret - это ваш SecretKey что я выдам
    • oauth_url - https://profile.mfcoin.net
    • redirect_url - это Callback URL вашего приложения, что вы дадите мне при запросе на регистрацию приложения

    Пример index.php вашего приложения для авторизации пользователя:

    include('config.php');
    
    use App\User;
    
    if (empty($_SESSION) || !isset($_SESSION['user'])) {
        $user = new User($config);
        $user->oauthRedirect();
        exit();
    }
    
    print "You are logged in!";
    var_dump($_SESSION);
    

    Пример callback.php прямую ссылку на который вы дадите мне как Callback URL:

    use App\User;
    
    include('config.php');
    
    $user = new User($config);
    
    $data = $user->getToken($_GET['code']);
    $_SESSION['user'] = $user->getUserInfo($data['access_token']);
    $user->redirect("index.php");
    
    exit();
    

    Если есть еще какие-то вопросы по этой теме - пишите мне.



  • @alex_mamchenkov Благодарю