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