Síntomas
Resources API captura los detalles personales del usuario, las publicaciones de redes sociales, los comentarios y las fotos y usa la respuesta devuelta para un proyecto de aprendizaje automático. Extrañamente después de unos días de usarlo, la operación GetPosts comenzó a generar HTTP 403: error prohibido , mientras que las otras operaciones funcionan correctamente según lo previsto.
{
"statusCode": 403,
"message": "Forbidden"
}
Aparte de lo anterior, también encontramos el error HTTP 429 - Demasiadas solicitudes al invocar la operación GetComments para cada segunda solicitud. El problema se resuelve automáticamente después de 10 segundos, pero se vuelve a producir una vez que se vuelve a realizar la primera llamada a la API. El comportamiento no se observa para las otras operaciones.
{
"statusCode": 429,
"message": "Se ha superado el límite de velocidad. Inténtelo de nuevo en 5 segundos".
}
-
HTTP 403: se puede producir un error prohibido cuando hay alguna directiva de restricción de acceso implementada.
-
Compruebe el seguimiento del inspector de APIM y debe observar la existencia de una directiva de "filtro ip" que filtra (permite o deniega) las llamadas desde direcciones IP específicas o intervalos de direcciones.
-
Para comprobar el ámbito de la directiva "ip-filter", seleccione el botón Calcular directiva efectiva . Si no ve ninguna directiva de restricción de acceso implementada en ningún ámbito, el siguiente paso de validación debe realizarse en el nivel de producto; para ello, vaya al producto asociado y haga clic en la opción Directivas.
<inbound>
<base />
<choose>
<when condition="@(context.Operation.Name.Equals("GetPosts"))">
<ip-filter action="forbid">
<address-range from="0.0.0.0" to="255.255.255.255" />
</ip-filter>
</when>
</choose>
</inbound> -
Para el segundo problema (HTTP 429 - Demasiadas solicitudes), seguiremos el mismo procedimiento comprobando el seguimiento del inspector de APIM y comprobando si hay alguna directiva de "límite de velocidad" o "límite de velocidad por clave" implementada en cualquier ámbito.
-
Si calcula la directiva efectiva, debe observar una directiva de restricción de acceso (rate-limit-by-key) implementada en el ámbito global, es decir, en "Procesamiento de entrada" en la opción "Todas las API".
<inbound>
<choose>
<when condition="@(context.Operation.Name.Equals("GetComments"))">
<rate-limit-by-key calls="1" renewal-period="10" increment-condition="@(context.Response.StatusCode == 200)" counter-key="@(context.Request.IpAddress)" />
</when>
</choose>
</inbound>
Obtenga más información sobre las directivas ip-filter y rate-limit-by-key en APIM.