INEX SSO (INEX ID)

OpenID Connect

INEX ID არის ინექსის ერთიანი ავტორიზაციის სერვისი. მისი საშუალებით თქვენი მომხმარებელი თქვენს პლატფორმაზე შედის თავისი INEX-ის ანგარიშით — ცალკე რეგისტრაციისა და პაროლის გარეშე — ხოლო თქვენ იღებთ მის მუდმივ, უნიკალურ იდენტიფიკატორს (sub), რომლითაც შემდეგ ამანათს მის სახელზე ქმნით პირადი ნომრის ხელახლა მოთხოვნის გარეშე.

სტანდარტი

სერვისი სრულად ეფუძნება ღია სტანდარტებს: OpenID Connect 1.0 და OAuth 2.0 Authorization Code Flow + PKCE (RFC 7636). შესაბამისად, შეგიძლიათ გამოიყენოთ ნებისმიერი სერტიფიცირებული OIDC ბიბლიოთეკა (მაგ. openid-client Node.js-ისთვის, league/oauth2-client / jumbojett/openid-connect-php PHP-სთვის, Spring Security, ASP.NET Core OpenIdConnect, AppAuth მობილურისთვის) — ხელით დაწერა საჭირო არ არის.

რას იღებთ

  • ერთი ღილაკით შესვლა — „INEX-ით შესვლა“ — თქვენს ვებსა და მობილურ აპლიკაციაში.
  • რეგისტრაცია INEX-ის მხარეს: სახელი, გვარი, ელ. ფოსტა და ტელეფონი (ორივე კოდით დადასტურებული) და პირადი ნომერი. თქვენ მომხმარებლის მონაცემების შეგროვება აღარ გჭირდებათ.
  • Google და Apple ანგარიშით შესვლა, პაროლის აღდგენა და ანგარიშებს შორის გადართვა — ყველაფერი INEX ID-ის გვერდებზე.
  • მუდმივი იდენტიფიკატორი sub, რომელსაც ამანათის შექმნისას receiver.inexUserId ველში გადმოგვცემთ.

გარემოები

სატესტო (staging)
https://id-staging.inex.ge
საპროდაქშენო
https://id.inex.ge

Issuer ორივე გარემოში ზუსტად ასე იწერება (ბოლოში /-ის გარეშე) — id_token-ის iss ველი მას სიმბოლო-სიმბოლოს უნდა დაემთხვეს. Client ID-ები და secret-ები გარემოებს შორის არ ემთხვევა: სატესტოსა და საპროდაქშენოსთვის ცალ-ცალკე მიიღებთ.

Discovery დოკუმენტი

ყველა endpoint-ის მისამართი, მხარდაჭერილი scope-ები, claim-ები და ხელმოწერის ალგორითმი ქვეყნდება სტანდარტულ მისამართზე /.well-known/openid-configuration. OIDC ბიბლიოთეკების უმეტესობას მხოლოდ issuer-ის მისამართი სჭირდება — დანარჩენს თავად წაიკითხავს აქედან.

Endpoint-ები

Endpoint Method დანიშნულება
/.well-known/openid-configuration GET კონფიგურაციის დოკუმენტი (Discovery).
/oauth/authorize GET მომხმარებლის გადამისამართება შესასვლელად / დასარეგისტრირებლად.
/oauth/token POST კოდის გაცვლა ტოკენებზე, ტოკენის განახლება (სერვერიდან).
/userinfo GET მომხმარებლის მიმდინარე მონაცემები access token-ით.
/oauth/jwks GET id_token-ის ხელმოწერის შესამოწმებელი საჯარო გასაღებები (JWKS).
/oauth/logout GET INEX ID-იდან გამოსვლა (RP-Initiated Logout).

როგორ მუშაობს — ნაბიჯ-ნაბიჯ

  1. 1

    მომხმარებელი აჭერს „INEX-ით შესვლა“

    თქვენი სერვერი აგენერირებს state-ს, nonce-ს და PKCE წყვილს, ინახავს მათ მომხმარებლის სესიაში და ბრაუზერს გადაამისამართებს /oauth/authorize-ზე.

  2. 2

    ავტორიზაცია INEX ID-ზე

    მომხმარებელი შედის (ელ. ფოსტა/ტელეფონი + პაროლი, Google, Apple) ან რეგისტრირდება. თუ ბრაუზერში უკვე შესულია, ფორმა საერთოდ არ ჩანს — ის მაშინვე ბრუნდება უკან.

  3. 3

    დაბრუნება თქვენთან კოდით

    INEX ID ბრაუზერს აბრუნებს თქვენს რეგისტრირებულ redirect_uri-ზე ?code=…&state=… პარამეტრებით. ამოწმებთ, რომ state ემთხვევა შენახულს.

  4. 4

    კოდის გაცვლა ტოკენებზე

    თქვენი სერვერი POST /oauth/token-ით ცვლის კოდს და იღებს access_token-ს, refresh_token-ს და id_token-ს.

  5. 5

    id_token-ის შემოწმება

    ამოწმებთ ხელმოწერას (JWKS), iss-ს, aud-ს, exp-ს და nonce-ს. წარმატების შემთხვევაში იღებთ sub-ს და პროფილის მონაცემებს.

  6. 6

    მომხმარებლის მიბმა

    ინახავთ sub-ს თქვენს მომხმარებელთან. თუ ეს sub უკვე გაქვთ — ეს იგივე ადამიანია; თუ არა — ქმნით ახალ ლოკალურ ანგარიშს ან აბამთ არსებულს.

  7. 7

    ამანათის შექმნა

    შეკვეთის გაფორმებისას იძახებთ POST /integrators/parcels/create-ს და მიმღებს უთითებთ receiver.inexUserId = sub — პირადი ნომრის, სახელისა და ტელეფონის გარეშე.

მიერთების პროცესი

Client-ს (თქვენს აპლიკაციას) INEX-ის ტექნიკური გუნდი არეგისტრირებს. გამოგვიგზავნეთ თითოეული გარემოსთვის:

აპლიკაციის სახელი და ლოგო

ჩანს INEX ID-ის შესვლის გვერდზე: „თქვენი აპლიკაცია-ში შესვლა INEX-ით“. ლოგო — კვადრატული PNG/SVG.

ვებ-გვერდი, კონფიდენციალურობის პოლიტიკა, წესები და პირობები

ბმულები, რომლებიც ფორმაზე თქვენი აპლიკაციის სახელთან ჩანს.

Redirect URI-ების სია

ზუსტი მისამართები (სქემა, ჰოსტი, პორტი, გზა), სადაც მომხმარებელი დაბრუნდება კოდით, და სადაც დაბრუნდება გამოსვლის შემდეგ. შედარება ხდება ზუსტი დამთხვევით — wildcard-ები არ მუშაობს. საპროდაქშენოში მხოლოდ HTTPS.

Client-ის ტიპი

Confidential (რეკომენდებული) — კოდს ცვლის თქვენი სერვერი და იყენებს client_secret-ს. Public — მობილური აპლიკაცია ან SPA, რომელიც secret-ს ვერ ინახავს; ასეთი client მხოლოდ PKCE-ზე დგას.

სერვერების საჯარო IP მისამართები

იმ შემთხვევაში, თუ ამანათებსაც ქმნით ჩვენი Integrator API-ით (ჩვეულებრივი IP Whitelist).

სანაცვლოდ მიიღებთ client_id-ს და (confidential client-ის შემთხვევაში) client_secret-ს. Secret ჩვენთან მხოლოდ ჰეშის სახით ინახება და მისი ხელახლა ნახვა შეუძლებელია — დაკარგვის შემთხვევაში ახალს გამოგიშვებთ.

client_secret

client_secret არასოდეს ჩასვათ ფრონტენდის კოდში, მობილურ აპლიკაციაში ან ბრაუზერში ხილულ ადგილას. ტოკენზე გაცვლა ყოველთვის სერვერიდან უნდა მოხდეს.
შემდეგი შემდეგი ნაბიჯი: ავტორიზაციის ნაკადი დეტალურად