Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.12.2021, 00:27
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

Технология u2f, Yubico, покажите несколько простых примеров.
Сориентируйте пожалуйста в технологии FIDO U2f USB Security Key.

Ниже приведенный код работает. Но я не совсем понимаю что он делает.

Например, нажав на кнопку мы делаем запрос к u2f.json - Зачем, что это за ключ?
Я читал для безопасности в коде URL где-то указывается обратный домен. Но здесь я его не вижу, или я что-то путаю.


/index.html
<html>

<head>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">

  <title>Add a auth token</title>
</head>
<body>
  <script type="text/javascript">

    const userId = "some value from your application"

    const getCredential = async (userId) => {

      const response = await fetch('/u2f.json')
      if (!response.ok) {
        throw new Error('response error')
      }
      // endpoint returns a simple json-encoded string
      const challenge = await response.json()
      console.debug('Challege', challenge)

      const options = {
        rp: {
          name: "Example Site",
        },
        user: {
          id: Uint8Array.from(userId, c => c.charCodeAt(0)),
          name: "user@example.com",
          displayName: "User Name",
        },
        challenge: Uint8Array.from(challenge, c => c.charCodeAt(0)),
        pubKeyCredParams: [{
          alg: -7,
          type: "public-key"
        }],
        timeout: 10000,
        // ms
        authenticatorSelection: {
          authenticatorAttachment: "cross-platform",
          userVerification: "preferred",
        },
        attestation: "direct"
      }

      console.debug('options', options)

      // If the user completes registration, this value will hold the data to POST to your application
      const credential = await navigator.credentials.create({
        publicKey: options
      })

      console.debug('credential', credential)

      // Format the user's `credential` and POST it to your application:

      const dataToSend = {
        rawId: new Uint8Array(credential.rawId),
        type: credential.type,
        response: {
          attestationObject: new Uint8Array(credential.response.attestationObject),
          clientDataJSON: new Uint8Array(credential.response.clientDataJSON),
        },
      }



      const registerResponse = await fetch(request)
      console.debug('registerResponse', registerResponse)
      if (registerResponse.ok) {
        alert('token registered, go back to log in with it')
      }

    }

    function start() {
      getCredential(userId)
    }
  </script>

  <button onclick="start()">Click to start</button>
</body>
</html>


/u2f.json
"VvBKmmsZd2RksGdI8NimSg"
Ответить с цитированием
  #2 (permalink)  
Старый 08.12.2021, 01:11
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,126

в стандарте все написано
https://w3c.github.io/webappsec-cred...ntainer-create
Ответить с цитированием
  #3 (permalink)  
Старый 08.12.2021, 08:31
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

dima85, вот, может эта статейка прольет тебе свет на это...
https://habr.com/ru/post/305508/
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько простых JS firebird Работа 5 30.11.2012 11:34
Несколько простых скриптов JS koshsh Работа 1 08.05.2012 20:58