使用SAML / OpenID Connect实现两个网站的单点登录。 如何验证Swing客户端?

5

我正在尝试为两个网站实现SSO,目前已经研究了SAML和OpenID Connect。但是我需要使用相同的凭据对基于Swing的桌面客户端进行身份验证。

我了解了OpenID Connect的隐式流程,但似乎仍然需要打开浏览器。

SAML增强客户端或代理配置文件似乎可以解决这种问题,但我尝试过的大多数idps都没有实现(只有Shibboleth支持它,而Shibboleth的文档不太好)。

  • 有什么解决方案适用于这个问题吗?
  • 是否有其他SSO机制支持本地和Web应用程序?
  • 是否有OpenID Connect / SAML的解决方法来解决这种问题?
  • 将公开REST API作为一个好主意来使用相同的凭据验证Swing客户端吗?

设计一个简单的自定义令牌进行身份验证:http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ - lcryder
你所说的桌面应用程序是由同一家公司管理的身份提供者吗?换句话说,您是否控制身份提供者和桌面应用程序的代码库? - Michael Técourt
@MichaelakoTecourt 是的 - Can't Tell
1个回答

2
OpenID Connect试图解决两个方面之间共享用户身份验证的问题:身份提供者(OP)和客户端。
OIDC文档中没有明确说明,但根据我的经验,OIDC并不尝试解决如何在不同平台(Web、移动/桌面)上对自己的用户进行身份验证的问题。
这是OAuth 2.0“资源所有者密码凭证授权”中非常少有的有效用例之一,客户端使用用户凭据交换令牌。
在这里,您处于自己的系统内,您的移动/桌面应用程序不能被视为第三方,它只提供了一种可信赖的方式让用户向您发送其凭据。 您可以确保该应用程序不会存储这些凭据,因为您对代码库具有控制权。
编辑:移动应用实例可以共享一个客户端ID/密钥,无法保密(除非您设法动态分配客户端ID)。它构成了一个非常薄的客户端身份验证层,试图确保请求确实来自您的移动/桌面应用程序。
POST /oauth/token HTTP/1.1
Authorization: Basic ${BASE64_ENCODED_CLIENTID_CLIENTSECRET}
  grant_type=password&
  username=${USERNAME}&
  password=${PASSWORD}

有些人不喜欢它明确指定了如何验证用户身份,一些公司可能有比用户名+密码更多的凭据,例如使用双重认证。此外,有些人错误地使用ROPC授权,因为它只在组织内部有效,允许客户端请求您自己的用户凭据会破坏拥有SSO /授权协议的意义。
OIDC仍然是OAuth 2.0,这意味着您可以自由实现自己的“用户凭据”流程,以从桌面/移动应用程序中获取访问令牌+ ID令牌。但这超出了OIDC的范围。
顺便说一下,SAML是在移动应用程序还不是主流时创建的:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接