没有浏览器的 SAML 2.0

min*_*ryc 5 authentication identity delegation saml federation

假设我有一个目前是这样的系统:

  1. Monolithic Web App:包含自己的帐户并依赖客户端使用(本质上)HTTP BasicAuth 登录。也就是说,用户名和密码被传递到服务器。

  2. 胖客户端:登录上述应用程序,接收访问令牌,此后用于 REST API 调用。

基本上,我想将上述转换为这种系统:

  1. SAML 2.0 IdP:身份记录系统

  2. 相同的 Web 应用程序,减去身份验证责任

  3. 胖客户端:不变。<--硬性要求

因此,至关重要的是,我不能让胖客户端执行标准的 SAML 2.0 浏览器 SSO 重定向。有什么解决办法吗?本质上,我想要与 OAuth2 相同的功能password_grant,但在 SAML 2.0 世界中。

做了一些研究,我遇到了 SAML Enhanced Client 或 Proxy,但支持似乎参差不齐。令人沮丧的是,我在 WebApp 上拥有明文形式的该死的凭证;有没有一些简单的方法可以使这项工作?

请问HTTP工具绑定做的伎俩?

Flo*_*ter 0

注意:这个问题也许最好在 https://security.stackexchange.com/ 上提出

如果您无法更改胖客户端,则无法使用 SAML 或任何形式的基于浏览器的单点登录 (SSO)。就这么简单。

此外,您期望用户将其 SSO 凭据输入胖客户端,然后通过 HTTP 基本身份验证发送并自动将其输入表单的方法是不安全的,原因如下:

  1. 用户的纯文本密码需要通过几个永远不会看到它的实例传递,并且它可能也会存储在胖客户端中。即使它被加密(传输中或静态),这也比仅作为哈希值存储在 IdP 上(以及用户的内存或密码管理器中)的密码安全性较低。
  2. 期望用户在 IdP 登录表单以外的任何地方输入 SSO 凭据会导致危险地使用凭据,从而使用户更容易受到网络钓鱼的影响。

如果您计划使用 IdP 进行 SSO 到不止一个客户端(而不是这一传统胖客户端),则可以使用应用程序密码之类的内容:

  1. 用户使用 SSO (SAML) 登录 Web 应用程序
  2. 用户创建应用程序密码(也可以选择撤销它)
  3. 然后应用程序密码与胖客户端一起使用。

“应用程序密码”可以是一个简单的唯一 ID(作为“用户名”输入)和一个随机生成的长字符串(作为“密码”发送)的组合。如果胖客户端可以存储这些凭据,那么这种方法将在某种程度上用户友好,尽管不如真正的 SSO 安全。

从长远来看,请考虑更新胖客户端。