0

这是问题所在:我有一个名为 APP1 的 KB,它将执行身份提供者的 WebService(集中了不同应用程序的所有登录/会话),如果当前 WebSession 中有已被授予访问权限的登录用户,它将返回 true应用程序或否则为假。当我在与身份提供者相同的 KB 中创建一个 Web 面板时,它工作得很好,当有登录用户时我得到 TRUE,当没有用户时我得到 FALSE。但是当我从 APP1 调用它时它总是返回 false,我认为问题是因为 WebSession 在通过 WS 调用时无法正常工作。关于如何解决它的任何想法?

4

2 回答 2

2

我的第一个建议是尝试使用GAM Single Sign on (X Evolution 3)

WebServices 应该是无状态的。我认为使用数据库而不是 WebSession 可以完成这项工作。

尽管如此,为了调用一个宁静的 WebService,您将不得不做一些更复杂的事情,如处理 CookieContainers,如下面的链接所述。

于 2014-08-19T23:20:15.927 回答
1

考虑这个解决方案:

  1. 用户尝试访问 App1
  2. 没有网络会话(App1 不知道谁在连接)
  3. App1 将用户重定向到 IdentityProvider 的特殊登录页面
  4. 如果用户未登录,它会提供凭据并登录
  5. IdentityProvider 有一个用户会话(它知道谁在连接),然后它重定向到referer,在 url 上附加一个加密的 userid 参数。
  6. App1 解码参数,现在它知道谁在连接。
  7. App1 将用户 ID 保存到 Web 会话中,现在用户已通过身份验证

App1 和 IdentityProvider 必须共享一个加密密钥。考虑一下,如果加密密钥被泄露或破解,任何人都可以冒充另一个用户。

根据您希望系统的安全程度,您应该研究其他安全问题:

  • 每次用户连接时,它的加密登录都与它在 url 中显示的相同,添加noncesalt可以轻松解决。
  • 系统可能会被滥用,生成多个请求,直到它获得有效的加密用户 ID。可以使用大盐和/或阻止来自同一来源的多次尝试来缓解它。

请注意,这不是经过测试的协议,我也没有深入研究安全性。我从 OpenId 中获得了一些灵感,但这是一个简化的协议,我可能会遗漏安全漏洞。

于 2014-08-21T14:11:19.587 回答