ASP.Net Web API hace que HTTPS sea obligatorio

2

¿Hay alguna forma programática en la que pueda imponer el HTTPS en mi API web de ASP.Net? Necesito realizar esto para todos los métodos HTTP en mi API web.

¿Podemos asignar HTTPS a mensajes HTTP específicos también?

Tenga en cuenta que necesito hacer esto de forma programática en mi back-end de ASP.Net.

    
pregunta Jake 23.01.2017 - 05:35
fuente

3 respuestas

2

A menos que esté malinterpretando su pregunta, ¿no podría simplemente crear un RequireHttpsAttribute (heredar de ActionFilter ) que hace esto, y decorar sus controladores / acciones con él?

Dentro de eso, verifique el esquema de uri de la solicitud y rechace la devolución de solicitudes prohibidas si no coincide con el esquema correcto.

    
respondido por el Claus 23.01.2017 - 10:27
fuente
0

No creo que puedas hacer esto en tu backend. Sin embargo, puede consultar HSTS, que lo hará por usted.

enlace

Deberá configurarlo en IIS

    
respondido por el Black Magic 23.01.2017 - 10:02
fuente
0

Creo que @Jake está buscando una solución programática aquí en lugar de una actualización de configuración. Es mejor si bloquea su solicitud en el back-end si no llega a través del canal TLS.

Lo que puedes hacer es crear una clase de filtro personalizado que se hereda de la clase ActionFilterAttribute. Entonces puede anular el método OnActionExecuting para satisfacer sus necesidades. Puede verificar la solicitud contra Uri.UriSchemeHttps y realizar una acción apropiada.

A continuación se muestra un código de ejemplo (tenga en cuenta que lo estoy dando como ejemplo. Puede que no sea adecuado al 100% para su entorno de producción).

public class MyHttpsOnlyFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext context)
    {
    var request = context.Request;
    if (request.RequestUri.Scheme != Uri.UriSchemeHttps)
    {
        var response = request.CreateResponse(HttpStatusCode.Forbidden);
        response.Content = new StringContent("This API accepts only HTTPS requests");
        context.Response = response;
    }
}
    
respondido por el user3496510 23.01.2017 - 22:47
fuente

Lea otras preguntas en las etiquetas