执行WebService时WebSession出现问题(GeneXus)

时间:2014-08-19 21:01:10

标签: identity genexus

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

考虑这个解决方案:

  1. 用户尝试访问App1
  2. 没有网络会话(App1不知道谁在连接)
  3. App1将用户重定向到IdentityProvider的特殊登录页面
  4. 如果用户未登录,则会提供凭据并登录
  5. IdentityProvider有一个用户会话(它知道谁正在连接),然后重定向到referer,并在URL上附加一个加密的userid参数。
  6. App1解码参数,现在知道谁在连接。
  7. App1将用户ID保存到Web会话,现在用户已通过身份验证
  8. App1和IdentityProvider必须共享加密密钥。 考虑一下,如果加密密钥被破坏或破解,任何人都可以冒充其他用户。

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

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

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