Política de acceso para tipos de otorgamiento de API
La política de acceso se puede aplicar al uso controlado por API de OpenID Connect y OAuth 2.0. Este
uso de API es más conocido como el tipo de otorgamiento Credenciales de contraseña de propietario de recurso (ROPC),
pero también incluye el tipo de otorgamiento basado en aserciones JWT. A diferencia del código de autorización y los tipos
de otorgamiento implícitos, estos tipos de otorgamiento tienen una diferencia fundamental en cómo operan. No existe ningún
agente de usuario de navegador y no se realiza ninguna solicitud al punto final /authorize. Como este punto final
de navegador no se utiliza, la política de acceso para una aplicación se debe evaluar de forma distinta.
Cuando se aplica una política de acceso, se abordan estos requisitos empresariales fundamentales:
- ¿Se ha autenticado lo suficiente el usuario para acceder a esta aplicación?
- ¿Se permite al usuario autenticado acceder a esta aplicación?
- ¿Está permitido el dispositivo o el contexto de cliente utilizado para acceder a esta aplicación?
En los flujos de navegador tradicionales se aplican estos requisitos. Si no se cumplen, el navegador solicita MFA o devuelve una página de error al usuario que detiene el acceso. En un tipo de otorgamiento de API, no todas estas facilidades están disponibles. Por tanto, se deben abordar los problemas siguientes.
- Contexto de recepción desde un dispositivo cliente.
- Devolución de una solicitud de MFA, que incluye:
- Las API que se necesitan para cumplir la MFA.
- Cómo acceder a las API.
Tipo de otorgamiento de policyauth
Para aplicar de forma efectiva una política de acceso a un flujo OAuth 2.0 de solo API, se ha introducido un nuevo tipo de otorgamiento. Este tipo de otorgamiento permite a un cliente presentar algún contexto a la política de acceso antes de cualquier autenticación. Esta capacidad permite implementar una experiencia del usuario mejorada. Por ejemplo, cuando un usuario pulsa un botón de inicio de sesión, antes de que se le solicite que especifique las credenciales, se le evalúa de acuerdo con la política asociada. Si no cumple los requisitos de política, el usuario recibe un mensaje de error que indica que no se puede autenticar ni acceder al recurso debido a los requisitos de política.
policyauth, se devuelve una de estas respuestas.- Una denegación
- Un error que indica que no se puede otorgar acceso debido a la política.
- Una solicitud
- Se devuelve una señal que se puede utilizar para acceder a las API de autenticación, con una lista de factores de autenticación aceptables.
Respuestas de solicitud de MFA de /token
Cuando se aplica una política de acceso a un flujo de API OAuth 2.0, debe formar parte
del contrato de API una solicitud para MFA. No son posibles los métodos tradicionales de OP que realizan los pasos de MFA como parte de la
solicitud a /authorize.
Cuando /token devuelve una solicitud de MFA:
- El ámbito es
mfa_challengey no se devuelven otros ámbitos. - Se emite una señal de acceso.
- La señal de acceso tiene autorización para acceder a las API de autenticación necesarias. Es importante que se utilice esta señal de acceso y no una señal de acceso de cliente de API normal. Esta señal se utiliza para realizar un seguimiento de los factores de autenticación que ya se han realizado y las acciones anteriores en el otorgamiento.
- La señal de acceso devuelve
active: truede las solicitudes a/introspect. Cuando se utilizan las solicitudes de MFA, cualquier API que proteja un servidor de recursos debe implementar una comprobación de que elscopedevuelto de/introspectno es igual amfa_challenge.
- Opcionalmente, se enumera una matriz de factores que se pueden realizar para satisfacer esta solicitud
allowedFactors.
Presentación de contexto a /token
El cliente de API que realiza una solicitud a /token puede presentar información de contexto
bien definida y arbitraria a /token para utilizarla en la evaluación de política de acceso.
Se deben incluir tres fragmentos de información de contexto obligatorios.
sessionId: un identificador de sesión arbitrario emitido y mantenido por el cliente de OAuth.ipAddress: como el cliente de OAuth es el responsable de las interacciones con el agente de usuario, se debe proporcionar explícitamente la dirección IP del usuario.userAgent: de forma similar a la dirección IP, se debe proporcionar explícitamente el agente de usuario del usuario.
Se pueden incluir más parámetros y se pueden crear condiciones de atributo de contexto en estos valores.
context parámetro no se incluye en una solicitud a /token, no se aplica la política de acceso.Se proporciona el contexto a /token en forma de JSON codificado en base64. Un ejemplo de
carga útil JSON para el contexto es:
{
"sessionId":"MDNjZmQ3NDM2NjFmMDc5NzVmYTJmMT",
"ipAddress":"129.42.38.10",
"userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
}
La información de contexto se considera fiable, porque la presenta un cliente de API al que se ha emitido un conjunto de credenciales de cliente seguro. Este cliente de API debe asegurarse de que no permite que el agente de usuario consumidor presente arbitrariamente el contexto, que se puede utilizar para eludir los controles empresariales.
El contexto debe proporcionarse siempre que se invoque una política de acceso en todos los tipos de concesión de la API: policyAuth JWT Bearer,, ROPC y refresh
token.
Satisfacción de mfa_challenge
Para satisfacer una solicitud de MFA devuelta por el punto final /token, se pueden
utilizar las API de factores de autenticación. Estas API se utilizan para satisfacer los requisitos del
primer y segundo factor. La señal de acceso que se devuelve en la respuesta mfa_challenge
se utiliza para solicitar el factor adecuado. Después de una finalización satisfactoria del factor, se devuelve un JWT. Este JWT contiene algunos fragmentos de información clave.
- El
grant_idque se deriva de la señal de acceso utilizada para solicitar la API del factor. Este ID mantiene la correlación entre las distintas solicitudes a/token. - El
factorque se ha realizado y los factores que se han realizado anteriormente.
Este JWT se presenta a /token como parte de un flujo de tipo de otorgamiento
jwtBearer. Se reevalúa la política de acceso y se emite una señal totalmente autorizada u otra solicitud.
returnJwt=true de la cadena de consulta.- Las API de autenticación de primer factor siguientes admiten este distintivo:
- Las API de MFA siguientes admiten este distintivo:
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Email_One-time_Password_2.0/attemptEmailotpVerification_2_0
La API de verificación transitoria también admite este distintivo. No obstante, para utilizar el JWT emitido por esta, se debe configurar la correlación de la reclamación del sujeto.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/SMS_One-time_Password_2.0/attemptSmsotpVerification_2_0
La API de verificación transitoria también admite este distintivo. No obstante, para utilizar el JWT emitido por esta, se debe configurar la correlación de la reclamación del sujeto.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/FIDO/assertionResult
Una clave de acceso puede utilizarse como primer o segundo factor.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Voice_One-time_Password_2.0/attemptVoiceotpVerification_2_0
La API de verificación transitoria también admite este distintivo. No obstante, para utilizar el JWT emitido por esta, se debe configurar la correlación de la reclamación del sujeto.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/One-time_Password/attemptOtpVerification_2_0
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Time-based_One-time_Password_2.0/verifyTotpEnrollment_2_0
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Email_One-time_Password_2.0/attemptEmailotpVerification_2_0
- Para las API de factor transitorio, el campo
subdel JWT se rellena con la información transitoria utilizada en la solicitud. Por ejemplo, el correo electrónico o el número de teléfono en lugar de unuserId. - Cuando se establece
returnJwt=true, las API de verificación que normalmente devuelven un código de estado de204sin ningún cuerpo HTTP, cambian su código de estado a un200. Devuelven elcontent-typedeapplication/jsony tienen una respuesta como:
Para las verificaciones de factores que ya devuelven JSON, se añade la propiedad{ "assertion:"ey..."}assertiona la respuesta.
Aplicación de política de acceso a distintos tipos de otorgamiento
Cuando configura una aplicación, existe una opción que indica si la política de acceso se aplica a un tipo de otorgamiento específico.
Esta configuración controla si la política de acceso se evalúa en una solicitud como /token que se basa en el
valor del parámetro grant_type. Esta evaluación se aplica independientemente de las invocaciones anteriores de /token
para un otorgamiento específico.
policyauth- La política de acceso debe estar siempre habilitada.
ROPC- La política de acceso se puede inhabilitar si el consumo del tipo de otorgamiento ROPC no admite la respuesta
mfa_challenge. JWT Bearer- Cuando la política de acceso está inhabilitada en el tipo de otorgamiento
jwt-bearer, no se puede realizar una MFA a través del flujopolicyauth. No se ejecutará una política de acceso después de que se realice el primer factor. Refresh token- Se puede aplicar solo a un subconjunto de solicitudes
refresh_tokenque utilizan el parámetro de contextooriginal_grant_typecomo condición de atributo de contexto.