全部产品
云市场

JWT认证插件

更新时间:2019-03-22 12:25:34

Json Web Token(RFC7519), 是一种非常方便的用于身份认证的选择,API 网关可以通过托管用户的Public JWK实现对请求JWT进行验签处理方便用户进行开发。

原有在API上配置的OpenIdConnect功能目前可以通过JWT认证插件实现了, 如果你配置了JWT认证插件并绑定到了已配置OpenIdConnect功能的API上,JWT认证插件的功能将会覆盖掉原有OpenIdConnect的功能。

如何使用

  • 配置JWT认证插件首先需要生成Json Web Key,您可以通过自行生成,或搜索Json Web Key Generator寻找可用的在线生成工具。一个可用的Json Web Key大概如下所示,
  1. {
  2. "kty": "RSA",
  3. "e": "AQAB",
  4. "kid": "O9fpdhrViq2zaaaBEWZITz",
  5. "use": "sig",
  6. "alg": "RS256",
  7. "n": "qSVxcknOm0uCq5vGsOmaorPDzHUubBmZZ4UXj-9do7w9X1uKFXAnqfto4TepSNuYU2bA_-tzSLAGBsR-BqvT6w9SjxakeiyQpVmexxnDw5WZwpWenUAcYrfSPEoNU-0hAQwFYgqZwJQMN8ptxkd0170PFauwACOx4Hfr-9FPGy8NCoIO4MfLXzJ3mJ7xqgIZp3NIOGXz-GIAbCf13ii7kSStpYqN3L_zzpvXUAos1FJ9IPXRV84tIZpFVh2lmRh0h8ImK-vI42dwlD_hOIzayL1Xno2R0T-d5AwTSdnep7g-Fwu8-sj4cCRWq3bd61Zs2QOJ8iustH0vSRMYdP5oYQ"
  8. }

这里展示的是json格式,当使用yaml格式配置插件,需要转换*

  • JWT认证插件只需要配置Public Key, 请妥善保存好您的Private Key,目前仅支持RSA256算法
  • 如果您需要配置多个Json Web Keykid字段是必须的,否则kid是可选的
  • 可以配置多个Json Web Key, jwks配置可以与jwk一起使用
  • JWT认证插件会使用配置的parameterparameterLocation来读取JWT的值,
    • 如:parameter: X-Token, parameterLocation: header表示从请求的X-Token头读取JWT
    • 如果API上配置了与paramter配置同名的参数时,paramterLocation可以忽略,否则会在调用时报错

插件配置

可以选择json或者yaml格式的来配置您的插件,两种格式的schema相同,可以搜索yaml to json转换工具来进行配置格式的转换,yaml格式的模板见下表

  1. ---
  2. parameter: X-Token # 从指定的参数中获取JWT, 对应API的参数
  3. parameterLocation: header # API为映射模式时可选, API为透传模式下必填, 用于指定JWT的读取位置, 仅支持`query`,`header`
  4. claimParameters: # claims参数转换, 网关会将jwt claims映射为后端参数
  5. - claimName: aud # claim名称,支持公共和私有
  6. parameterName: X-Aud # 映射后参数名称
  7. location: header # 映射后参数位置, 支持`query,header,path,formData`
  8. - claimName: userId # claim名称,支持公共和私有
  9. parameterName: userId # 映射后参数名称
  10. location: query # 映射后的参数位置, 支持`query,header,path,formData`
  11. preventJtiReplay: false # 是否开启针对`jti`的防重放检查, 默认: false
  12. #
  13. # `Json Web Key`的`Public Key`
  14. jwk:
  15. kty: RSA
  16. e: AQAB
  17. use: sig
  18. kid: O8fpdhrViq2zaaaBEWZITz # 在只配置一个JWK时,kid是可选的,但如果中JWT包含了kid,网关会校验kid的一致性
  19. alg: RS256
  20. n: qSVxcknOm0uCq5vGsOmaorPDzHUubBmZZ4UXj-9do7w9X1uKFXAnqfto4TepSNuYU2bA_-tzSLAGBsR-BqvT6w9SjxakeiyQpVmexxnDw5WZwpWenUAcYrfSPEoNU-0hAQwFYgqZwJQMN8ptxkd0170PFauwACOx4Hfr-9FPGy8NCoIO4MfLXzJ3mJ7xqgIZp3NIOGXz-GIAbCf13ii7kSStpYqN3L_zzpvXUAos1FJ9IPXRV84tIZpFVh2lmRh0h8ImK-vI42dwlD_hOIzayL1Xno2R0T-d5AwTSdnep7g-Fwu8-sj4cCRWq3bd61Zs2QOJ8iustH0vSRMYdP5oYQ
  21. #
  22. # 可以支持配置多个JWK(最多5个), 可以与jwk字段一起配置
  23. # 配置多个JWK时,kid是必选的,如果JWT中没有提供kid,则校验失败
  24. jwks:
  25. - kid: O9fpdhrViq2zaaaBEWZITz # 在只配置一个JWK时,kid是可选的,但如果中JWT包含了kid,网关会校验kid的一致性
  26. kty: RSA
  27. e: AQAB
  28. use: sig
  29. alg: RS256
  30. n: qSVxcknOm0uCq5vGsOmaorPDzHUubBmZZ4UXj-9do7w9X1uKFXAnqfto4TepSNuYU2bA_-tzSLAGBsR-BqvT6w9SjxakeiyQpVmexxnDw5WZwpWenUAcYrfSPEoNU-0hAQwFYgqZwJQMN8ptxkd0170PFauwACOx4Hfr-9FPGy8NCoIO4MfLXzJ3mJ7xqgIZp3NIOGXz-GIAbCf13ii7kSStpYqN3L_zzpvXUAos1FJ9IPXRV84tIZpFVh2lmRh0h8ImK-vI42dwlD_hOIzayL1Xno2R0T-d5AwTSdnep7g-Fwu8-sj4cCRWq3bd61Zs2QOJ8iustH0vSRMYdP5oYQ
  31. - kid: 10fpdhrViq2zaaaBEWZITz # 在只配置一个JWK时,kid是可选的,但如果中JWT包含了kid,网关会校验kid的一致性
  32. kty: RSA
  33. e: AQAB
  34. use: sig
  35. alg: RS256
  36. n: qSVxcknOm0uCq5vGsOmaorPDzHUubBmZZ4UXj-9do7w9X1uKFXAnqfto4TepSNuYU2bA_-tzSLAGBsR-BqvT6w9SjxakeiyQpVmexxnDw5WZwpWenUAcYrfSPEoNU-0hAQwFYgqZwJQMN8ptxkd0170PFauwACOx4Hfr-9FPGy8NCoIO4MfLXzJ3mJ7xqgIZp3NIOGXz-GIAbCf13ii7kSStpYqN3L_zzpvXUAos1FJ9IPXRV84tIZpFVh2lmRh0h8ImK-vI42dwlD_hOIzayL1Xno2R0T-d5AwTSdnep7g-Fwu8-sj4cCRWq3bd61Zs2QOJ8iustH0vSRMYdP5oYQ