【问题标题】:What is best suited to interface with authentication servers for a CLI tool?什么最适合与 CLI 工具的身份验证服务器交互?
【发布时间】:2018-07-05 05:20:06
【问题描述】:

我正在开发两个 linux 程序,一个 CLI 客户端和一个通过 gRPC 通信的服务器,我现在想针对给定的私有授权服务器(例如 LDAP、Active Directory 等)对用户进行身份验证。

我对各种可能的身份验证流程感到困惑。我认为我不能使用任何经典流程,包括 HTTP 重定向,因为我不应该依赖正在安装的浏览器或访问互联网。我什至无法定义我可以重定向到的端点(服务器无法访问互联网,并且两者都在 NAT 之后)。

所以我正在考虑尝试将用户的凭据作为 JWT 令牌文件存储在用户的计算机中,然后从我的 CLI 客户端程序加载它以将其包含在我的 RPC 请求中,然后在服务器端对其进行验证。但是,假设我是对的,那么获取此令牌文件的最佳标准方法是什么?

【问题讨论】:

  • CLI 的用户是否必须输入他们的用户名/密码,然后服务器使用您的 LDAP 服务器验证这些凭据?

标签: authentication oauth jwt saml grpc


【解决方案1】:

如果您有浏览器,您可以使用 OAuth 和“oob”(带外)方法,在该方法中 CLI 打开浏览器并在用户进行身份验证后显示用户复制/粘贴到 CLI 中的数字。这就是我的flickr backup CLI 的工作方式。他们复制/粘贴的数字是因为 CLI 没有 OAuth 端点,而该数字是他们的访问令牌,允许我代表他们调用 flickr api。

如果您不能使用浏览器,CLI 可以只接受用户的用户名/密码,将其发送到服务器并接收令牌作为回报。你真的不需要像 JWT 这样的花哨的东西。一个简单的 UUID 就足够了。 UUID '断言' 允许用户访问服务器的其他 RPC 方法。服务器将验证 UUID 令牌以确保它仍然有效。如果您需要令牌中的用户信息,服务器可以这样做。如果令牌仍然有效,则将用户信息保留在客户端磁盘之外,并且只有 CLI 可以访问该信息。

因此,实际上,您需要一个新的服务器 RPC 方法,可能是 authenticate,它接受用户名和密码并返回 UUID 令牌。然后,所有其他 RPC 方法都需要接受该令牌并在执行请求的功能之前对其进行验证。作为服务器端身份验证过程的一部分,服务器可以将该令牌与它从 LDAP 服务器获得的用户信息相关联,因此您无需将该信息存储在客户端上。让您也可以在服务器上对其进行加密,如果客户端需要它,它会使用 UUID 令牌询问它是否仍然有效(生存时间?)。如果不再有效,客户端只需要再次询问用户名/密码,服务器可以通过 LDAP 重新验证用户并刷新令牌和用户信息。

gRPC 有authentication protocols,但 SSL/TLS 似乎无法满足您的需求,并且 OAuth 无法工作,因为您没有浏览器。因此,也许滚动您自己的简单令牌服务 (authenticate) 并结合 LDAP 身份验证可能是一个可行的选择。

【讨论】:

  • 这听起来像 Azure CLI 的工作方式,他们让你通过加载 url 并输入 CLI 提供给你的令牌来登录。
猜你喜欢
  • 2020-06-18
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多