使用SAML/OpenID Connect为两个网站实施SSO.如何验证Swing客户端?

Can*_*ell 5 native saml single-sign-on openid-connect

我正在尝试为两个网站实施SSO,目前正在调查SAMLOpenID Connect.但我需要使用相同的凭据来验证基于Swing的桌面客户端.

我已经了解了OpenID Connect的隐含流程,但它仍然需要打开浏览器.

似乎解决了这类问题的SAML增强型客户端或代理配置文件似乎没有被我尝试过的大多数idps实现.(只有Shibboleth支持它,而Shibboleth的文档并不那么好).

  • 什么样的解决方案适用于这个问题?
  • 是否有其他支持本机和Web应用程序的SSO机制?
  • OpenID Connect/SAML是否存在针对此类问题的解决方法?
  • 仅使用与SSO IdP相同的凭据公开REST API来验证Swing客户端是不是一个好主意?

Mic*_*urt 2

OpenID Connect 试图解决两方之间共享用户身份验证的问题:身份提供商 (OP) 和客户端。

OIDC 文档中没有明确说明这一点,但根据我的经验,OIDC 不会尝试解决如何跨不同平台(网络、移动/桌面)验证自己的用户的问题。

这是 OAuth 2.0“资源所有者密码凭据授予”极少数有效用例之一,其中客户端用用户凭据交换令牌。

在这里,您位于自己的系统内,您的移动/桌面应用程序不能被视为第三方,它只为用户提供一种可信的方式向您发送其凭据。
您可以确保应用程序不会存储它们,因为您可以控制代码库。

编辑:移动应用程序实例可以共享(除非您设法动态分配客户端 ID)无法保密的客户端 ID/秘密。它构成了一个非常薄的客户端身份验证层,试图确保请求确实来自您的移动/桌面应用程序:

POST /oauth/token HTTP/1.1
Authorization: Basic ${BASE64_ENCODED_CLIENTID_CLIENTSECRET}
  grant_type=password&
  username=${USERNAME}&
  password=${PASSWORD}
Run Code Online (Sandbox Code Playgroud)

有些人不喜欢它指定如何对用户进行身份验证,并且某些公司可能拥有除用户名+密码之外的其他凭据,例如在使用两因素身份验证时。此外,有些人错误地使用了 ROPC 授权,因为它仅在组织内部有效,允许客户端请求您自己的用户凭据会破坏 SSO/授权协议的意义。

OIDC 仍然是 OAuth 2.0,这意味着您可以自由地实现自己的“用户凭据”流程,以从桌面/移动应用程序获取访问令牌 + ID 令牌。但这不属于 OIDC 的范围。

顺便说一句,SAML是在移动应用程序还没有真正出现的时候创建的:

SAML 2.0 于 2005 年 3 月被批准为 OASIS 标准