Security 如何安全地进行跨域身份验证?

Security 如何安全地进行跨域身份验证?,security,session,authentication,Security,Session,Authentication,所以。我有域A.com,其中用户身份验证在域B.com完成。目前,我已将其设置为将登录表单发布到B.com,B.com(如果成功)将设置会话cookie并触发重定向到A.com/loggedin。但是,由于表单已发布到B.com,并且cookie设置为该域,因此当我从A.com发出JSON请求时,会话cookie不可用,我不知道他们是否登录。问题就变成了,如何解决这个问题 我一直在考虑一个解决方案,其中我将向重定向uri添加一个令牌,然后可以使用该令牌创建一次与a.com的经过身份验证的会话(浏

所以。我有域A.com,其中用户身份验证在域B.com完成。目前,我已将其设置为将登录表单发布到B.com,B.com(如果成功)将设置会话cookie并触发重定向到A.com/loggedin。但是,由于表单已发布到B.com,并且cookie设置为该域,因此当我从A.com发出JSON请求时,会话cookie不可用,我不知道他们是否登录。问题就变成了,如何解决这个问题

我一直在考虑一个解决方案,其中我将向重定向uri添加一个令牌,然后可以使用该令牌创建一次与a.com的经过身份验证的会话(浏览器可以使用该令牌来验证与B.com的会话,这样cookie将被设置为A.com,并可用于JSON请求。之后,该令牌将失效)


但是,我不确定此解决方案的安全性如何?或者是否有其他更安全的解决方案?

我认为您当前的解决方案很好,可以用于此方案。但是出于安全考虑,您可能需要使用一些好的加密方法对其进行加密,并在此基础上配置您的se,而不是提供普通令牌服务器在使用身份验证令牌之前对其进行加密和解密。唯一的问题是您需要为您的情况选择最佳算法

除了此解决方案,您还可以考虑会话管理工具。
会话迁移
会话复制
会话共享是我可以想到的选项


这里是一个Oracle提供的会话共享解决方案,我认为这对您的情况有帮助。使用认证令牌的

应该很好,但是请考虑以下几点:

  • 使用强PRNG生成令牌,并生成长令牌以防止暴力
  • 确保使用的令牌将立即失效,以防止重播攻击

在我看来,这两点对于防止身份验证令牌被劫持和重用非常关键。此外,还应限制令牌的有效时间(30秒应该可以),以防止滥用旧的/未使用的令牌。

是的,还有更多安全选项

对于单点登录,有一个名为OpenID/connect的开放标准(构建在oAuth2.0之上) 对于资源共享、授权和身份验证,有oAuth

要记住的事情

  • 所有这些解决方案都只是受控的安全漏洞——请谨慎使用
  • 所有这些解决方案都让你在XSS、中间人和劫机/重放攻击中易受攻击。
  • 由于第1点和第2点,仔细实施至关重要
  • 利用社区已经完成的工作

    oAuth 1.0a(至今仍被广泛接受为最安全的模式)—— oAuth2-(使用openID进行构建在oAuth2之上的授权)

    oAuth 2不是oAuth 1a的替代品-它是一个完全依赖于SSL的全新(不太安全)想法-oAuth 1a仍然是最安全的-但仍然与您的实现和对潜在弱点的理解一样好

    您可能正在寻找openID连接的想法-但oAuth信息也很有用


    安全断言标记语言(SAML,发音为“sam el”[1])是一种基于XML的开放标准数据格式,用于在各方(尤其是身份提供商和服务提供商)之间交换身份验证和授权数据。SAML是OASIS安全服务技术委员会的产品。SAML的最新更新日期为2005年

    SAML解决的一个最重要的要求是web浏览器单点登录(SSO)。单点登录解决方案在内部网级别很常见(例如,使用cookie),但将这些解决方案扩展到内部网之外一直存在问题,并导致不可互操作的专有技术的扩散。(解决浏览器SSO问题的另一个较新方法是OpenID协议。) SAML规范定义了三个角色:主体(通常是用户)、身份提供者(IdP)和服务提供者(SP)。在SAML处理的用例中,主体向服务提供商请求服务。服务提供商向身份提供商请求并获得身份断言。在此断言的基础上,服务提供商可以做出访问控制决策–换句话说,它可以决定是否为服务提供商执行某些服务e连通主体

    在将身份断言传递给SP之前,IdP可能会请求主体提供一些信息,例如用户名和密码,以便对主体进行身份验证。SAML指定三方之间的断言:特别是从IdP传递给SP的断言身份的消息。在SAML中,在e identity provider可以向许多服务提供商提供SAML断言。相反,一个SP可能依赖并信任来自许多独立IDP的断言。 SAML未指定身份提供程序的身份验证方法;它可能使用用户名和密码,或其他形式的身份验证,包括多因素身份验证。允许用户使用用户名和密码登录的目录服务是身份验证令牌(例如密码)的典型来源在身份提供商处。流行的通用互联网社交网络服务也提供身份服务,理论上可用于支持SAML交换


    sso解决方案如何。A.com需要身份验证,然后重定向到sso服务器(S.com),S.com返回给用户一个longin表单,发送到S.com.S.com接收并生成一个令牌,然后用令牌重定向到A.com,A.com获取令牌,调用S.com获取登录的用户信息。还有一些,openid解决方案我没有看到h