Моя компания написала API, чтобы предоставлять нашим приложениям данные нашим клиентам. Мы завершили конечные точки и теперь хотим защитить API. API будет использоваться только предварительно одобренными клиентами, поэтому анонимный доступ не требуется. Мне сказали, что мы можем использовать сертификат x.509, который мы генерируем, чтобы идентифицировать и аутентифицировать каждого клиента. Определив, я имею в виду внедрение клиентского кода в сертификат, который мы выдаем каждому клиенту (возможно ли это?). Как вы, вероятно, можете сказать, что у меня мало опыта в аутентификации клиентов с сертификатами, это прочный подход?Аутентификация клиента для WebAPI 2
ответ
Это очень «сложный» вариант для аутентификации и авторизации клиентов. Он очень мощный, но может быть очень дорогим для реализации, потому что вам нужно управлять полным PKI (инфраструктура открытого ключа), и вам необходимо бесплатно распределить сертификаты своим клиентам.
1) Вам нужно SSL на месте, и вы должны обеспечить его (даже в глобальном масштабе, если вы хотите):
public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
ReasonPhrase = "HTTPS Required"
};
}
else
{
base.OnAuthorization(actionContext);
}
}
}
public class ValuesController : ApiController
{
[RequireHttps]
public HttpResponseMessage Get() { ... }
}
2) Вам необходимо настроить IIS, чтобы принимать клиентские сертификаты througt в application.host конфигурации или с помощью консоли диспетчера IIS:
<system.webServer>
<security>
<access sslFlags="Ssl, SslNegotiateCert" />
<!-- To require a client cert: -->
<!-- <access sslFlags="Ssl, SslRequireCert" /> -->
</security>
</system.webServer>
3) на стороне сервера, вы можете получить сертификат клиента, вызвав GetClientCertificate на сообщение запроса. Метод возвращает null, если сертификат клиента отсутствует. В противном случае он возвращает экземпляр X509Certificate2. Используйте этот объект для получения информации от сертификата, например, эмитента и субъекта. Затем вы можете использовать эту информацию для аутентификации и/или авторизации.
X509Certificate2 cert = Request.GetClientCertificate();
string issuer = cert.Issuer;
string subject = cert.Subject;
Проверить эту статью Майк Уотсон для полного reference (я дал вам выписку здесь).
Это прочный подход?
Да, но, как вы видели, как недостаток PKI иметь в виду. В конце концов вы можете реализовать OAuth2 auth, который также чрезвычайно эффективен, и вы можете легко основывать его на внешнем провайдере, например, для Azure AD. Проверьте this статью для более подробной информации. BTW, вы также можете начать с основного шаблона MVC/API.
- 1. WebAPI 2 Аутентификация Путаница
- 2. Аутентификация клиента Android на сайте WCF Webapi?
- 3. ASP.NET MVC 5 и WebApi 2 Аутентификация
- 4. аутентификация подлинности auth0 для клиента webapi и winform
- 5. Внешняя аутентификация Microsoft для мобильного приложения с ASP.NET WebApi 2
- 6. Аутентификация для ASP.Net MVC 4 и WebApi
- 7. Аутентификация пользователя для IdentityServer на стороне WebApi
- 8. Аутентификация Windows в ASP .Net для WebApi
- 9. Аутентификация клиента клиента Apigee
- 10. Активная аутентификация MVC WebAPI
- 11. Как аутентифицировать запрос клиента WPF для ASP.NET WebAPI 2
- 12. Сертификаты и аутентификация WebAPI - ELI5
- 13. Пользовательская аутентификация для клиента REST
- 14. MVA стандартная аутентификация плюс webApi
- 15. ASP.Net WebApi Аутентификация и безопасность
- 16. Аутентификация Webapi с использованием только клиентской стороны
- 17. AngularJS + WebAPI Внешняя аутентификация Google
- 18. WebAPI и аутентификация форм CookieContainer
- 19. Аутентификация клиента Magento SOAP?
- 20. аутентификация клиента серверу gae
- 21. SSL HandShake - аутентификация клиента
- 22. Аутентификация сертификата клиента
- 23. Аутентификация клиента Sharepoint
- 24. Аутентификация собственного клиента Azure
- 25. Вход для клиента HTML по телефону webapi
- 26. Аутентификация клиента сервером
- 27. RESTful Аутентификация клиента Android
- 28. аутентификация клиента веб-сервиса
- 29. Аутентификация сертификата клиента WCF
- 30. Основная аутентификация клиента JAXWS
Спасибо Луке, эта ссылка на статью Майка Уотсона была именно тем, что мне нужно. Мы собираемся выдавать наши собственные сертификаты, потому что у нас ограниченная группа клиентов, которые будут использовать API, поэтому накладные расходы на отмену и выдачу новых клиентских сертификатов должны быть управляемыми. –