【问题标题】:Securing a Rest API to be used in conjunction with a desktop app保护要与桌面应用程序结合使用的 Rest API
【发布时间】:2016-08-21 14:08:16
【问题描述】:

我目前正在使用 Spring Boot 构建一个 REST API。目前该 API 将向 JavaFX 应用程序传递 JSON 数据,将来该 API 可能会被 Angular 应用程序访问。可能还值得注意的是,用户无法创建新用户,该责任将由系统管理员承担。我想知道这种 API 中的身份验证。

一般的想法是只有一个级别的授权,这将使用户可以访问系统中的所有数据。我想知道我应该如何实施此授权。我研究过的大多数解决方案(Spring 安全性、OAuth 等)似乎都不起作用,因为客户端应用程序不会在浏览器中运行。

目前,我在每次请求时都从客户端传递用户详细信息,并根据数据库中显示的密码哈希值检查它们。

所以我的问题是,如何保护不会在浏览器中运行的应用程序,因此无法访问 cookie、http 会话等。

【问题讨论】:

  • "...它们似乎无法工作,因为客户端应用程序不会在浏览器中运行。" - 你为什么这么认为? OAuth 或其中任何一个都可以在完整的应用程序中使用。您只需要实现客户端。任何客户端都可以访问 Cookie 等。简单的加密 cookie 机制或 OAuth 将满足您的需求。
  • Spring Security 适用于非 Web 或非浏览器应用程序

标签: java spring rest security http


【解决方案1】:

无论客户端是桌面应用程序、移动应用程序还是网络应用程序,相同的主体都可以应用于 RESTful API 的身份验证。

通常,令牌可以存储在客户端并使用直到它过期,如果有的话(因此需要刷新)。然后,您可以将令牌作为不记名令牌包含在 Authorization 标头中,每个 API 调用都会从图片中完全删除 Cookie。

很多人喜欢使用 JWT,它只是一个 JSON 结构,经过 base64 编码,然后签名以防止篡改。 JWT 可以轻松摆脱持久层并真正构建分布式身份验证框架,而无需依赖 Redis 或其他一些 Key/Value Store。唯一需要的是秘密或私钥。这种风格中使用 JWT 的缺点之一是更难将令牌列入黑名单,因为它们在过期之前都是有效的。令牌本身也可能比不透明的令牌更大。

根据您使用的技术,您将检查令牌是否已签名或查找用户/会话信息服务器端。

【讨论】:

    猜你喜欢
    • 2019-12-19
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多