Добавление безопасности в .Netcore 2.1 Api - PullRequest
0 голосов
/ 19 октября 2018

У меня есть API .netcore 2.1, который будет вызываться скриптом curl из Mac.

Скрипт curl вызывается при входе в Mac.

Я хочу добавить защитук API, так что API не может быть доступен всем в сети для обновления базы данных.

Я новичок в сфере безопасности, поэтому не знаю, как это сделать.

Я читал о OWIN / JWT и т. Д.

Я также читал о JWT, который регистрирует пользователя и аутентифицируется на основе пароля, хранящегося в базе данных.

Но что я хочузаключается в проверке подлинности компьютеров, которые могут получить доступ к базе данных, поскольку она не будет использоваться отдельными лицами, но будет вызываться с каждого компьютера, когда он включен.

Возможно ли это?Если нет, то каким должен быть мой подход?

1 Ответ

0 голосов
/ 19 октября 2018

Ключ API

Это слабый способ сделать это, но сгенерировать Ключ API, который вы можете передать в качестве заголовка для curl.Запросы, которые не имеют заголовка, не получают доступ.например, передать заголовок:

curl -H "X-Api-Key: {{key}}" https://foo

Затем создайте класс промежуточного программного обеспечения, который проверяет заголовок:

... (pseudo code for middleware) ...
if (Request.Headers["X-Api-Key"] == {{key}}) {
  return next();  // key is good keep going
} else {
  return;  // key isn't valid.
}
...

JWT

Пусть сервер сгенерирует уникальный идентификатор для каждого клиента,Идентификатор должен быть чем-то, что не легко угадать, например, уникальный идентификатор плюс некоторый безопасный случайный материал.Когда вы устанавливаете сценарии на клиенте, распространяйте этот идентификатор вместе с ним.Не знаю, как вы планируете распространять сценарии, поэтому я не могу комментировать это здесь.

После установки этой информации на клиенте сценарии будут вызывать сервер для создания JWT.,Маркер должен содержать дату / время истечения срока действия и в идеале использовать jti для предотвращения повторных атак.

В этом блоге представлен хороший обзор использования JWT, https://pioneercode.com/post/authentication-in-an-asp-dot-net-core-api-part-3-json-web-token.

Вметод аутентификации, при котором вы генерируете токен, вместо проверки по паролю, вы проверяете по своей базе данных ключей клиента - я настоятельно рекомендую использовать хорошую дисциплину безопасности и не хранить фактические данные, а вместо этого посолить и хэшировать данные на сервере -относитесь к этим ключам как к паролям!Когда вы создаете токены, убедитесь, что вы установили срок действия, и если вы хотите пойти еще дальше, используйте jti для предотвращения атак воспроизведения.

Верните новый токен в ваш скрипт, а затем сделайте исходный запрос APIПередача токена на предъявителя:

curl -H “Authorization: {{token}}” https://foo/api/bar

Убедитесь, что все это также выполняется через HTTPS.

Взаимная аутентификация SSL / TLS

Другой способ справиться с этим (подробнеесложный, но более безопасный) использует взаимную аутентификацию SSL / TLS.Я не пытался настроить это при использовании .NET Core, но вы можете настроить свой .NET-процесс с помощью Nginx, который можно настроить для взаимной аутентификации.Взгляните на https://blog.codeship.com/how-to-set-up-mutual-tls-authentication/.

. При таком подходе вы создадите собственный корневой ЦС, создадите сертификат для каждого из ваших клиентов и найдете способ установить сертификат на клиенте.Убедитесь, что вы установили разрешения для файла сертификата клиента только для чтения пользователем (chmod 400 client-cert.pem) и затем используете аргументы ключа --cert / -.

В этом сценарии вы будетевсе еще нужно беспокоиться о замене сертификатов до истечения срока их действия.

...