使用 spring 安全配置 Azure AD openid 仅用于身份验证

Configuring Azure AD openid with spring security only for authentication

我正在尝试配置 Spring Security OpenID Connect with Azure AD 但仅用于 authenticationwithout calling any tokenEndpointuserInfoEndpoint.

我已成功启动 OpenID 的身份验证流程,我在网络流量中看到 AzureAD 正确重定向到 redirect_uri 以及 code 查询参数(例如 http://localhost:8080/login/oauth2/code/azure?code=0.AAAA3...)。此 code 应该由 Microsoft 的 MSAL4j 库读取,使用 Azure AD public 密钥进行验证,然后提取包含 claims 等的 JWT .

我的问题是我不知道如何配置 Spring 安全 Azure 过滤器来查找 URI 中的令牌,而不是尝试调用 tokenEndpoint。我显然收到以下错误:

MsalServiceException: AADSTS240002: Input id_token cannot be used as 'urn:ietf:params:oauth:grant-type:jwt-bearer' grant.

我猜这是因为我没有在我不想启用的 Azure AD 配置中启用 ID Token 标志(因为我的应用程序在服务器端进行身份验证)。它还说它正在尝试使用我认为我不想要的 on_behalf_of requested_token_use(这是我不需要的授权的一部分)。

我如何配置 Azure AD Spring 安全性以允许通过包含 JWT 的 ?code=... 查询参数进行 身份验证

要解决此问题,您需要在应用程序中启用 implicit flow

请在应用程序的app manifest中将oauth2AllowImplicitFlowoauth2AllowIdTokenImplicitFlow设置为true