我创建了Spring授权服务器,发放JWT和资源服务器检查授权服务器上的JWT、声明和权限。为此,我遵循了这篇文章。我的问题是,为什么在获取令牌请求中需要发送带有HTTP基本授权和Base64编码的用户名/密码(ClientId:ClientSecret)的
Authorization
头?我看到了只需要用户名和密码的JWT实现。Authorization
头?我看到了只需要用户名和密码的JWT实现。这是规范的一部分,请参见RFC 6749:
2.3 客户端认证
如果客户端类型是机密的,则客户端和授权服务器建立适合授权服务器安全要求的客户端认证方法。授权服务器可以接受满足其安全要求的任何形式的客户端认证。
通常会向机密客户端发放(或建立)一组用于与授权服务器进行身份验证的客户端凭据(例如,密码、公钥/私钥对)。
授权服务器可以为公共客户端建立客户端认证方法。但是,授权服务器不得依赖于公共客户端认证来识别客户端。
客户端在每个请求中不能使用多种身份验证方法。
默认情况下,Spring Security OAuth 2.0 保护令牌端点,请参见OAuth 2 Developers Guide:
令牌端点由Spring OAuth在
@Configuration
支持中默认使用客户端密钥的HTTP基本身份验证来保护您。
但是看起来,您可以禁用客户端身份验证:
这是JWT令牌的结构:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
As you are doing a JWT implementation all the 3 parts must be there: header.payload.secret
也许在你看到的实现中 - 服务器正在使用默认密钥