提问者:小点点

OAuth2 Spring Boot缺少必填”用户名


我正在尝试使用Spring Boot OAuth通过Zoom(https://marketplace.zoom.us/docs/guides/auth/oauth)在我的应用程序上进行授权

我正在尝试打开页面(/zoomendpoint),我的应用程序将我重定向到Zoom。在这里,我正在进入zoom帐户,Spring将我重定向到错误页面:

[missing_user_name_attribute] Missing required "user name" attribute name in UserInfoEndpoint for Client Registration: zoom

不知道怎么处理这是我的代码

配置

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/", "/login**", "/error**").permitAll()
                .anyRequest().authenticated()
                .and().logout().logoutUrl("/logout").logoutSuccessUrl("/")
                .and().oauth2Login();
    }

    @Bean
    public ClientRegistrationRepository clientRegistrationRepository() {
        List<ClientRegistration> registrations = new ArrayList<>();
        registrations.add(zoomClientRegistration());
        return new InMemoryClientRegistrationRepository(registrations);
    }

    private ClientRegistration zoomClientRegistration() {
        return ClientRegistration.withRegistrationId("zoom")
                .clientId(/**myClientId**/)
                .clientSecret(/**{myClientSecret}**/)
                .clientAuthenticationMethod(ClientAuthenticationMethod.BASIC)
                .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
                .redirectUriTemplate("{baseUrl}/login/oauth2/code/{registrationId}")
                .authorizationUri("https://zoom.us/oauth/authorize")
                .tokenUri("https://zoom.us/oauth/token")
                .userInfoUri("https://api.zoom.us/v2/user")
                .clientName("Zoom").build();
    }
}

在我配置的Zoom应用程序中

OAuth的重定向URL:超文本传输协议://{my_host_name}/login/oaut2/code/zoom

白名单URL:超文本传输协议://{my_host_name}/zoom

我的应用程序的endpoint也在/zoom


共2个答案

匿名用户

您必须在Client注册中添加userNameAtbanteName并设置为正确的username属性,它可以是openId的“sub”,也可以是“email”、“id”等不同的东西,检查https://api.zoom.us/v2/user响应以查找匹配的属性。

问候

匿名用户

对我来说,当我尝试使用Spotify Oaut2.0和Spring Boot 2.5.4进入经过身份验证的endpoint(在我的java应用程序中)时,会出现异常。我缺少属性:

spring.security.oauth2.client.provider.spotify.userNameAttribute=email

这是描述在SpringOaut2留档

丢失的属性也会出现类似的异常:

spring.security用户info-uri=https://api.spotify.com/v1/me然后抛出异常:[missing_user_info_uri]缺少所需的UserInfo Uri在UserInfoEndpoint客户端注册:Spotify