当前位置: 首页 > 知识库问答 >
问题:

配置spring-boot-starter-oauth2-client以使用Azure AD进行身份验证

武功
2023-03-14

我想在Spring Boot 2.4中添加Azure AD作为OAuth2提供程序。我遵循了Spring Boot的OAuth2文档,并提出了以下配置:

spring.security.oauth2.client.provider.azuread.issuer-uri=https://login.microsoftonline.com/<tenant uuid>/v2.0
spring.security.oauth2.client.registration.azuread.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.azuread.client-id=<client uuid>
spring.security.oauth2.client.registration.azuread.client-name=Azure AD
spring.security.oauth2.client.registration.azuread.client-secret=<client secret>
spring.security.oauth2.client.registration.azuread.provider=azuread
spring.security.oauth2.client.registration.azuread.scope=openid

为了完整起见,这是我的网络安全配置:

@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
            .authorizeRequests(a -> a
                .antMatchers("/", "/login", "/error", "/webjars/**").permitAll()
                .anyRequest().authenticated()
            )
            .oauth2Login();
        // @formatter:on
    }
}

在上输入凭据返回时https://login.microsoftonline.com,我得到以下错误:

[invalid_id_token] An error occurred while attempting to decode the Jwt: Signed JWT rejected: Another algorithm expected, or no matching key(s) found.

问题源于DefaultJWTProcessor。Nimus JOSE JWT提供的java。

通过查看Firefox网络检查器中的请求,Spring Boot从颁发者URI中选择正确的URL。我不知道出了什么问题,很欣赏任何指点。

共有3个答案

乜璞瑜
2023-03-14

根据您的描述,您似乎想在Spring Boot中使用azure ad作为OAuth2提供程序,我发现一个文档说“Azure Active Directory(AD)的Spring Starter现在已与Spring Security 5.0集成”。它还提供了一个springbooweb应用程序示例。我也试了一下,它确实有效。

我认为需要注意的是,教程说azure ad中设置的重定向url是'http://localhost:8080/login/oauth2/code/'但当我测试时,它被证明是'http://localhost:8080/login/oauth2/code/azure'。

在您的错误,我不确定,但也许你可以更改您的配置范围到openid,配置文件,offline_access。

姬朗
2023-03-14

我有一个类似的问题,如果我没记错的话,范围也有问题。不知道这是否也是您的问题,但在任何情况下,以下配置都适用于我(注意,我使用的是客户端凭据,而不是身份验证代码):

spring:
  security:
    oauth2:
      client:
        provider:
          azure:
            token-uri: https://login.microsoftonline.com/${custom.azure.account.tenant-id}/oauth2/token
        registration:
          azure:
            client-id: ${custom.azure.service-principal.client-id}
            client-secret: ${custom.azure.service-principal.client-secret}
            authorization-grant-type: client_credentials
            scope:
              - https://graph.microsoft.com/.default
越风史
2023-03-14

Azure AD有一些非常不直观(在我看来)的默认行为-我认为这就是你正在经历的:

你的问题原因(我想)

  • 您正在使用标准的OpenID连接作用域
  • 这会导致Azure AD发出用于Graph API的访问令牌
  • 此令牌无法通过自定义API中基于标准的验证,因为它仅设计用于图形API-它可以通过JWT头中的nonce字段识别

你需要做什么

  • 公开API作用域,如“default”

更多信息

  • 请参阅我几年前的博客文章的第3步到第8步
  • 查看我的Web代码示例的OpenID Connect设置
 类似资料:
  • 在这里尝试看看是否有人已经用Rundeck对AD进行了LDAP身份验证。我正在使用RunDesk的JRE运行方法。以下是我到目前为止所做的工作: 我已经设置了jaas-ldap.conf,如Rundeck authentication users页面所示 我已向管理员请求ssl证书。要使用ldaps,rundeck需要ssl证书,这是在他们的站点上编写的。获得证书后,他们提到以下两个步骤: 一旦获

  • 我正在尝试使用keycloak为我的rest apis在Spring云网关中设置o auth2身份验证。keyclcoak将我的请求重定向到登录页面,同时将访问令牌作为承载令牌传递。在许多地方,我发现解决方案是在keycloak适配器中设置bearer-only=true。在使用spring-boot-starter-oauth2-Client时在哪里设置此项。我无法使用keycloak-spri

  • 我们已经看到了一些与Spring Boot的1.5+版本的健康执行器endpoint相关的问题。经历了其中的一些,我们仍然不知所措。 我们的目标是: 要利用Spring Boot/Spring security对安全筛选器链接的自动配置(即不必完全实现/配置) 启用安全的运行状况访问(查看应用程序的运行状况信息的完整视图) 启用不安全的运行状况访问(允许endpoint在Kubernetes中充当

  • 我正在尝试使与和一起工作。我试着按照spring-boot-sample-secure和spring-boot-sample-web-secure中的指南去做,但是我没有让它起作用。 我正在尝试构建一个没有任何ui交互的REST应用程序。因此,我发现这两个样品都不完全适合我的目的。目前我的解决方案是使用AOP。 解决方案对我有效。然而,我想知道这是否是一个好的解决方案。我很好奇是否有更好的解决办法

  • 实际上,我们正在开发一个应用程序,在Spring boot 1.5中,通过oauth2实现的Spring security完成身份验证和授权,现在我们有一个要求,在身份验证部分,拆分身份验证,并将身份验证部分转移到第三方,即SAML集成, 流程:登录- 如何在my spring security中仅使用userid授权用户,并生成自定义令牌(自定义任何spring security筛选器), 如何