小编Far*_*Liu的帖子

CSRF如何在OAuth2.0中没有状态参数的情况下工作?

我在公司的SSO中使用了identityserver3的OAuth2.0,我无法理解state参数如何阻止CSRF.

我已将攻击流程复制如下:

1.Mallory访问某个客户的网站,并开始授权该客户使用OAuth访问某个服务提供商的过程

2.客户要求服务提供商允许代表Mallory请求访问权限

3.Mallory被重定向到服务提供商的网站,在那里她通常会输入她的用户名/密码以授权访问

4.相反,Mallory陷阱/阻止此请求并保存其URL(Callback Url)

5.现在,Mallory以某种方式让Alice访问该URL.如果Alice使用自己的帐户登录服务提供商,则其凭据将用于颁发授权码

6.授权代码被交换为访问令牌

7.现在,Mallory在客户端的帐户有权访问服务提供商处的Alice帐户


我可以理解第1步到第4步.但是从第5步开始,我有些困惑.根据我的理解,在步骤5中,Alice在登录时访问回调URL,然后服务器只使用授权码访问OAuth服务提供商以在后端获取openid和访问令牌,然后Alice的浏览器只是使用Mallory的帐户和访问令牌执行登录.与Mallory的浏览器有什么关系?你能详细解释一下吗?感谢您花时间阅读我的话!

oauth-2.0

13
推荐指数
2
解决办法
6286
查看次数

Spring redisTemplate,如何通过访问redis一次判断key不存在或者value为空?

我正在使用 java spring redisTemplate 访问redis服务器。我想通过键从redis获取值。该键可能不存在,或者存在但值为空。但redisTemplate总是返回null。

我可以使用此代码来确定密钥是否存在:

redisTemplate.hasKey("name");
Run Code Online (Sandbox Code Playgroud)

但问题是我需要再次访问redis服务器才能获取值:

//it always returns null when key doesn't exist or value is empty
var v = redisTemplate.opsForValue().get("name");
Run Code Online (Sandbox Code Playgroud)

因为我希望步骤 1 和步骤 2 是原子的。如果我首先使用步骤1中的代码来获取现有或不存在的代码,那么在执行步骤2时它可能会发生变化。我认为它性能更好的另一个原因。

那么你能帮我一下吗?谢谢你!

java spring redis

5
推荐指数
0
解决办法
1827
查看次数

Windows任务调度程序和hangfire(或Quartz.net)之间有什么区别?

我总是需要定期开展一些工作.我应该如何在各种场景中选择任务调度程序或hangfire.Windows任务调度程序和hangfire(或Quartz.net)之间有什么区别?你能举个例子吗?谢谢!

hangfire taskscheduler

1
推荐指数
1
解决办法
1454
查看次数

标签 统计

hangfire ×1

java ×1

oauth-2.0 ×1

redis ×1

spring ×1

taskscheduler ×1