【问题标题】:JWT with Spring OAuth2JWT 与 Spring OAuth2
【发布时间】:2017-09-09 08:33:12
【问题描述】:

我创建了发布 JWT-s 的 Spring 授权服务器和一个资源服务器,用于检查 JWT、它在授权服务器上的声明和权限。为此,我关注了这个article

我的问题是为什么我需要在获取令牌请求中发送带有 HTTP 基本授权和 Base64 编码的用户名/密码 (ClientId:ClientSecret) 的 Authorization 标头?我见过只需要用户名和密码的 JWT 实现。

【问题讨论】:

    标签: spring spring-security jwt spring-oauth2 json-web-token


    【解决方案1】:

    这是规范的一部分,见RFC 6749

    2.3 客户端认证

    如果客户端类型是机密的,客户端和授权服务器建立适合授权服务器安全要求的客户端认证方法。授权服务器可以接受满足其安全要求的任何形式的客户端身份验证。

    机密客户端通常被颁发(或建立)一组客户端凭据,用于向授权服务器进行身份验证(例如,密码、公钥/私钥对)。

    授权服务器可以与公共客户端建立客户端身份验证方法。但是,授权服务器不得依赖公共客户端身份验证来识别客户端。

    客户端不得在每个请求中使用一种以上的身份验证方法。

    默认情况下,Spring Security OAuth 2.0 保护令牌端点,请参阅OAuth 2 Developers Guide

    默认情况下,Spring OAuth 在 @Configuration 支持中使用客户端密码的 HTTP 基本身份验证为您保护令牌端点。

    但看来,您可以禁用客户端身份验证:

    【讨论】:

      【解决方案2】:

      这就是JWT令牌的结构:

      HMACSHA256(
            base64UrlEncode(header) + "." +
            base64UrlEncode(payload),
          secret
      
          )
      
      
      As you are doing a JWT implementation all the 3 parts must be there: header.payload.secret
      

      也许在您看到的实现中 - 服务器正在使用默认密钥

      【讨论】:

        猜你喜欢
        • 2019-02-10
        • 2018-01-15
        • 2020-10-25
        • 2020-06-19
        • 2023-03-18
        • 1970-01-01
        • 2017-01-31
        • 2021-05-22
        • 2019-01-20
        相关资源
        最近更新 更多