使用 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