Перейти до вмісту

WebAuthn

Матеріал з K2 ERP Wiki

12.1. webauthn_credentials

Session Service / Step-up Action Service

credential = webauthn_credential_repository.create(

!; "backup_state": verification_result.get("backup_state"), !; |- | credential_id | text | WebAuthn credential ID.; | Вхід відхиляється.; * MDN WebAuthn API.; | https://erp.example.com. |- | Challenge | Випадкові інформаційні дані, які сервер створює для реєстрації або входу.; | Потрібне погодження другим адміністратором.; | style="background:#c8e6c9;" | Step-up WebAuthn.; |- | public_key | text | Публічний ключ.; FIDO Alliance описує WebAuthn як стандартний web API.; |}

12.3. webauthn_events

"rp_id": verification_result.get("rp_id"),

</syntaxhighlight>

AC-13 надає можливість використовувати USB/NFC/BLE security key.; Якщо адміністратор має змогу без ускладнень вимкнути WebAuthn для себе без погодження, це критична вразливість.; Очікуваний результат

11.2.; Завершити реєстрацію credential

return True
"APPROVE_PAYMENT",
"credential_record_id": str(credential.id),

10.; Показник

Етап 1.; Аудит доступів

},

14.; Приклад Python-логіки

"status": "ACTIVE",
return False
credential_id=assertion_response ["credential_id"],
Він бачить покриття WebAuthn по ролях.; |}

</syntaxhighlight>
<syntaxhighlight lang="python">
 "challenge": challenge,

 public_key=credential.public_key,

!;<div style="border-left: 8px solid #c62828; background: #ffebee; padding: 14px 18px; margin: 16px 0;">
v
"id": "erp.example.com",
db=db,

6.1.; Бізнес-процес

const options = await optionsResponse.json();

POST /api/v1/security/webauthn/credentials/{credential_id}/mark-lost

  • credential_id існує;
  • credential активний;
  • credential не відкликаний;
  • challenge збігається;
  • challenge не прострочений;
  • origin дозволений;
  • RP ID hash правильний;
  • підпис assertion валідний;
  • user verification відповідає політиці;
  • sign_count не зменшився, якщо автентифікатор його підтримує роботу;
  • користувач системи не заблокований;
  • політика ролі надає можливість цей метод входу.; |-
sign_count integer - origin varchar Дозволений origin.;=== 14.1.; Перевірка, чи потрібен WebAuthn ===

8.; | Найкращий варіант для адміністраторів і фінансів.; |}

- Platform authenticator - challenge text Випадковий challenge.; * MDN PublicKeyCredential.; "transport": verification_result.get("transport"), ; "user_id": user.id,

5.; });

  • бухгалтерський обліковий облік;
  • фінансовий блок;
  • HR;
  • керівники;
  • віддалені користувачі;
  • поступова відмова від SMS.; {| class="wikitable"
"origin": "https://erp.example.com",
- user_id uuid користувач системи.; },
"challenge": challenge,
)

18.4. Recovery

return await verifyResponse.json();

Критично істотно: приватний ключ ніколи не повинен потрапляти на сервер K2 ERP.; Поле

"user": {
expected_rp_id="erp.example.com",
credential.last_used_at = utc_now()
{| class="wikitable"

== 10.; технічна архітектура WebAuthn у K2 ERP ==

!; },
!; Поле
4.; Натискає «Додати passkey / security key».; 6.; |-
| Підтвердження платежу
| style="background:#ef9a9a;" | Фінансова втрата.; | Вхід блокується або вимагається реєстрація WebAuthn.; |-
| Dev origin
| https://dev-erp.example.com
| Має бути окремо дозволений тільки для dev/test.; | Унікальний ID credential.; Тип
 user_id=user_id,
!; |-
| Вимкнення інтеграції
| style="background:#ffcc80;" | Зупинка бізнес-процесу.; | style="background:#ffcc80;" | Step-up WebAuthn
|}

=== 14.4.; Перевірка входу ===

=== 6.2.; Важливі перевірки під час входу ===

 });
!; |-
| AC-18
| є собою користувач системи тільки з SMS.; | платформа вимагає step-up WebAuthn і логування.; | style="background:#ef9a9a;" | Обовязково
|-
| style="background:#ef9a9a;" | центральний бухгалтер
| Податки, зарплати, фінансовий блок, документи.; Якщо все коректно  створюється сесія K2 ERP.; |-
| Origin
| Повний origin web-додатку.; |-
| event_type
| varchar
| REGISTERED, LOGIN_SUCCESS, LOGIN_FAILED, STEP_UP_SUCCESS, REVOKED, LOST.; |-
| status
| varchar
| PENDING, PASSED, FAILED, EXPIRED.; Backend перевіряє challenge, origin, RP ID і зберігає credential.; |-
| AC-19
| є собою втрачений credential.; const optionsResponse = await fetch("/api/v1/security/webauthn/registration/options", {

[[Категорія:ERP]]

!; WebAuthn перевіряє привязку credential до правильного домену, з цієї причини фішинговий сайт не зможе використати ключ для входу в справжню K2 ERP.; Очікуваний результат

 db.commit()

POST /api/v1/security/webauthn/registration/verify
 "MASS_EXPORT",
=== Етап 4.; Пілот ===
 v

!; 10.; 

1.; |-
| Credential ID
| Ідентифікатор зареєстрованого ключа.; з цієї причини recovery має бути контрольованим.; def is_webauthn_required(user: "User", action: str | None = None, context: dict | None = None) -> bool:

* [[K2 ERP]]
* [[Кібербезпека ERP]]
* [[MFA]]
* [[2FA]]
* [[FIDO2]]
* [[WebAuthn]]
* [[CTAP2]]
* [[Passkeys]]
* [[Security Key]]
* [[TOTP]]
* [[API Security]]
* [[Журнал аудиту]]
* [[Incident Response]]
* [[Zero Trust]]

{| class="wikitable"
 event_type="WEBAUTHN_LOGIN_SUCCESS",
{| class="wikitable"
 "public_key": verification_result ["public_key"],
<syntaxhighlight lang="javascript">
!; * Внутрішні вимоги K2 ERP до доступів, MFA, WebAuthn, журналювання та критичних дій.; Роль / зона

 return True

== 20.; Джерела ==

* мінімум два credentials для адміністраторів;
* резервний hardware security key;
* recovery codes;
* заявку на відновлення;
* перевірку особи користувача;
* погодження другим адміністратором;
* журнал recovery;
* відкликання втраченого credential;
* обовязкову реєстрацію нового credential;
* тимчасовий доступ із коротким TTL.; |-
| backup_state
| boolean
| Чи credential зараз у backup-синхронізації.; |-
| device_name
| varchar
| Назва пристрою або ключа.; | Credential позначається LOST або REVOKED.; )
Platform Authenticator / Security Key
!; | Windows Hello, Touch ID, Face ID, Android passkey.; |}

POST /api/v1/security/webauthn/authentication/options

 ]:
!; | style="background:#ffcc80;" | Рекомендовано
|-
| style="background:#ffcc80;" | Масовий експорт
| Ризик витоку даних.; |-
| Масовий експорт клієнтів
| style="background:#ef9a9a;" | Витік бази.; Автентифікатор підписує challenge приватним ключем.; Очікуваний результат
=== 18.1.; Реєстрація WebAuthn ===
2.; | style="background:#c8e6c9;" | Step-up WebAuthn + audit log.;<pre>
!; |-
| user_id
| uuid
| користувач системи.; |}

 db.commit()

!; |-
| user_verified_required
| boolean
| Чи вимагалась user verification.; Значення
!; |-
| expires_at
| timestamp
| Строк дії.; Backend знаходить credential_id і public key.; Чому потрібен WebAuthn
!; |-
| user_id
| uuid
| користувач системи.; |-
| credential_record_id
| uuid
| Credential, якщо є собою.; Параметр

 return False
 "authenticatorSelection": {
<pre>

 "attestation": "none"

У контексті K2 ERP WebAuthn надає можливість:
!; У K2 ERP зберігаються тільки public key, credential_id, sign_count, metadata і статус credential.; Ризик
 db.commit()
 "authenticator_type": verification_result.get("authenticator_type"),
1.; Значення
{| class="wikitable"
 const verifyResponse = await fetch("/api/v1/security/webauthn/registration/verify", {
<div style="border-left: 8px solid #2e7d32; background: #e8f5e9; padding: 14px 18px; margin: 16px 0;">
MDN зазначає, що public key credential має змогу використовуватись для автентифікації тільки з тим самим relying party, з яким він був зареєстрований, і RP ID має збігатися під час `navigator.credentials.get()`.; |-
| Passkey
| FIDO credential, привязаний до акаунта користувача.; |}

 "credential_id": verification_result ["credential_id"],

=== 11.1.; Почати реєстрацію credential ===

 }

</pre>

* фінансові документи;
* банківські виписки;
* платежі;
* зарплати;
* податкові інформаційні дані;
* договори;
* контрагенти;
* реквізити;
* ціни;
* знижки;
* залишки;
* виробництво;
* управлінська формування звітів;
* інтеграції з банками, ПРРО, маркетплейсами, доставкою та електронним підписом.; |-
| last_used_at
| timestamp
| Останнє використання.; !; |-
| AC-8
| Credential відкликаний.; |-
| FIDO2
| Набір стандартів для сильної автентифікації.; * W3C WebAuthn Level 2.; const credential = await navigator.credentials.create({

* WebAuthn registration;
* WebAuthn authentication;
* credential storage;
* challenge storage;
* RP ID validation;
* origin validation;
* sign_count validation;
* credential revocation;
* lost credential flow;
* WebAuthn events;
* dashboard.; Frontend викликає navigator.credentials.create().; характеристика
</pre>
Browser WebAuthn API

== 8.; Де WebAuthn має бути обовязковим у K2 ERP ==
<pre>
 });
__TOC__
 v
 "user_id": user_id,
!; event_type="WEBAUTHN_LOGIN_FAILED",

* реєструвати passkeys;
* реєструвати hardware security keys;
* входити без пароля або з сильним другим фактором;
* виконувати step-up підтвердження критичних дій;
* захищати користувачів від phishing;
* зберігати в ERP тільки публічний ключ, а не секрет користувача.; Критерій

== Див.; 21.; додатково ==
9.; "aaguid": verification_result.get("aaguid"),

!; |-
| AC-14
| Admin recovery.;<pre>
=== 11.5.; Список credential користувача ===

 headers: { "Content-Type": "application/json" }
 publicKey: options.publicKey
== 9.; Step-up WebAuthn для критичних дій ==
=== 11.7.; Позначити credential як втрачений ===
 if user.role in ["SUPER_ADMIN", "ADMIN", "CFO", "CHIEF_ACCOUNTANT"]:

K2 ERP Backend
WebAuthn  це технічна основа сучасного безпечного входу в ERP.; |-
| status
| varchar
| ACTIVE, LOST, DISABLED, REVOKED.; характеристика
async function loginWithWebAuthn(email) {

!; Критерій
== 12.; Модель даних WebAuthn ==
<pre>
|-
| admin2
| Адміністратор
| style="background:#ef9a9a;" | TOTP без WebAuthn
| style="background:#ef9a9a;" | Критично
| Видати security key
|-
| buh_olena
| Бухгалтер
| style="background:#ffcc80;" | SMS
| style="background:#ffcc80;" | Високий
| Перевести на WebAuthn або TOTP
|-
| cfo
| Фіндиректор
| style="background:#c8e6c9;" | WebAuthn security key
| style="background:#c8e6c9;" | Добре
| Без дії
|-
| director
| Керівник
| style="background:#c8e6c9;" | Passkey
| style="background:#c8e6c9;" | Добре
| Без дії
|}

== 3.; Чому WebAuthn важливий саме для ERP ==

 data={

* знайти всіх адміністраторів;
* знайти користувачів фінансових ролей;
* знайти бухгалтерію;
* знайти HR / зарплату;
* знайти керівників;
* знайти користувачів із віддаленим доступом;
* знайти користувачів тільки з SMS;
* знайти користувачів без MFA.; | Загальна технологічна основа WebAuthn + CTAP2.; * FIDO Alliance: Passkeys.; Що означає
 publicKey: options.publicKey
7.; "origin": verification_result.get("origin"),

2.; |-
| Public key
| Публічний ключ, який зберігається на сервері.; Поле

 method: "POST",

== 1.; Що таке WebAuthn ==
'''Ризик без WebAuthn:''' SMS, email-код або TOTP можуть бути введені на фальшивому сайті.; |}

</div>

 challenge = webauthn_service.generate_challenge()

=== Етап 2.; Політика WebAuthn ===
== 2.; WebAuthn, FIDO2, CTAP2 і passkeys ==
[[Категорія:FIDO2]]
style="background:#c8e6c9;" | Step-up WebAuthn + alert.; |- Створення API token Прихований доступ до ERP.; | Він підсвічується червоним.; №
"CHANGE_BANK_DETAILS",
if not is_valid:
assertion_response=assertion_response,

18.2.; Вхід через WebAuthn


=== 5.1.; Бізнес-процес ===
ERP — це платформа, де викрадений доступ має змогу призвести не тільки до витоку даних, а й до прямої фінансової шкоди.; method: "POST",
 if action in [
 )

 body: JSON.stringify(assertion)

 "publicKey": {

== 16. Dashboard WebAuthn ==
}
Потрібно передбачити:
 )
|-
| Super Admin із WebAuthn
| 100%
| style="background:#c8e6c9;" | Норма
|-
| Адміністраторів із WebAuthn
| 100%
| style="background:#c8e6c9;" | Норма
|-
| Фінансових ролей із WebAuthn
| 82%
| style="background:#ffcc80;" | Потрібна дія
|-
| Бухгалтерів із WebAuthn
| 76%
| style="background:#ffcc80;" | Потрібна дія
|-
| Користувачів тільки з SMS
| 18
| style="background:#ef9a9a;" | Замінити
|-
| Втрачених credentials
| 2
| style="background:#ffcc80;" | Контроль
|-
| Credentials без використання понад 90 днів
| 11
| style="background:#fff9c4;" | Перевірити
|-
| Підозрілих WebAuthn-помилок
| 3
| style="background:#ef9a9a;" | Критично
|}

 "name": "K2 ERP",

 credential = webauthn_credential_repository.get_by_credential_id(
 payload={"credential_record_id": str(credential.id)},
 webauthn_challenge_repository.create(
!; користувач системи

def verify_webauthn_login(user: "User", assertion_response: dict, db: "Session") -> bool:

 ],

11.6.; Відкликати credential

"rp_id": "erp.example.com",

17.; План впровадження WebAuthn у K2 ERP

;

WebAuthn можна використовувати не тільки для входу, а й для повторного підтвердження небезпечних операцій.; | платформа вимагає step-up WebAuthn.; Такі credentials прив’язані до акаунта користувача на сайті чи в застосунку.; |-
| challenge_type
| varchar
| REGISTRATION, LOGIN, STEP_UP, RECOVERY.; |-
| Зміна ролі користувача
| style="background:#ef9a9a;" | Розширення доступу.; def create_webauthn_registration_options(user: "User", db: "Session") -> dict:
 return True
7.; характеристика

9.; | style="background:#ef9a9a;" | Обов’язково
|-
| style="background:#ef9a9a;" | Фінансовий директор
| Банки, платежі, бюджети, управлінська формування звітів.; Відкриває «конфігурація безпеки».; });
!; Браузер звертається до passkey або security key.; Frontend викликає navigator.credentials.get().;</syntaxhighlight>
 return {
 "name": user.email,
|-
| AC-1
| користувач системи додає passkey.; |-
| Roaming authenticator
| Переносний автентифікатор.;<div style="border-left: 8px solid #c62828; background: #ffebee; padding: 14px 18px; margin: 16px 0;">
 return credential
!;</div>

* визначити ролі, для яких WebAuthn обов’язковий;
* визначити дозволені типи credential;
* визначити, чи дозволені synced passkeys;
* визначити, чи потрібні hardware keys для admin;
* визначити recovery-процедуру;
* визначити step-up WebAuthn для критичних дій.; "CREATE_API_TOKEN",
 {"type": "public-key", "alg": -257}

}
 headers: { "Content-Type": "application/json" },
 audit_logger.log(

'''Червона зона:''' адміністратори, фінансовий блок, бухгалтерський обліковий облік або керівники входять у ERP через пароль, SMS або email-код без WebAuthn.; Поняття

 "sign_count": verification_result.get("sign_count", 0),

POST /api/v1/security/webauthn/credentials/{credential_id}/revoke
 "user_verified_required": True,
 "timeout": 300000,

K2 ERP:''' реалізувати WebAuthn як технічну основу для FIDO2 забезпечується через '''Правильне рішення для бізнесу; додатково реалізовано passkeys і hardware security keys, щоб забезпечити безпечний вхід, step-up підтвердження критичних дій і захист від phishing.; | Зберігається в K2 ERP.; | style="background:#ef9a9a;" | Обов’язково
|-
| style="background:#ffcc80;" | HR / зарплата
| Персональні та зарплатні інформаційні дані.;<pre>

<syntaxhighlight lang="javascript">

!; |-
| AC-4
| Origin неправильний.; Критерій
== 13.; Приклад frontend-логіки ==
 is_valid = webauthn_service.verify_assertion(
|-
| id
| uuid
| ID події.; |-
| Origin
| https://erp.example.com
| Конкретний origin web-додатку.; | Він показується в контрольному списку.; Критерій
method: "POST",
"backup_eligible": verification_result.get("backup_eligible"),
const verifyResponse = await fetch("/api/v1/security/webauthn/authentication/verify", {

WebAuthn функціонує через об’єкт `PublicKeyCredential`.; |}

db=db,

5.2.; Важливі перевірки під час реєстрації

)

13.1.; Реєстрація passkey / security key

id uuid ID challenge.; операційна дія

POST /api/v1/security/webauthn/step-up/verify

Опційно застосовують, коли потрібно під час реєстрації.; event_type="WEBAUTHN_CREDENTIAL_REGISTERED",
  • super admin;
  • адміністратори;
  • фінансовий директор;
  • центральний бухгалтер;
  • 5–10 power users;
  • перевірка recovery;
  • перевірка step-up дій.; method: "POST",
const assertion = await navigator.credentials.get({
)
expected_origin="https://erp.example.com",
style="background:#c8e6c9;" | Step-up WebAuthn + погодження.; |- AC-7 Реєстрація відхиляється.; |- RP ID - Неправильний origin https://fake-erp.example.net Повинен бути відхилений.; * challenge збігається з тим, який був створений сервером;
  • challenge не прострочений;
  • origin дозволений;
  • RP ID правильний;
  • credential ще не зареєстрований;
  • user_id відповідає активному користувачу;
  • user verification виконано, якщо це вимагається політикою;
  • алгоритм підпису підтримується;
  • public key коректно витягнуто та збережено;
  • credential_id унікальний.; Термін

{{SEO

!; Поточний метод

 )
'''Зелена зона:''' K2 ERP використовує WebAuthn / passkeys / security keys для критичних ролей, step-up WebAuthn для небезпечних операцій, dashboard покриття credentials, журнал подій і контроль recovery.; * FIDO Alliance: User Authentication Specifications Overview.; 6.; Приклад

{| class="wikitable"
== 7.; RP ID та Origin ==
 });
 },
|-
| AC-10
| користувач системи змінює банківські реквізити.; user_id=user.id,
 |
 },
async function registerWebAuthnCredential() {
RP ID і Origin  критичні для безпеки WebAuthn.; |-
| payload
| jsonb
| Технічні інформаційні дані без секретів.;</pre>

 user_id=user.id,

 v
=== Етап 5.; Масове впровадження ===
 payload={"credential_record_id": str(credential.id)},

{| class="wikitable"
</pre>
 "status": "PENDING",
 "id": str(user.id),
 v
 return False
=== 18.5. Dashboard ===
8.; |-
| CTAP2
| Протокол взаємодії браузера / ОС із зовнішнім автентифікатором.; Frontend передає assertion response на backend.; | Він підсвічується червоним або помаранчевим.; | style="background:#c8e6c9;" | Step-up WebAuthn адміністратора.; |-
| authenticator_type
| varchar
| PLATFORM або ROAMING.; 
!; Passkey  це FIDO-облікові інформаційні дані, які дозволяють входити в застосунки та сайти так само, як користувач системи розблоковує пристрій: біометрією, PIN або pattern.; |-
| origin
| varchar
| Origin реєстрації.; Дія
 require_user_verification=True,
 {"type": "public-key", "alg": -7},
 return user.security_policy.require_webauthn_for_remote_access
headers: { "Content-Type": "application/json" },
"challenge_type": "REGISTRATION",

14.3.; Збереження credential

16.1.; KPI адміністратора безпеки

; Орієнтир стандарту: WebAuthn — це W3C Web Authentication API для доступу до public key credentials.; Стан
db=db,
if context and context.get("remote_access") is True:
</div>
=== 13.2.; Вхід через WebAuthn ===
{{DISPLAYTITLE:WebAuthn для ERP: стандарт безпечного входу в K2 ERP через FIDO2 та passkeys}}
 }
audit_logger.log(
"residentKey": "preferred"

Етап 3.; Технічна реалізація

body: JSON.stringify(credential)

19.; Висновок

def save_webauthn_credential(user_id: str, verification_result: dict, db: "Session") -> "WebAuthnCredential":

12.2. webauthn_challenges

"pubKeyCredParams": [

користувач системи має змогу втратити пристрій, security key або доступ до passkey.; Вводить email або обирає passkey-вхід.; | Не передається в K2 ERP.; |-

AC-2 користувач системи додає hardware security key.; 4.;=== 16.2.; Проблемні користувачі ===
"authenticator_type": credential.authenticator_type,

18. Acceptance Criteria

 "userVerification": "required",

Credential Storage + Audit Log

</div>

* W3C WebAuthn Level 3.; | Перевіряється сервером.; |-
| transport
| varchar
| USB, NFC, BLE, INTERNAL.; | K2 ERP.; !; Приклад
5.; Браузер звертається до автентифікатора.; |}

 const options = await optionsResponse.json();

'''Критично істотно:''' не можна дозволяти wildcard origin або приймати будь-який домен.; |-
| aaguid
| varchar
| Ідентифікатор моделі автентифікатора.; Це основа сучасної phishing-resistant автентифікації, яка надає можливість K2 ERP захищати адміністраторів, фінансовий блок, бухгалтерію, HR, керівників і критичні операції краще, ніж SMS, email-коди або звичайні OTP.; headers: { "Content-Type": "application/json" },
Backend K2 ERP повинен перевірити:
== 5.; Як функціонує реєстрація WebAuthn ==
|-
| id
| uuid
| ID запису.; MDN описує `PublicKeyCredential` як credential для входу в сервіс через стійку до phishing і витоків пару асиметричних ключів  public/private key pair  замість пароля.; користувач системи підтверджує вхід на пристрої.; | YubiKey, Feitian, Titan Key або інший FIDO2-ключ.; Backend перевіряє підпис, origin, RP ID, challenge і sign_count.; | style="background:#ef9a9a;" | Обовязково
|-
| style="background:#ef9a9a;" | Адміністратор
| Ролі, права, конфігурація, API token, інтеграції.; K2 ERP створює authentication challenge.; | style="background:#c8e6c9;" | Step-up WebAuthn + двоетапне погодження.; |-
| ip_address
| varchar
| IP.; Рівень
11.; Для production K2 ERP список дозволених origin має бути жорстко визначений.; | erp.example.com або example.com.; |}

 });

 "displayName": user.full_name,
POST /api/v1/security/webauthn/registration/options
 payload={
 body: JSON.stringify({ email })
|-
| AC-16
| Адміністратор відкриває dashboard WebAuthn.; Очікуваний результат

== 4.; Основні поняття WebAuthn ==

У K2 ERP можуть бути:
!; характеристика
</div>
== 11.; API K2 ERP для WebAuthn ==
!; const optionsResponse = await fetch("/api/v1/security/webauthn/authentication/options", {
|-
| style="background:#ef9a9a;" | Super Admin
| Повний контроль над ERP.; '''Критично істотно:''' recovery-процедура не повинна обходити WebAuthn без контролю.; |-
| Private key
| Приватний ключ, який залишається в автентифікаторі.;
; Критерій
if not credential or credential.status != "ACTIVE":
data={

POST /api/v1/security/webauthn/step-up/options

14.2.; Створення registration options

6.; Як функціонує вхід через WebAuthn

15.; Recovery та втрата credential

style="background:#ffcc80;" | Рекомендовано
Керівники - Attestation Зручний вхід у K2 ERP через пристрій, біометрію або PIN.; | Base64url random bytes.; |- created_at timestamp - created_at timestamp } Credential реєструється як roaming authenticator.; Окремо варто відзначити вбудований у браузери і платформи для підтримки FIDO Authentication, а CTAP2 надає можливість використовувати зовнішні автентифікатори через USB, NFC або BLE.; Контроль Вхід відхиляється.; |- Assertion надає можливість K2 ERP реєструвати ключі та перевіряти вхід.; | style="background:#ffcc80;" | Рекомендовано
Віддалений доступ Вищий ризик phishing і компрометації.; Роль у K2 ERP

Головне правило: для ERP, яка керує фінансами, зарплатами, договорами, складом і управлінською звітністю, WebAuthn має стати стандартом для критичних ролей.; |-

AC-12 - backup_eligible boolean - AC-15 Recovery завершено.; Тип
},
audit_logger.log(
Relying Party - user_agent text PIN, Touch ID, Face ID, Windows Hello.; |- RP ID erp.example.com платформа вимагає step-up WebAuthn.; |- risk_score integer - AC-3 - rp_id varchar - User verification - AC-17 Реєстрація відхиляється.; Тип

11.4.; Завершити автентифікацію

Зміна банківських реквізитів Підміна рахунку.; Роль
WebAuthn Сесія створюється після успішної перевірки assertion.; | Реєстрація не приймається.; |} - rp_id varchar RP ID.;
"rp": {

GET /api/v1/security/webauthn/credentials Backend K2 ERP повинен перевірити:

18.3. Step-up WebAuthn

verify challenge, origin, rpId, signature

3.; POST /api/v1/security/webauthn/authentication/verify 3.; №

"expires_at": utc_now_plus_minutes(5),
navigator.credentials.create() navigator.credentials.get()
"CHANGE_USER_ROLE",

11.8. Step-up WebAuthn

- created_at timestamp Credential реєструється, public key зберігається.; |- AC-11 Подія логуються, користувач системи реєструє новий credential.; №

WebAuthn — це стандартний web API, який надає можливість сайту або web-додатку виконувати автентифікацію користувача за допомогою криптографічних ключів замість або на додаток до пароля.; користувач системи підтверджує дію PIN, біометрією або дотиком до ключа.; |-

AC-9 - Security key Фізичний FIDO2-ключ.; Ризик

K2 ERP Frontend

11.3.; Почати автентифікацію

return await verifyResponse.json();
AC-6 - AC-5 RP ID неправильний.; Очікуваний результат