在没有jwt的情况下从后端检索角色

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

我的目标是从后端提供用户角色,例如,如果用户想在后端查看我的资源,他可以使用谷歌登录,而角度应用程序将从谷歌授权服务器检索到的访问令牌并将其发送回我的资源服务器和后端检查令牌,但问题是谷歌提供的访问令牌不声明命名角色,所以基本上我应该从数据库检索角色,然后将其发送回前端,我的问题在前端一边,因为即使我通过修改安全上下文权限来保护后端,我在前面仍然有问题,因为如果有人修改了响应,它是不安全的,哈可以改变他的角色,我应该做什么

package com.example.ressource_server.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception{
        httpSecurity.oauth2ResourceServer( r-> r.jwt(jwtConfigurer -> jwtConfigurer.jwkSetUri("https://www.googleapis.com/oauth2/v3/certs")));
        httpSecurity.authorizeHttpRequests(auth -> auth.anyRequest().authenticated());
        return httpSecurity.build();
    }
}
javascript java angular spring-boot security
1个回答
0
投票

最简单的答案,但不一定是最简单的实现是实现您自己的登录包装器。

假设您的用户已登录,并且您有一个通过所有验证的闪亮令牌,您可以将其用作您的应用程序自己的登录凭据(坚持我)。

使用 JWT 或 cookie 或会话,或者 您可以设置自己的系统,但实际上根本不使用第 3 方令牌。

我个人使用 JWT - 这对此很有效;如果您确实愿意,您可以将第 3 方令牌作为额外声明包含在 JWT 有效负载中(如果您将来需要使用它)。

但说实话,一旦第 3 方表示用户已成功登录,就没有理由担心在应用程序的其余部分中使用该令牌,除非您计划使用它与第 3 方一起执行其他操作代表用户。

因此,使用令牌(而不是用户的直接凭据)作为登录证明,然后继续填充您自己的 JWT(或其他东西)并使用它。

或者,您可以自己执行此操作并生成一些带符号的值,您可以在基于令牌进行通信时附加并签入标头。如果声明已被更改,签名将无法通过验证,并且您知道它已被篡改。 (本质上,这就是 JWT 的含义 - 一个已签名的数据集,以便您知道是否有任何值已被修改)。

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