gpt4 book ai didi

reactjs - 使用 JWT 实现 Azure AD React 和 Spring 安全

转载 作者:行者123 更新时间:2023-12-03 06:41:34 31 4
gpt4 key购买 nike

我认为这是一个典型的应用程序,以 React 前端和 Spring boot 作为后端。我正在尝试设置安全性以使用 Azure Active Directory 对用户进行身份验证和授权。身份验证有效,但授权无效

UI 部分简单且有效,我使用 MSAL 进行身份验证并获取帐户。我可以在控制台日志中看到从这个角度来看一切都很好。我还在 token 请求/响应中看到以下内容: https://login.microsoftonline.com/*{XX}*/oauth2/v2.0/token

scope: "User.Read profile openid email"
token_type: "Bearer"

我遇到的问题是在后端,我收到以下错误:

Failed to authorize filter invocation [GET /api/document/list] with attributes [hasAuthority('SCOPE_User.Read')] using AffirmativeBased [DecisionVoters=[org.springframework.security.web.access.expression.WebExpressionVoter@470b5213], AllowIfAllAbstainDecisions=false]
Sending JwtAuthenticationToken [Principal=org.springframework.security.oauth2.jwt.Jwt@43ebd8ff, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=null], Granted Authorities=[]] to access denied handler since access is denied

正如您在资源服务器上看到的,由于某种原因,我们没有获得用户有权访问的范围(即 User.Read)

Spring 安全设置:

@Configuration
public class SecurityConfig {
@Bean
SecurityFilterChain web(HttpSecurity http) throws Exception {
http.authorizeRequests((authorize) -> authorize
.mvcMatchers("/**").hasAuthority("SCOPE_User.Read") // .permitAll()
.anyRequest().authenticated())
.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt);
return http.build();
}
}

在application.properties中:

spring.security.oauth2.resourceserver.jwt.issuer-uri=https://login.microsoftonline.com/{XX}/v2.0

最佳答案

要非常敏感的是,“后端”是一个资源服务器,而不是客户端(在你的例子中客户端是React应用程序)。

我没有足够的 Azure AD 经验来进行分类,但我怀疑 Microsoft 没有遵循常见的 OpenID 实践(.well-known/openid-configuration 可从颁发者 URI 访问并公开 JWKS_URI) ,这会导致 Spring 无法正确解析授权公钥。

您是否尝试过设置 spring.security.oauth2.resourceserver.jwt.jwk-set-uri 来代替或补充 spring.security.oauth2.resourceserver.jwt.issuer- uri(issuer-uri 必须设置为在 iss 声明访问 token 中找到的确切值,即使尾随斜杠也很重要)?

关于reactjs - 使用 JWT 实现 Azure AD React 和 Spring 安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74469857/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com