Самый безопасный способ сохранить состояние входа в систему, когда принудительно используется basi c auth - PullRequest
1 голос
/ 09 апреля 2020

Какой самый лучший / самый безопасный способ хранения учетных данных для последующих вызовов API с использованием Basi c Auth, который я не могу контролировать?

К счастью, мы, очевидно, только используем basi c auth для нашего этапа бета-тестирования, но я прожил достаточно долго, чтобы знать, что иногда сведения о безопасности теряются в продуктах, а пользователи бета-версий повторно используют пароли, поэтому хотим сделайте его максимально безопасным на всякий случай, несмотря на то, что это временная вещь.

В настоящее время я использую хранилище сеансов для хранения учетных данных в форме base64. Это действительно лучшее, что можно сделать?

Обратите внимание, что для того, чтобы избавиться от уродливого запроса на вход в браузер, заголовок WWW-Authenticate был удален из ответа сервера. Это означает, что браузер больше не «магически» кэширует информацию об аутентификации для последующих вызовов, поэтому мне нужно как-то сделать это вручную.

Это то, что я сейчас использую. Хотя это технически работает, есть ли способы уменьшить риски безопасности?

const baseUrl = getServerBaseUrl()

const authenticationService = {
  authenticate: (username, password) => {
    const token = btoa(`${username}:${password}`)

    sessionStorage.setItem('credentials', token)

    return axios.get(baseUrl, {
      headers: {
        Authorization: `Basic ${token}`,
      },
    })
  },

  checkAuthentication: () => {
    return axios.get(baseUrl, {
      headers: {
        Authorization: `Basic ${sessionStorage.getItem('credentials')}`,
      },
    })
  },
}

...