Project

General

Profile

Požadavek #946

Požadavek #13: API

Autentizace a autorizace API

Added by Ondřej Fibich about 6 years ago. Updated about 6 years ago.

Status:
Uzavřený
Priority:
Normální
Category:
Jádro systému
Target version:
Start date:
10/20/2014
Due date:
% Done:

100%

Estimated time:
14.00 h

Description

Autentizace bude nezávislá na uživatelských účtech FreenetISu. Jelikož se účty vytvářejí pro aplikace napojené na systém a ne pro uživatele. Autorizaci nemá cenu řešit složitě, jelikož by ji ve výsledku skoro nikdo neřešil. Důležitý je IMHO pouze přístup s omezením čtení pro nedůvěryhodné protějšky a v ojedinělých případech přístup pouze do částí API (pro paranoidní :-)).

Požadavek na zakázání čtení lze vyřešit filtrováním HTTP požadavků, tj. pokud je zakázáno tak se propustí pouze HTTP požadavky s GET metodou. U omezení na cesty to lze učinit podobně.

Datová skruktura

Tabulka api_accounts s atributy id, username, token (obdoba hesla, ale hash o 60 znacích), enabled (pro dočasné zakázání účtu), readonly (flag povolující pouze GET požadavky), allowed_paths (povolené cesty v API - defaultně /* tj. povoleno vše, jinak je to seznam URL cest oddělených čárkou s možností použítí zástupného znaku *) bude sloužit pro uchování účtů k API.

U API je důležité logování, a proto vznikne také tabulka api_account_logs s atributy id, type, date, description (popis požadavku k API - pouze uněkterý typů), responsible_user_id (odpovědný uživatel - pouze u některý typů). Logy budou použity k logování požadaků k API, ale také jejich modifikací uživatelem FreenetISu. V budoucnu mohou složit i k omezení počtu dotazů/uživatel/časová jednotka. Zakladní typy logů budou:
  • požadavek čtení (GET)
  • požadavek na vytvoření (POST)
  • požadavek na změnu (PUT)
  • požadavek na odstranění (DELETE)
  • vytvoření účtu
  • změna detailů účtu
  • změna tokenu účtu

Implementace

Autorizace a autentifikace bude probíhat v API controleru před propuštěním požadavku do koncových služeb. Jelikož je nutné podporovat i instalace bez HTTPS je ideální použít HTTP Digest Access Authentication.

Konfigurační rozhraní

Jednoduchý grid s editačními formuláři a odkazem na tabulku s logy v sekci Nastavení -> API.

#1

Updated by Ondřej Fibich about 6 years ago

Nakonec implementováno i autentizace HTTP basic, jelikož se pro něj snadněji píší klientské aplikace. Vybraný typ autentizace lze vynutit pomocí Settings volby.

Vše ohledně autentizace zabaleno do samostatné knihovny: https://github.com/freenetis/php-http-auth-server

#2

Updated by Ondřej Fibich about 6 years ago

  • Status changed from Nový to Uzavřený
  • % Done changed from 10 to 100

Použito v sadě změn sourceforge|r2381.

Also available in: Atom PDF