A pesar de leer varios artículos y tutoriales en Microsoft.com, tengo problemas para comprender cómo definir permisos entre API mediante registros de aplicaciones / OAuth2 en Azure AD. Para ejemplificar, he configurado 2 registros de aplicaciones simples en Azure AD, uno para una API de back-end (digamos ID de cliente A) y otro para un front-end u otra API (ID de cliente B). Luego, configuré una API básica de .NET Core con autenticación predeterminada (plantilla) (Opciones = inquilino, ID de cliente, etc.) y el punto final predeterminado del pronóstico del tiempo.

        services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
            .AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
        services.AddControllers();

En este momento, puedo obtener un token de https://login.microsoftonline.com/<tenant>/oauth2/token con ID de cliente = B y recurso = ID de cliente A , y cuando envío este token (con 'aud = A') a la API lo acepta.

¿Por qué el token se genera correctamente, aunque no he establecido ninguna relación entre los registros de aplicaciones A y B? La pestaña Permisos de API en Azure AD está vacía en ambos registros; pensé que AAD rechazaría la solicitud que indica que la aplicación B no tiene acceso a la aplicación A. ¿O soy completamente responsable de validar las afirmaciones de la audiencia a través del código en mi aplicación?

0
YuriW 22 ene. 2021 a las 13:59

1 respuesta

La mejor respuesta

En Azure AD, es posible adquirir un token de acceso a través del flujo de credenciales del cliente a una aplicación en la que la aplicación cliente no tiene permisos. Esto puede ser para habilitar algunos escenarios donde la API de destino maneja toda la autorización, pero no estoy seguro.

Escribí un artículo hace algún tiempo sobre la necesidad de verificar los permisos siempre: https://joonasw.net/view/always-check-token-permissions-in-aad-protected-api. También escribí un seguimiento después de que Microsoft abordó la capacidad entre inquilinos para obtener tokens de acceso: https://joonasw.net/view/cross-tenant-token-attacks-now-harder-in-azure-ad.

Debido a que un cliente puede obtener un token de acceso válido sin asignaciones de permisos, la autorización es crucial en el lado de su API. En nuestra empresa tenemos una política de autorización predeterminada que verifica cada solicitud que contiene un permiso / alcance delegado válido o un permiso de aplicación / rol de aplicación válido. Eso nos da una línea de base que ya protege la API de tokens como ese. Por lo general, no es la única autorización que se aplica. En caso de que se admitan permisos delegados, debe verificar que el usuario también tenga acceso a lo que está tratando de hacer. Los permisos delegados / de la aplicación, después de todo, solo dicen lo que la aplicación cliente puede hacer.

1
juunas 22 ene. 2021 a las 12:27