使用 MongoDB 获取存储的用户凭据的 JAVA Spring 自定义身份验证
Posted
技术标签:
【中文标题】使用 MongoDB 获取存储的用户凭据的 JAVA Spring 自定义身份验证【英文标题】:JAVA Spring Custom Authentication Using MongoDB for fetching stored user credentials 【发布时间】:2017-07-09 12:06:43 【问题描述】:您好 *** 团队,
我在 REST 调用中遇到了一个问题,在尝试深入研究 HTTP 错误后我对此一无所知。 尽管 JWT 令牌的生成和获取成功,但不知何故授权不起作用。
我在 Springboot 应用程序中的简短描述: (可用于分析问题) https://github.com/vivdso/SpringAuthentication
与名为 UserAccounts 的后端 MongoDb 集合对话的 DbRepository 调用,其中存储了角色和凭据详细信息,包括密码(密文)。
一种 JWT 令牌生成机制,该机制返回一个令牌,该令牌必须附加到 HTTP 标头以供后续 API 调用。
简而言之就是流程。
".....:8080/auth" 方法 post Content-Type application/json body:"username":"user","password":"sample" 响应应该是 jwt 令牌
然后
尝试认证的 url .....:8080/order。
****EXPECTED RESULT : Header" Authorization:$jwtToken from step 6 实际结果::( 错误:403 禁止,这应该是完全认证的,应该让用户访问这个 api。预期结果:“你好这是我的订单”****
这只是一个简单的应用程序,无需担心太多细节。 任何帮助将不胜感激。
提前致谢。
【问题讨论】:
【参考方案1】:在您的代码中我找不到过滤器注册。
尝试在WebSecurityConfig.java中添加
@Bean
public CustomAuthenticationTokenFilter authenticationTokenFilterBean() throws Exception
CustomAuthenticationTokenFilter authenticationTokenFilter = new CustomAuthenticationTokenFilter ();
authenticationTokenFilter.setAuthenticationManager(authenticationManagerBean());
return authenticationTokenFilter;
然后注册
http
.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
配置方法里面
告诉我
【讨论】:
嗨瑞克,感谢您的帮助, 我做了建议的代码更改,但收到以下内容 "timestamp": 1487594450789, "status": 403, "error": "Forbidden", "message": "Access is denied", "path": "/order" 跨度> 另一个建议看看这个项目github.com/rixlabs/springboot-sandbox 是一个小沙箱,可以满足您的需求。也许它可以提供帮助。如果您仍有问题,请告诉我【参考方案2】:这是一个角色不匹配问题。与 jwt 中的角色不匹配。 更改了代码以更正角色并且效果很好 -
public CustomDbRepository()
List<String> roles = new ArrayList<>(1);
//roles.add("ROLE_USER");
roles.add("USER");
【讨论】:
以上是关于使用 MongoDB 获取存储的用户凭据的 JAVA Spring 自定义身份验证的主要内容,如果未能解决你的问题,请参考以下文章