使用 Spring Security 和 OAuth2 保护 Spring Rest - 暴露用户名/密码

Posted

技术标签:

【中文标题】使用 Spring Security 和 OAuth2 保护 Spring Rest - 暴露用户名/密码【英文标题】:Securing Spring Rest with Spring Security and OAuth2 - Username/Password are exposed 【发布时间】:2014-12-21 19:14:18 【问题描述】:

我正在开发一个 spring rest 项目并使用 OAuth 2.0 来保护这些 API 免受未经授权的访问。

前端:Angular.js 后端:Spring Rest+ Spring Security + Oauth2

一切正常:

1) 我使用带有以下 uri 的 oauth 从后端获得了一个令牌:

..../oauth/token?grant_type=password&client_id=angularapp&client_secret=angularapp&username=user5@gmail.com&password=user5@123

2) 我从后端获得了一个令牌并使用该令牌访问 API。

现在我的问题是,一旦我使用 /oauth/token?grant_type=password&client_id=angularapp&client_secret=angularapp&username=user5@gmail.com&password=user5@123 访问后端

这个 uri,这一切都在 Angular js 文件的页面中,任何人都可以通过查看页面源来访问它们。

如有必要,请建议一种在 js 级别隐藏这些凭据的方法,在后端进行一些加密或任何其他实现。

我执行错了吗?请提出正确的道路

谢谢

【问题讨论】:

【参考方案1】:

答案在于 JWT 代币。不要使用 URL 编码。 在这种情况下,您的 Auth0 服务器和 API 服务器都共享一个秘密加密密钥。有很多 JWT 框架可以用来避免样板编码。例如:https://github.com/auth0/java-jwt

【讨论】:

以上是关于使用 Spring Security 和 OAuth2 保护 Spring Rest - 暴露用户名/密码的主要内容,如果未能解决你的问题,请参考以下文章

在没有 servlet api 的 webflux 项目中使用 OAuth2 和 Spring Security OAuth2 和 reactor netty

具有密码授予类型的 WebClient 的 Spring Security OAuth 客户端不要求新令牌

获取'无法在grails Spring安全性休息中调用null对象上的方法loadUserByUsername()'

在使用 Oauth、SAML 和 spring-security 的多租户的情况下从 spring-security.xml 中获取错误

使用 spring-session 和 spring-cloud-security 时,OAuth2ClientContext (spring-security-oauth2) 不会保留在 Redis

如何使用 Spring Security 模拟身份验证和授权