0

后台采用的是AspNet .NET4.5

webapp认证处理逻辑

我正在做一个企业微信应用主要功能是将ERP系统中的工作流审批功能移植到webapp中,在企业微信中通过微信的网页授权登录ERP,ERP内部有一个OAuth2.0的认证服务,返回一个身份令牌(包含了用户ID 企业微信用户ID 用户名称 等一些非敏感性的业务信息 1天的过期时间)给webapp,然后webapp每次进行业务操作(工作流审批)的时候就带上我ERP颁发的令牌信息请求,在ERP后台通过解析令牌信息获取对应的用户ID,企业微信用户ID,名称等一些业务信息然后进行操作。

项目上线后发现了一些问题:
  1. 当在PC端ERP系统中更改了一些用户信息后比如(企业微信用户ID 用户名称)这样的信息会导致当webapp处理流程是获取到的令牌信息中的用户信息不正确导致业务操作异常。
初步解决方案:
  1. 对于这种问题我想到的方法是 OAuth令牌撤销 让webapp的令牌立即过期,重新获取。
    我看到网上有很多对于令牌撤销的操作就是添加一个令牌黑名单方式,将过期的令牌放入黑名单,然后存储到redis(如果放到redis中,发生了redis服务器重启丢失了黑名单怎么办!!?)中或者数据表(存在数据表中每次认证都去访问数据库感觉不是很妥!!?)中,然后每次认证的时候判断当前令牌是否存在于黑名单中。
  2. 也可以令牌存储一个用户ID 然后每次认证成功后去根据用户ID在数据库中查询相关信息(不过这样感觉很蠢。。)
  3. 或者每次发令牌的时候将令牌信息保存到redis中 类似session 然后令牌中存储一个key(用户ID)每次认证成功后去redis中取用户相关信息,这样感觉回到了session老路上了,(是不是不利于用户的扩展哇?)

疑问:

  1. 如果放到redis中,发生了redis服务器重启丢失了黑名单怎么办!!?
  2. 黑名单存在数据表中每次认证都去访问数据库感觉不是很妥!!?
  3. 结合redis+数据表这样处理 (这样好像大部分都会去查数据!!)?
  4. 令牌的过期时间是不是应该设置的短一些比如 2小时 ?
webapp身份认证的疑问:
  1. 各位结合你们的项目你们的webapp身份认证是如何处理的?
  2. 对于JWT OAuth2.0 这些认证方式 令牌过期时间设置(一般多少时间) 令牌过期 和令牌撤销 是如何处理的?还有就是在令牌中都保存了哪些用户信息,有没有采取令牌中只保留用户ID然后在Redis中保存用户详细身份信息(这样感觉和session很像除了客户端保存信息的地方不一样(session是cookie))
mecode 254
2017-12-19 提问
0 个回答

撰写答案

推广链接