Spring Security OAuth2 JWT 匿名令牌

Posted

技术标签:

【中文标题】Spring Security OAuth2 JWT 匿名令牌【英文标题】:Spring Security OAuth2 JWT anonymous token 【发布时间】:2016-08-12 00:33:55 【问题描述】:

我做了什么

首先我承认我缺乏春季安全知识。

我正在为我们的一种产品尝试安全休息服务。我正在使用弹簧安全 OAuth2 JWT。我想允许匿名用户和注册用户访问我的资源。

假设我有一项服务 "http://localhost:8282/melayer/articles" 并且当我运行以下命令时

(1)。 curl -X POST -vu melayer:12345 http://localhost:8282/melayer/oauth/token -H "Accept: application/json" -d "password=melayer&username=melayer&grant_type=password&scope=write&client_secret=12345&client_id=melayer"

我能够接收 access_token、refresh_token 等。一切都很好,即使我可以使用接收到的 access_token 访问 url http://localhost:8282/melayer/articles

(2)。卷曲http://localhost:8282/melayer/articles -H “授权:承载eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NjA3NzY5NDIsInVzZXJfbmFtZSI6ImVjb2tyeXB0IiwianRpIjoiNWI5ZmE4NjYtMTBlNS00NDA2LTgxYmMtYjM3NWVmNGE0ZmQ1IiwiY2xpZW50X2lkIjoiZWNva3J5cHQiLCJzY29wZSI6WyJ3cml0ZSJdfQ.4jO9euBz4TSSNh7M3l2YBD1QPblE0ZyOfGm4VtyFMFY” P>

我想了解的内容

我想匿名接收 access_token,即我不想传递用户名、密码或客户端密码,我想按以下方式运行 curl 命令

curl -X POST http://localhost:8282/melayer/oauth/token -H "Accept: application/json"

我担心的一个问题是,我想要使用或不使用用户凭据的 access_token 我从上周开始尝试实现这一目标,我错过了什么吗?可能吗 ?这样做的正确方法是什么?

请求帮助我解决这个问题 :)

如果有人想查看我的代码,请参考 Git repo https://github.com/aniruddhha/spring-security-oauth2-jwt

【问题讨论】:

【参考方案1】:

我认为您误解了访问令牌的概念,访问令牌的目的是代表经过身份验证的用户使用。

OAuth2 支持不同的授权类型(密码、授权码等),请查看规范Oauth2 Spec

为了进行身份验证,您可以使用其中任何一种授权,也可以创建自己的授权(例如:使用 Google 令牌登录),但您必须发送某种形式的用户凭据以识别用户,并发送客户端凭据以识别客户端.

访问令牌不能用作某种用于访问公共 api 的 ApiKey

【讨论】:

@Override public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception oauthServer .tokenKeyAccess("isAnonymous() || hasRole('ROLE_TRUSTED_CLIENT')") // permitAll() .checkTokenAccess("hasRole(' TRUSTED_CLIENT')"); // isAuthenticated() 请看这段代码..我认为这段代码是用于匿名访问令牌的......我不确定 对不起,我不确定,因为我没有使用过 spring 安全框架,我认为它的所有检查都是 oauth 客户端是否在 clientIds 的受信任列表下(我可能是错的)。如果您阅读了 oauth 规范,您将了解访问令牌的用途 话虽如此,如果您真的想要匿名 access_token 仅验证客户端而不验证用户,那么您的 oauth 服务器必须提供自定义实现,但这需要客户端凭据(client_id、client_secret 或两者) 但是你提到没有传递用户凭据和客户端凭据,在这种情况下,这里没有发生任何识别,因为任何人都可以生成令牌,我并不完全了解用例。

以上是关于Spring Security OAuth2 JWT 匿名令牌的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security Oauth2

Spring-Security OAuth2 设置 - 无法找到 oauth2 命名空间处理程序

Spring Security OAuth2 v5:NoSuchBeanDefinitionException:'org.springframework.security.oauth2.jwt.Jwt

针对授权标头的Spring Security OAuth2 CORS问题

OAuth2.0学习(4-1)Spring Security OAuth2.0 - 代码分析

Spring Security---Oauth2详解