alleyinteractive / wp-rest-api-guard
限制和控制对REST API的访问
Requires
- php: ^8.0
- firebase/php-jwt: ^6.10
Requires (Dev)
README
稳定标签: 1.3.2
最低要求: 6.0
测试到: 6.0
需要PHP: 8.0
许可证: GPL v2或更高版本
标签: alleyinteractive, rest-api-guard
贡献者: sean212
限制和控制对REST API的访问。
安装
您可以通过composer安装此软件包
composer require alleyinteractive/wp-rest-api-guard
使用方法
WordPress REST API通常非常公开,可以匿名地与互联网共享大量信息。此插件旨在使限制对WordPress网站REST API的访问变得更容易。
默认情况下,此插件可以
- 禁用对REST API的匿名访问。
- 通过命名空间、路径等限制和控制对REST API的匿名访问。
设置页面
可以通过设置页面(设置 -> REST API Guard
)或相关过滤器配置此插件。
防止访问用户信息(wp/v2/users
)
默认情况下,此插件将限制对用户端点的匿名访问。这可以在插件设置或代码中防止。
add_filter( 'rest_api_guard_allow_user_access', fn () => true );
防止访问索引(/
)或命名空间端点(wp/v2
)
为了防止匿名用户浏览您的网站并发现已设置的插件/文章类型,此插件限制对索引(/
)和命名空间(wp/v2
)端点的访问。这可以在插件设置或代码中防止。
// Allow index access. add_filter( 'rest_api_guard_allow_index_access', fn () => true ); // Allow namespace access. add_filter( 'rest_api_guard_allow_namespace_access', fn ( string $namespace ) => true );
限制对REST API的匿名访问
此插件可以在插件设置或代码中限制对REST API的任何请求的匿名访问。
add_filter( 'rest_api_guard_prevent_anonymous_access', fn () => true );
限制对特定命名空间/路由(允许列表)的匿名访问
可以授予匿名用户仅对特定命名空间/路由的访问权限。超出这些路径的请求将被拒绝。这可以在插件设置或代码中配置。
add_filter( 'rest_api_guard_anonymous_requests_allowlist', function ( array $paths, WP_REST_Request $request ): array { // Allow other paths not included here will be denied. $paths[] = 'wp/v2/post'; $paths[] = 'custom-namespace/v1/public/*'; return $paths; }, 10, 2 );
限制对特定命名空间/路由(拒绝列表)的匿名访问
可以限制匿名用户对特定命名空间/路由的访问。这相当于一个匿名用户无法访问的特定路径的拒绝列表。路径支持正则表达式进行匹配。使用允许列表的优先级高于此拒绝列表。这可以在插件设置或代码中配置。
add_filter( 'rest_api_guard_anonymous_requests_denylist', function ( array $paths, WP_REST_Request $request ): array { $paths[] = 'wp/v2/user'; $paths[] = 'custom-namespace/v1/private/*'; return $paths; }, 10, 2 );
要求匿名用户通过JSON Web Token (JWT)进行身份验证
可以要求匿名用户通过JSON Web Token (JWT)进行身份验证才能访问REST API。用户应在请求中传递带有Authorization: Bearer <token>
头的Authorization
。这可以在插件设置或代码中配置。
add_filter( 'rest_api_guard_authentication_jwt', fn () => true );
默认情况下,此插件将在Authorization: Bearer <token>
头中查找JWT。JWT应具有“wordpress-rest-api”的受众和站点的URL的发行者。这可以在插件设置或代码中配置。
add_filter( 'rest_api_guard_jwt_audience', fn ( string $audience ) => 'custom-audience' ); add_filter( 'rest_api_guard_jwt_issuer', fn ( string $issuer ) => 'https://example.com' );
JWT的秘密将自动生成并存储在rest_api_guard_jwt_secret
选项中。秘密也可以通过代码过滤。
add_filter( 'rest_api_guard_jwt_secret', fn ( string $secret ) => 'my-custom-secret' );
允许对认证用户使用JWT身份验证
已验证用户可以通过JSON Web Token (JWT) 通过REST API进行验证。类似于匿名JWT身份验证,用户应在请求中传递一个 Authorization: Bearer <token>
标头。这可以在插件设置或代码中配置。
add_filter( 'rest_api_guard_user_authentication_jwt', fn () => true );
为匿名和已验证用户生成JWT
可以通过调用 wp rest-api-guard generate-jwt [--user=<user_id>]
命令或使用 Alley\WP\REST_API_Guard\generate_jwt()
方法来生成JWT。
$jwt = \Alley\WP\REST_API_Guard\generate_jwt( expiration: 3600, // Optional. The expiration time in seconds from now. user: 1, // Optional. The user ID to generate the JWT for. Supports `WP_User` or user ID. );
测试
运行 composer test
来运行针对PHPUnit和插件中的PHP代码的测试。
变更日志
请参阅 变更日志 了解最近更改的更多信息。
致谢
该项目由 Alley Interactive 积极维护。喜欢您所看到的? 加入我们工作。
许可证
GNU通用公共许可证 (GPL)。有关更多信息,请参阅 许可证文件。