Ключ 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 / -.
В этом сценарии вы будетевсе еще нужно беспокоиться о замене сертификатов до истечения срока их действия.