登录 Spring Security 后如何返回基本令牌?
Posted
技术标签:
【中文标题】登录 Spring Security 后如何返回基本令牌?【英文标题】:How to return Basic token after logging into Spring Security? 【发布时间】:2022-01-20 00:50:11 【问题描述】:我在我的 Springboot 项目中使用基本授权。成功登录后,我可以检查后端网页,并在Network
选项卡中看到Authorization
的值为Basic YmNyeX323G5yb2xsdGVjaC5jb206cyE5c2RzZA
。
然后,我可以使用值 Basic YmNyeX323G5yb2xsdGVjaC5jb206cyE5c2RzZA
通过 Postman 向服务器发出请求,方法是将该值设置为 Authorization
值。
那么,我的问题是,我如何在登录后返回这个值?
这是我的SecurityConfiguration.java
文件:
@Configuration
@EnableConfigurationProperties
public class SecurityConfiguration extends WebSecurityConfigurerAdapter
@Autowired
MongoUserDetailsService userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception
http.csrf().disable().authorizeRequests()
.antMatchers("/", "/register").permitAll().anyRequest().authenticated()
.and().logout(logout -> logout
.permitAll()
.clearAuthentication(true)
.logoutUrl("/logout")
.logoutSuccessUrl("/")
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID"))
.httpBasic()
.and().sessionManagement().disable();
@Bean
public PasswordEncoder passwordEncoder()
return new BCryptPasswordEncoder();
@Override
public void configure(AuthenticationManagerBuilder builder) throws Exception
builder.userDetailsService(userDetailsService);
可以返回上述基本授权令牌的端点是什么样的?
【问题讨论】:
你不会... 基本身份验证令牌只不过是用:
分隔的base64 编码的用户名和密码。这是由浏览器完成的,它在服务器上被解码以检查用户名/密码。
【参考方案1】:
SecurityContext context = SecurityContextHolder.getContext();
Authentication authentication = context.getAuthentication();
Object details = authentication.getDetails();
试试这个,可能有用,令牌详解
【讨论】:
我已经用过这个了,这个应该可以了。【参考方案2】:您不这样做,只是因为基本身份验证不是这样工作的。
“令牌”(或者更确切地说是标头)在客户端上构建并发送到服务器。令牌只不过是 username 和 password 由 :
分隔,然后进行 Base64 编码。这是 HTTP 标准的一部分,只是由浏览器提供/完成。因此,在输入用户名/密码后,您的浏览器将创建一个包含该编码令牌的Authorization
。
所以你输入了
用户名:bcrynrolltech.com 密码:s!9sdsd
变成YmNyeX323G5yb2xsdGVjaC5jb206cyE5c2RzZA
(bcrynrolltech.com:s!9sdsd
编码为 Base64)。以Authorization: YmNyeX323G5yb2xsdGVjaC5jb206cyE5c2RzZA
发送到服务器。哪个可以使用相反的过程来解码它。 (就像我检索用户名/密码一样)。
然后在服务器上对令牌进行解码,在;
上拆分,并将分离的用户名和密码传递给身份验证机制进行验证。
因此,生成此“令牌”的不是服务器,也不是令牌,而只是编码的用户名和密码。
在WikiPedia 上有更多关于基本身份验证如何工作的深入信息。 RFC2617 和 RFC7617 非常详细地描述了该协议。
【讨论】:
以上是关于登录 Spring Security 后如何返回基本令牌?的主要内容,如果未能解决你的问题,请参考以下文章
授权后返回上一页,Spring Security AuthenticationSuccessHundler
Spring Boot + Spring Security Restful 登录
spring security使用自定义登录界面后,不能返回到之前的请求界面的问题
使用 Spring Security 成功登录后如何正确更新登录日期时间?