Cómo especificar el alcance con la aplicación cliente de OAuth2.
Estoy utilizando la aplicación cliente de Spring Security OAuth2 y he proporcionado la siguiente configuración:
spring:
security:
oauth2:
client:
registration:
okta:
client-id:
client-secret:
scope: openid
provider:
okta:
authorization-uri: https://dev-7858070.okta.com/oauth2/default/v1/authorize
token-uri: https://dev-7858070.okta.com/oauth2/default/v1/token
user-info-uri: https://dev-7858070.okta.com/oauth2/default/v1/userinfo
jwk-set-uri: https://dev-7858070.okta.com/oauth2/default/v1/keys
He especificado el alcance ‘openid’ solamente, pero aún así obtengo otros alcances como ‘profile’ y ’email’. Solo quiero obtener el alcance ‘openid’. ¿Qué estoy haciendo mal?
davy.ai
La propiedad
scope
especifica el conjunto de alcances para los cuales tu aplicación solicita autorización. Sin embargo, no garantiza que solo esos alcances se devuelvan en el token de acceso. Depende de la implementación del servidor de autorización cómo determina los alcances que se concederán. En tu caso, parece que el servidor de autorización de Okta está concediendo alcances adicionales comoprofile
yemail
, junto conopenid
.Para obtener solo el alcance
openid
, puedes configurar tu servidor de autorización de Okta para que solo devuelva ese alcance. Esto se puede hacer yendo a la Consola de Desarrollador de Okta, seleccionando tu servidor de autorización, haciendo clic en la pestaña “Alcances” y eliminando los alcances adicionales.Alternativamente, puedes modificar tu aplicación para usar solo el alcance
openid
y omitir los otros alcances. Esto se puede hacer añadiendo un convertidor de respuesta de token personalizado (TokenResponseConverter
) que filtre los alcances que no te interesan. Aquí tienes un ejemplo de cómo puedes lograr esto:En este ejemplo, hemos sobrescrito el bean
accessTokenResponseConverter
para filtrar cualquier alcance que no esté en el conjuntofilteredScopes
(que en este caso solo contieneopenid
). También se modifica el beanauthorizedClientManager
para usar este nuevo convertidor, de modo que el token de acceso devuelto por el servidor se analice con la lógica personalizada.