OAuth2.0 里面的 state 参数是干什么的?

OAuth2.0 里面的 state 参数是干什么的?

1.OAuth 2.0 的四种方式

  1. 授权码

    常见于个人用户第三方登录,比如通过微信、QQ、钉钉登录第三方应用。获取临时的access_token

  2. 隐藏式

    见于没有后端的web应用

  3. 密码式

    信任的应用,暴漏密码,由第三方应用去模拟登录

  4. 凭证式

    常见于应用对应用。分发给应用clientId和clientSecret来实现。

第一种和第四种是较为常见的形式。

2.拿钉钉的第三方应用统一授权来举例

  1. 钉钉开发者后台添加应用,为应用分配钉钉登录功能,配置回调地址;为应用分配相应的人员以及通讯录权限。

  2. 配置钉钉授权登录地址

详细文档可参考钉钉开发文档

https://login.dingtalk.com/oauth2/auth?
redirect_uri=
&response_type=code
&client_id=
&scope=openid
&state=
&prompt=consent

各个参数的意义:
redirect_uri:就是在

OAuth 2.0 中的 `state` 参数通常用于防止跨站请求伪造 (CSRF) 攻击,它传递一个随机生成的值,在授权流程完成后返回给服务器验证。这个参数并不是必须加密,但它会被附加到重定向URL中,确保它是安全的。 在Java中,当你需要对 `state` 进行处理时,可以简单地生成并存储一个唯一的哈希值或对其进行编码。例如,你可以使用 `java.util.UUID` 生成一个随机UUID,或者使用`Base64`对字符串进行编码。这有一个简单的示例: ```java import java.nio.charset.StandardCharsets; import java.util.Base64; public String generateState() { // 生成随机UUID String randomValue = UUID.randomUUID().toString(); // 对生成的随机值进行Base64编码 byte[] encodedValue = randomValue.getBytes(StandardCharsets.UTF_8); return Base64.getEncoder().encodeToString(encodedValue); } // 使用生成的state String state = generateState(); // ...然后将state附带到授权链接... // 授权回调后解码验证 if (decodeAndValidateState(request.getParameter("state")) == true) { // 执行后续操作... } private boolean decodeAndValidateState(String receivedState) { try { byte[] decodedBytes = Base64.getDecoder().decode(receivedState); String decodedValue = new String(decodedBytes, StandardCharsets.UTF_8); // 验证decodedValue是否匹配预期 return decodedValue.equals(randomValue); } catch (IllegalArgumentException e) { return false; // 状态无效,可能是攻击尝试 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值