OAuth2 Spring boot 缺少必需的“用户名" [英] OAuth2 Spring boot Missing required "user name

查看:79
本文介绍了OAuth2 Spring boot 缺少必需的“用户名"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to use Spring Boot OAuth to make authorize at my app through Zoom (https://marketplace.zoom.us/docs/guides/auth/oauth)

我正在尝试打开页面(/zoom 端点),我的应用将我重定向到 Zoom.在这里,我正在输入 zoom 帐户,Spring 将我重定向到错误页面:

I'm trying to open page ( /zoom endpoint) my app redirects me to Zoom. Here I'm entering into zoom account and Spring redirects me to the error page:

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

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

No idea how to deal with it. Here's my code

配置

@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 应用程序中

At Zoom Application I've configured

OAuth 的重定向 URL:http://{my_host_name}/login/oauth2/code/zoom

Redirect URL for OAuth: http://{my_host_name}/login/oauth2/code/zoom

白名单网址:http://{my_host_name}/zoom

我的应用程序在 /zoom

推荐答案

您必须在 ClientRegistration 添加 userNameAttributeName 并设置为正确的用户名属性,它可以是 openId 的sub",但也可以是email"不同的东西, "id" 检查 https://api.zoom.us/v2/user 响应找到哪个属性匹配.

You've to add userNameAttributeName at ClientRegistration and set to the correct username attribute, it could be "sub" for openId, but also something different as "email", "id" check the https://api.zoom.us/v2/user response to find which attribute match.

问候

这篇关于OAuth2 Spring boot 缺少必需的“用户名"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆