jwt.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. declare(strict_types=1);
  3. return [
  4. 'login_type' => env('JWT_LOGIN_TYPE', 'mpop'), // 登录方式,sso为单点登录,mpop为多点登录
  5. /**
  6. * 单点登录自定义数据中必须存在uid的键值,这个key你可以自行定义,只要自定义数据中存在该键即可
  7. */
  8. 'sso_key' => 'uid',
  9. 'secret' => env('JWT_SECRET', 'phper666'), // 非对称加密使用字符串,请使用自己加密的字符串
  10. /**
  11. * JWT 权限keys
  12. * 对称算法: HS256, HS384 & HS512 使用 `JWT_SECRET`.
  13. * 非对称算法: RS256, RS384 & RS512 / ES256, ES384 & ES512 使用下面的公钥私钥.
  14. */
  15. 'keys' => [
  16. 'public' => env('JWT_PUBLIC_KEY'), // 公钥,例如:'file:///path/to/public/key'
  17. 'private' => env('JWT_PRIVATE_KEY'), // 私钥,例如:'file:///path/to/private/key'
  18. ],
  19. 'ttl' => env('JWT_TTL', 7200), // token过期时间,单位为秒
  20. 'alg' => env('JWT_ALG', 'HS256'), // jwt的hearder加密算法
  21. /**
  22. * 支持的算法
  23. */
  24. 'supported_algs' => [
  25. 'HS256' => 'Lcobucci\JWT\Signer\Hmac\Sha256',
  26. 'HS384' => 'Lcobucci\JWT\Signer\Hmac\Sha384',
  27. 'HS512' => 'Lcobucci\JWT\Signer\Hmac\Sha512',
  28. 'ES256' => 'Lcobucci\JWT\Signer\Ecdsa\Sha256',
  29. 'ES384' => 'Lcobucci\JWT\Signer\Ecdsa\Sha384',
  30. 'ES512' => 'Lcobucci\JWT\Signer\Ecdsa\Sha512',
  31. 'RS256' => 'Lcobucci\JWT\Signer\Rsa\Sha256',
  32. 'RS384' => 'Lcobucci\JWT\Signer\Rsa\Sha384',
  33. 'RS512' => 'Lcobucci\JWT\Signer\Rsa\Sha512',
  34. ],
  35. /**
  36. * 对称算法名称
  37. */
  38. 'symmetry_algs' => [
  39. 'HS256',
  40. 'HS384',
  41. 'HS512'
  42. ],
  43. /**
  44. * 非对称算法名称
  45. */
  46. 'asymmetric_algs' => [
  47. 'RS256',
  48. 'RS384',
  49. 'RS512',
  50. 'ES256',
  51. 'ES384',
  52. 'ES512',
  53. ],
  54. /**
  55. * 是否开启黑名单,单点登录和多点登录的注销、刷新使原token失效,必须要开启黑名单,目前黑名单缓存只支持hyperf缓存驱动
  56. */
  57. 'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true),
  58. /**
  59. * 黑名单的宽限时间 单位为:秒,注意:如果使用单点登录,该宽限时间无效
  60. */
  61. 'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0),
  62. /**
  63. * 黑名单缓存token时间,注意:该时间一定要设置比token过期时间要大一点,默认为1天,最好设置跟过期时间一样
  64. */
  65. 'blacklist_cache_ttl' => env('JWT_TTL', 86400),
  66. 'blacklist_prefix' => 'phper666_jwt', // 黑名单缓存的前缀
  67. /**
  68. * 区分不同场景的token,比如你一个项目可能会有多种类型的应用接口鉴权,下面自行定义,我只是举例子
  69. * 下面的配置会自动覆盖根配置,比如application1会里面的数据会覆盖掉根数据
  70. * 下面的scene会和根数据合并
  71. * scene必须存在一个default
  72. * 什么叫根数据,这个配置的一维数组,除了scene都叫根配置
  73. */
  74. 'scene' => [
  75. 'default' => [],
  76. 'application1' => [
  77. 'secret' => 'application1', // 非对称加密使用字符串,请使用自己加密的字符串
  78. 'login_type' => 'sso', // 登录方式,sso为单点登录,mpop为多点登录
  79. 'sso_key' => 'uid',
  80. 'ttl' => 7200, // token过期时间,单位为秒
  81. 'blacklist_cache_ttl' => env('JWT_TTL', 7200), // 黑名单缓存token时间,注意:该时间一定要设置比token过期时间要大一点,默认为100秒,最好设置跟过期时间一样
  82. ],
  83. 'application2' => [
  84. 'secret' => 'application2', // 非对称加密使用字符串,请使用自己加密的字符串
  85. 'login_type' => 'sso', // 登录方式,sso为单点登录,mpop为多点登录
  86. 'sso_key' => 'uid',
  87. 'ttl' => 7200, // token过期时间,单位为秒
  88. 'blacklist_cache_ttl' => env('JWT_TTL', 7200), // 黑名单缓存token时间,注意:该时间一定要设置比token过期时间要大一点,默认为100秒,最好设置跟过期时间一样
  89. ],
  90. 'application3' => [
  91. 'secret' => 'application3', // 非对称加密使用字符串,请使用自己加密的字符串
  92. 'login_type' => 'mppo', // 登录方式,sso为单点登录,mpop为多点登录
  93. 'ttl' => 7200, // token过期时间,单位为秒
  94. 'blacklist_cache_ttl' => env('JWT_TTL', 7200), // 黑名单缓存token时间,注意:该时间一定要设置比token过期时间要大一点,默认为100秒,最好设置跟过期时间一样
  95. ]
  96. ],
  97. 'model' => [ // TODO 支持直接获取某模型的数据
  98. 'class' => '',
  99. 'pk' => 'uid'
  100. ]
  101. ];