使用 Azure AD/Entra ID 在 Spring 框架(非 Spring Boot)中进行 Oauth2login

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

我有一个 Spring Framework 中的 Web 应用程序,其中包含 Spring Security 5.7.7 和 Spring Framework 5.3.25。我正在尝试使用 Azure AD/Entra ID 实施 Oauth2Login。我有工作秘密、租户和客户 ID。

我正在尝试在 Spring Framework 应用程序中设置 Oauth2Login,但不知何故,完整的 Oauth2LoginConfig 没有被触发。当我访问“/faces/start/start.jsf”时,它会打开该页面,而不是将我重定向到 Azure AD 登录页面。

    @Configuration
@EnableWebSecurity
public class OAuth2LoginConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
        .authorizeHttpRequests(authorize -> authorize
                .anyRequest().authenticated()
                )
        
        .oauth2Login(withDefaults());
        return http.build();
        
    }

    @Bean
    public ClientRegistrationRepository clientRegistrationRepository() {
        return new InMemoryClientRegistrationRepository(this.azureClientRegistration());
    }

    @Bean
    public OAuth2AuthorizedClientService authorizedClientService(
            ClientRegistrationRepository clientRegistrationRepository) {
        return new InMemoryOAuth2AuthorizedClientService(clientRegistrationRepository);
    }

    @Bean
    public OAuth2AuthorizedClientRepository authorizedClientRepository(
            OAuth2AuthorizedClientService authorizedClientService) {
        return new AuthenticatedPrincipalOAuth2AuthorizedClientRepository(authorizedClientService);
    }

    private ClientRegistration azureClientRegistration() {

        return ClientRegistration.withRegistrationId("azure")
                .clientId("my-client-id")
                .clientSecret("my-secret")
                .scope("openid", "profile", "email")
           .authorizationUri("https://login.microsoftonline.com/xxx/oauth2/v2.0/authorize")
                .tokenUri("https://login.microsoftonline.com/xxx/oauth2/v2.0/token")
                .build();

}

}

我有什么遗漏的吗?我是否必须在应用程序中的任何位置添加 OAuth2LoginConfig 才能加载它?

我的 pom.xml 有这些依赖项

<dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${spring-security.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-tx</artifactId>
                </exclusion>
            </exclusions>
        </dependency>   
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${spring-security.version}</version>
        </dependency>       
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-oauth2-client</artifactId>
            <version>${spring-security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-oauth2-jose</artifactId>
            <version>${spring-security.version}</version>
        </dependency>
spring-security oauth-2.0 azure-active-directory
1个回答
0
投票

好的,您想向 Azure 提交任何内容来完成 OSS 吗? 我认为这是不可能的 您应该提交诸如用户名和密码之类的信息并传输到Azure 然后,Azure完成oauth并将结果返回到您的项目并决定下一步业务

这是我的建议

© www.soinside.com 2019 - 2024. All rights reserved.