【发布时间】:2017-05-13 20:09:32
【问题描述】:
我试图了解为什么客户端中的匿名用户无法获得访问令牌。
我发现这个 post on the Spring Blog 关于这个话题,Dave Syer 回答了这个问题:
请记住,这是与客户端应用程序有关的问题,而不是身份验证问题 服务器,所以试着从客户的角度来看它。在 步骤 1. 有一个用户试图访问受保护的资源。 如果你 无法识别该用户,那么您的所有用户最终都会得到相同的 访问令牌(第一个用户使用他的 身份验证服务器上的凭据)。这绝对是个坏主意。
但是我不明白为什么匿名用户会共享同一个令牌:
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth instanceof AnonymousAuthenticationToken) {
if (!resource.isClientOnly()) {
throw new InsufficientAuthenticationException(
"Authentication is required to obtain an access token (anonymous not allowed)");
}
}
虽然它们没有完全通过身份验证,但它们有一个绑定到每个匿名用户的 JSESSIONID。
包含 accessToken 的OAuth2ClientContext 是一个会话范围的 Spring bean。由于匿名用户有一个 HttpSession,他们有独立的OAuth2ClientContexts,因此他们可以存储个人 accessToken。
有人能解释一下这是有道理的还是我不理解的?
【问题讨论】:
标签: spring spring-security oauth oauth-2.0 spring-security-oauth2