【问题标题】:Call web services based on Bearer Authorization algorithm基于承载授权算法调用Web服务
【发布时间】:2016-07-18 14:29:13
【问题描述】:

我们有一个安卓应用,我们应该在上面调用一些网络服务。 后端服务基于承载授权算法。当用户登录时,服务器会给他一个访问令牌,这个令牌的有效期约为一个小时。 当我们调用服务时,我们将此令牌作为 HTTP 标头发送。如果令牌有效,则可以。但是当令牌无效时,服务器会给我们一个错误,我们必须调用另一个服务来获取新令牌并用这个新令牌调用该服务。 我的问题是,是否有任何模式可以实现此工作流程? 或者关于这种网络服务调用的任何其他想法。

在此致谢

【问题讨论】:

  • 我可以理解您的用例,但我似乎无法弄清楚真正的问题是什么。你想改写你的问题并专注于问具体的事情吗?实际上,这种身份验证框架在今天是相当标准的,您通常会请求令牌,服务会给您一个 refreshToken 和一个访问令牌。 Refresh token 用于在旧的access token 过期时获取新的access token。身份验证后,您将使用access_token 调用需要身份验证来识别您自己的服务。
  • @SamuelToh 我需要一个设计模式。我想我们需要一种方法来处理这个问题,以防其中一个 Web 服务调用失败。我不知道也许我们应该简单地分别调用这些服务。
  • 我不知道这个问题的任何设计模式。我认为您只需要阅读外部方的 Web 服务文档并适当地处理异常即可。例如。如果它返回某个 HTTP 代码和错误,表明访问令牌已过期,则该代码应调用适当的令牌刷新 API 并使用新的访问令牌再次重试 Web 服务。您的解决方案在很大程度上取决于外部方如何设计其端点和异常。

标签: java android web-services rest


【解决方案1】:

这是我之前实施的解决方案

  1. 在您的 Web 服务中编写一个身份验证函数,该函数将为用户生成并存储一个 TOKEN。如果凭据正常,则返回该 TOKEN
  2. 以安全的方式将 TOKEN 存储在您的 Android 应用程序中。
  3. 在每个 Web 服务调用中使用 TOKEN 作为主要参数
  4. 对于每个 Web 服务调用,必须使用 数据库
  5. 您还可以使用令牌来识别用户
  6. 如果用户从另一台设备登录,则认证功能应该生成一个新的 TOKEN,然后存储并返回它(与第 1 点相同)
  7. 那么新令牌仅适用于 Web 服务调用。经过身份验证的旧设备应返回“无效令牌”

【讨论】:

  • 令牌应该在内存/缓存(MemCache/Redis)中(不在数据库中)。令牌被频繁访问,因此数据库访问会延迟。
  • 这是一个身份验证框架的布局。您还可以将 InnoDB 用于令牌表,它将为您缓存所有内容。您唯一需要做的就是增加 mysql 使用的内存。其他数据库供应商也有类似的技术来提高静态行读取的性能。
  • @ChristlinJoseph 正如 Viswanath 所说,由于服务器开销,服务器无法验证令牌
  • @MojtabaMahamed 你能告诉我们另一种最好的方法吗,因为我的下一个项目涉及一个基于令牌的系统。提前致谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 2012-06-29
相关资源
最近更新 更多