使用 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 自定义身份验证的主要内容,如果未能解决你的问题,请参考以下文章

存储用户凭据 iOS 的推荐方式?

如何使用 Spring Security 在代码中获取用户的授权凭据?

MySQL / 存储 MySQL 凭据

使用 JWT 获取令牌而不尝试用户凭据 Laravel?

MongoDB - 发布和获取用户特定数据

在 Java 中存储用户凭据的推荐做法是啥? [关闭]