-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Q&A
yadong.zhang edited this page Jul 5, 2019
·
2 revisions
在原api使用方法的基础上,为config追加一个state即可。
AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder()
.clientId("clientId")
.clientSecret("clientSecret")
.redirectUri("redirectUri")
.state("state") // 就是这儿
.build());
这是因为1.8.0版本中新增了AuthCallback类,这个类封装了所有可能的回调参数。目前包含以下三个参数:
-
code
: 访问AuthorizeUrl后回调时带的参数code,用来换取token -
auth_code
: 支付宝授权登陆时不会返回code而是返回auth_code
参数 -
state
: 访问AuthorizeUrl后回调时带的参数state,用于和请求AuthorizeUrl前的state比较,防止CSRF攻击
1.8.0版本之后的api,可以直接用AuthCallback类作为回调方法的入参,比如:
@RequestMapping("/callback/{source}")
public Object login(@PathVariable("source") String source, AuthCallback callback) {
System.out.println("进入callback:" + source + " callback params:" + JSONObject.toJSONString(callback));
AuthRequest authRequest = getAuthRequest(source);
AuthResponse response = authRequest.login(callback);
System.out.println(JSONObject.toJSONString(response));
return response;
}
代码截取自 :https://gitee.com/yadong.zhang/JustAuth-demo
理论上没有,stata只是用来保持会话状态,因为http协议的无状态性,从授权到回调,无法感知具体是哪个用户触发的。所以可以使用state作为校验。注:state参数每次完整的授权链中只可用一次!(也是为了防止不必要的危险)
作者建议state命名格式如下:
- 授权登录:
{source}_{ip}_{random}
- 账号绑定:
{source}_{userId}_{ip}_{random}
其中source
表示授权平台,可以直接去JustAuth中的source,ip
为当前用户的ip(部分情况可能不适用),random
为随机字符串,userId
为当前登录用户的id。
注:authorize
和login
(不是指回调传回的state
,而是声明request
时传入的state
)中传的state
务必保证一致