spring 身份验证服务器中未显示 openid 范围同意屏幕

问题描述 投票:0回答:1

我已经配置了我的 spring 身份验证服务器,但 openid 的同意屏幕未显示,但对于其他范围(例如 read),它显示同意屏幕,这是什么原因?

我在互联网上搜索过,但没有找到任何解决方案,有人可以帮助我吗?如果我们想仅显示特定范围而不是其他范围的同意屏幕,有没有办法做到这一点?

spring spring-boot spring-mvc spring-security spring-data-jpa
1个回答
0
投票

我已经配置了我的 spring 身份验证服务器,但 openid 的同意屏幕未显示,但对于其他范围(例如 read),它显示同意屏幕,这是什么原因?

在我的一个项目中遇到了类似的问题,即使请求的范围只是 openid,我也想显示同意屏幕。 出现此行为的原因是,当唯一请求的范围是 openid 时,身份验证提供程序会对请求进行身份验证并返回 OAuth2AuthorizationCodeRequestAuthenticationToken,而不检查系统中是否存在同意。

您可以在

requireAuthorizationConsent
类中的
OAuth2AuthorizationCodeRequestAuthenticationProvider
方法中找到此逻辑。

重写此行为的一种方法是实现 AuthenticationProvider 并创建自定义类。

还重写支持方法,如下所示:

        public boolean supports(Class<?> authentication) {
        return OAuth2AuthorizationCodeRequestAuthenticationToken.class.isAssignableFrom(authentication);
    }

您可以在身份验证方法中实现自定义逻辑,并确保在身份验证方法中返回

OAuth2AuthorizationConsentAuthenticationToken
,以便它重定向到同意屏幕。

您创建的 CustomAuthenticationProvider 应添加到您的配置类中 OAuth2AuthorizationConfugurer 的认证提供程序中,如下所示。

            http.getConfigurer(OAuth2AuthorizationServerConfigurer.class)
                .authorizationEndpoint(authorizationEndpoint ->
                        authorizationEndpoint                               
                            .authenticationProvider(customOauth2AuthorizationCodeRequestAuthenticationProvider())
© www.soinside.com 2019 - 2024. All rights reserved.