您好,我一直在尝试配置spring,如果用户/密码通过LDAP服务器的身份验证,那么它将返回JWT令牌;考虑以下用例;
在上图中,我配置了WebSecurity来检查/过滤带有承载的请求。请参见下面的代码
WebSecurity配置。JAVA
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtAuthenticationEntryPoint unauthorizedHandler;
@Autowired
JwtAuthorizationTokenFilter authenticationTokenFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
// Configure Web Security
// Allow only /auth/
// Disallow all others
http
.csrf().disable()
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler)
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(HttpMethod.POST,
"/auth/**")
.permitAll()
.anyRequest().authenticated();
//Custom JWT
http.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
// disable page caching
http.headers().cacheControl();
}
}
AuthCtrl。JAVA
@RestController
@RequestMapping("auth")
public class AuthCtrl {
private static final Logger logger = LoggerFactory.getLogger(AuthCtrl.class);
@Autowired
@Qualifier("authenticationManagerImpl")
private AuthenticationManager authenticationManager;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
@Qualifier("userDetailsServiceImpl")
private UserDetailsService userDetailsService;
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String post(@RequestBody Map<String, String> credentials) {
logger.info("POST: {} | {} ",credentials.get("username"), credentials.get("password"));
String username = credentials.get("username");
String password = credentials.get("password");
Objects.requireNonNull(username);
Objects.requireNonNull(password);
try {
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
// Reload password post-security so we can generate the token
final UserDetails userDetails = userDetailsService.loadUserByUsername(username);
final String token = jwtTokenUtil.generateToken(userDetails);
return token;
} catch (DisabledException e) {
throw new AuthenticationException("User is disabled!", e);
} catch (BadCredentialsException e) {
throw new AuthenticationException("Bad credentials!", e);
}
}
@ExceptionHandler({AuthenticationException.class})
public ResponseEntity<String> handleAuthenticationException(AuthenticationException e) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(e.getMessage());
}
}
以上配置基于我看过的youtube指南,也是从git中的演示源中提取的。帮了大忙!,对所有者的信贷。了解了过滤器是如何工作的。
上述源已经可以过滤掉所有受保护的API,并在未授权时发送未经授权的响应。唯一允许匿名访问的api i是身份验证api/auth
。它已经可以接收请求并通过Web过滤器。
但是我不太明白如何对LDAP服务器的上述请求进行身份验证并发送JWT令牌。在我读过的指南中,他们正在获取数据库上的用户信息。
我在WebConfiguration中阅读了一些关于LDAP配置的留档,但我无法将其与我当前的过滤器相关联。
请检查下面的链接,我使用Spring 4创建了它。
配置您自己的ldap服务器,而不是类路径上的. ldif文件。
https://github.com/merugu/springsecurity/tree/master/ldapauthenticationjwttoken
唯一的区别是Spring 5应该使用高级密码编码算法,如Bcryptpasswordencoder。因为LDAPpasswordEncoder已被弃用。
快乐编码!
我在做一个全堆栈的web应用程序。我的前端由angular-cli组成,后端由node+Express构建。
本文向大家介绍Angular之jwt令牌身份验证的实现,包括了Angular之jwt令牌身份验证的实现的使用技巧和注意事项,需要的朋友参考一下 Angular之jwt令牌身份验证 demo https://gitee.com/powersky/jwt 介绍 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该toke
我试图用PHP为两个主题相连的领域创建一个简单的SSO系统。 因此,我想知道是否可以将包含用户用户名的签名JWT令牌从域a存储到本地存储。然后使用来自域B的相同密钥来验证JWT,这将导致成功的身份验证。 我在谷歌搜索了一些答案,我发现其中一些包含了一个中间认证域,它将负责认证。但我只想把我有的两个域联系起来。 谢了。
我有一个Rest Spring BootAPI,当用户验证API返回令牌jwt时,我在浏览器中注意到该令牌出现在响应头中 如何通过Reactjs将此令牌存储在本地存储浏览器中? 我的请求代码如下所示:
我有一个LaravelAPI(实际上是LumenAPI)服务于VueJS前端。Vue应用程序允许用户登录到谷歌。然后将Google令牌发送回Lumen API,后者使用Google验证令牌,然后验证电子邮件地址是否为有效用户。然后它生成一个令牌,与用户一起存储在数据库中,并返回用户对象。 我没有使用Passport或jwt auth之类的东西。那么现在,我如何使用默认的Auth中间件来验证(现在已
在我的Jitsi Meet Prodody配置文件中:~/。jitsi meet cfg/prosody/config/conf.d 我有以下配置: 有了它,我可以通过令牌进行身份验证。 但是,如果我不指定任何令牌,例如: https://jitsi.mydummyserver.com/test 然后我得到以下提示询问用户和密码: 有没有办法只允许令牌身份验证并完全摆脱那个提示? 谢谢