使用Spring Security仿照OAuth2认证,如何保证客户端secret的安全性?

自己模仿OAuth2认证实现登录认证,遇到一下几个问题

下列问题仅存在密码模式、客户端模式

  1. 客户端密钥验证,就是单纯的字符串比较吗?
  2. 前后端分离,前端转入client_id和client_secret,如何保证client_secret的安全性因为如果需要client_secret则需要前端写死(有人说不传client_secret只需要client_id,但是client_id可以随意伪造如何保证准确性)
  3. 获取当前登录用户信息时用户模型Bean对象改如何设计,是否有合理的设计模式适用,因为当前登录人可分为(真实用户、客户端应用)
  4. 登录认证时需要知道用户从那个系统(应用)登录进来

暂时没有头绪怎么实现

阅读 354
2 个回答

你有个很大的误解,就是client_id和client_secret的客户端并不是前端,而是第三方应用的服务端,client_id和client_secret 是不会直接写到前端的

新手上路,请多包涵

4个问题概念都有点混淆,到底是实现服务端,还是客户端

问题1、2,作为OAuth2.0的服务端,密钥使用主要在两个地方

  1. 客户端通过授权码获取token(服务端-认证服务)
  2. 客户端通过token获取资源信息(服务端-资源服务)

都是客户端和服务端的后端直接通过https访问,不会存在前端发送client_id

问题3、4中,好像又是作为OAuth2.0的客户端,无论通过密码、短信,还是OAuth2.0登录(你们作为客户端角色使用别的OAuth服务),只是方式不一样,应该最后都是真实用户登录到你们系统

如果你们作为认证服务来讲,你说的客户端应用登录应该是不存在的,OAuth2.0只代表授权信息(比如名称、头像、手机号,通过profile控制)给客户端(第三方应用),至于客户端拿着授权信息做什么你们是不知道的,就算是登录也在客户端自己系统登录,不存在登录你们系统

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏