我想知道如何实现共享跨域登录系统,以及需要采取的最佳实践和安全预防措施。如果您熟悉37Signals,您可能习惯于使用共享的通用认证机制,通过顶级导航到达不同的产品后,您不必再次登录。我希望以类似的方式实现某些东西。
我在网上找到的最接近的东西是维基百科关于中央认证服务的条目,以及对跨域登录——当从一个域传输到另一个域时如何自动登录用户的回答,但在这种情况下可能略有不同。
我检查了他们的会话Cookie,以便了解他们在过程中所做的事情。最初,每个产品链接都有一个“goto”uristub,例如:
https://MY_COMPANY.campfirenow.com/id/users/[int_identifier]/goto
使用FireCookie和Firebug的NET选项卡,我可以看到设置的Cookie和在过程中发生的重定向。 goto
url触发302重定向到:
https://MY_COMPANY.basecamphq.com/login/authenticate?sig=[BASE64_ENCODED_AND_ENCRYPTED_DATA]
会话标识符被重新创建,很可能是为了防止CSRF攻击。一些Cookie数据和GET参数sig的部分内容已使用base64_decode进行了部分解密,如下所示:
// sig GET param
array(2) {
[0]=>
���ף�:@marshal_with_utc_coercionT7�z��<k��kW"
[1]=>
string(18) "���k�<kn8�f���to��"
}
// _basecamp_session cookie session param
string(247) {
:_csrf_token"1Sj5D6jCwJKIxkZ6oroy7o/mYUqr4R5Ca34cOPNigqkw=:session_id"%060c0804a5d06dafd1c5b3349815d863"
flashIC:'ActionController::Flash::FlashHash{:
@used{: auth{"
MY_COMPANY{:
user_idi�3
:identity_idi�W����������s�]��:�N[��:
编码使代码块出现了问题。感谢您的帮助!