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