Клиентская OAuth авторизация в сети Одноклассники, используя Delphi 7

Начал заниматься этой темой и не нашел более менее актуальных статей на данный момент. Большинство из них написаны более двух-трёх лет назад и некоторые моменты всё же  изменились.

Всё начинается с создания и регистрации на ok.ru своего приложения. Хотя этот процесс более менее описан, но есть кое какие нюансы:

pril

  • в списке разрешенных адресов нужно указать адреса  редиректа redirect_uri и использовать только их, иначе при авторизации с будет выведена ошибка об использовании неразрешенного адреса. Рекомендуется адрес писать с https, т.к Одноклассники с какого-то времени серьезно занялись проблемой защищенности соцсети и их сервер может при возможности ругаться по этому поводу;
  • нужно поставить галку чекбокса о разрешении OAuth авторизации, иначе авторизации по этому протоколу не будет;
  • у только что созданного приложения нет практически никаких прав: отсутствует доступ к группам и право использовать токены (то есть все те, что отмечены на картинке ниже красными галочками). Их нужно запрашивать у поддержки по адресу api-support@ok.ru. После того, как разрешения будет получены, они появятся на странице приложения.

prava

Дальше переходим непосредственно к авторизации. Кинем на форму компонент Edit и WebBrowser. Edit1 будет отображать адресную строку браузера WebBrowser.

form1

Важно правильно составить только строку авторизации. Сам код (использую synapse библиотеку):

unit Unit2;
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Forms,
Dialogs, StdCtrls,synacode,httpsend,ssl_openssl, OleCtrls, SHDocVw, Menus,
ComCtrls, ExtCtrls, Buttons, ActiveX,ClipBrd;
 
type
TForm2 = class(TForm)
WebBrowser1: TWebBrowser;
Edit1: TEdit;
procedure FormShow(Sender: TObject);
 
procedure SaveOptions;
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
private
{ Private declarations }
public
{ Public declarations }
end;
 
var
Form2: TForm2;
 
implementation
 
{$R *.dfm}
 
procedure TForm2.FormShow(Sender: TObject);
begin
Form2.WebBrowser1.Navigate('https://connect.ok.ru/oauth/authorize?client_id=ваш_id&scope=GROUP_CONTENT;VALUABLE_ACCESS;LONG_ACCESS_TOKEN&response_type=token&redirect_uri='+EncodeURL(AnsiToUtf8('https://api.ok.ru/blank.html'))+'&layout=w');
end;
 
procedure TForm2.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
Edit1.Text:=URL;
end;
 
end.

Примечания к коду:

  • В строке client_id=ваш_id нужно, как очевидно, поставить идентификатор своего приложения.
  • redirect_uri=’+EncodeURL(AnsiToUtf8(‘https://api.ok.ru/blank.html’)) — это строка кодируется и преобразовывается, чтобы при ее передаче не возникали спецсимволы.
  • https://api.ok.ru/blank.html — это адрес редиректа, сюда можно поставить что угодно, но, главное, чтобы совпадало с адресом в настройках приложения на ok.ru.

Компилируем и запускаем. Сразу браузер перейдет по строке авторизации и предложит ввести логин и пароль.

login

после правильного ввода логина и пароля, браузер перейдет к строке редиректа, в которой через символ решетки будет указаны  access_token и  session_secret_key

asse

Собственно, получив эти два значения мы можем пользоваться методами API OK и отправлять запросы. Задача выполнена.

P.S. Конечно, большинство интересуются методами, связанными с поиском пользователей. Но таких методов, к сожалению, нет и найти конкретного человека или группу людей по своему запросу не получится. Одноклассники таят эти методы в своих недрах и никого к ним не подпускают. Поэтому так мало информации по работе с методами этой соцсети, т.к. функционал предоставляет очень скудный.

Приложение
 
Библиотека Synapse (1.0 Мб)

Вам понравиться

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *