中间件
中间件是在路由处理器之前或之后执行的代码,它可以用于验证请求、更改请求/响应等,中间件的开发请参考 slim。
JWT 认证
JWT认证是一种无状态的认证方式,通过对 token 的签名校验,验证用户身份并授权访问资源,秘钥通过配置文件的 app.secret
进行加解密。
中间件使用
为了简化开发流程,我们提供了一个JWT认证中间件 \Dux\Auth\AuthMiddleware
,您可以在需要进行身份认证的路由中使用它:
在这个例子中,我们对 /profile
这个路由进行了认证,并设置了认证应用名为 webapp
,续期时间为 3600
秒。如果当前请求没有携带有效的 token
,则会返回 401 Unauthorized
。
如果当前的认证时间超过了续期时间,则会在返回的 header 中加入 Authorization 参数。该参数为续期后的 token,请将该 Token 进行替换。
您可以通过路由内的以下方法获取 Token 的解密参数:
token 生成
在需要获取 token 的代码中进行调用以下方法获取token:
在这个例子中,我们生成了一个有效期为 1 天(即 3600 * 24 秒)的 token,同时传入了用户 id 为 1234 的参数。注意,参数列表可以根据您的实际需求进行调整。
中间件构造
该类实现了JWT认证中间件的功能。以下是该类的构造方法:
获取 token 方法
- $app 认证应用名,用来区分不同的端口认证。
- $params JWT 参数,可将用户 id 等参数进行传递,默认为空数组。
- $expire 过期时间,单位秒,默认为 86400。过期时间必须大于续期时间,否则续期将会失效。
请求方法
您可以将 token
放置在 hedaer
头的 Authorization
参数中, 或者或者 cookie
的token
键中,进行请求,请根据实际使用场景进行选择。
Api 签名
中间件使用
在进行 API 调用时,为了防止在传输过程中对请求资源进行篡改,需要对 url
进行签名。推荐使用 HTTPS 协议进行传输。可以使用中间件实现签名,如下所示:
需要通过闭包返回资源的秘钥 SecretKey
进行签名计算,闭包参数会传递授权 id
用来交换。示例如下: