登录流程
微信授权登录流程:
- 调用登录接口获取二维码登录链接: 前端发起请求到后端的SSO服务,SSO服务根据微信提供的接口文档生成二维码登录链接,并返回给前端。
- 前端访问二维码链接并扫码登录: 用户在前端页面访问二维码链接,跳转到微信登录页面,用户扫描二维码并授权登录。
- 微信回调: 用户授权登录后,微信回调预先设置的回调地址,将授权凭证(如code)返回给SSO服务。
- SSO服务处理回调: SSO服务接收微信回调,根据回调数据进行登录或注册用户的业务处理。
- 生成Token并记录登录状态: SSO服务使用JWT生成Token,并将Token记录到Cookie中,同时也可以记录到Redis等存储中。还需记录用户的登录状态,以防止多地登录冲突。
- Token验证: 用户访问其他资源时,需要验证Token的有效性,如果验证通过,则允许访问,否则拒绝。
jar包
<!--wx-java相关,公众号,支付,开放平台等-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-open</artifactId>
</dependency>
CSRF跨站伪造攻击:
CSRF攻击是指攻击者利用用户已经登录的身份,在用户不知情的情况下,伪造用户的请求发送到服务器,以达到攻击者的恶意目的。
防范措施
使用state参数,由服务端生成state参数,附加在回调URL中,当用户访问回调URL时,会将state参数带回,服务器会验证state参数的有效性,以确保请求的合法性。
案例
在微信授权登录中,state参数通常用于防范CSRF攻击,确保微信回调时的请求是合法的。如果回调请求中的state参数与预先生成的不一致,服务器可以拒绝处理该请求,从而有效地防止CSRF攻击。
案例:提到了如果一个银行系统的支付回调接口没有做state参数验证,存在被CSRF攻击的风险,攻击者可以伪造用户请求,让银行系统误认为是用户的合法操作,导致资金安全问题。因此,银行在设计支付回调接口时,确保采取适当的CSRF防护措施是至关重要的。