我想在 Swagger 上添加“授权”按钮,如下所述:https://api-platform.com/docs/core/jwt#documenting-the-authentication-mechanism-with-swaggeropen-api
我安装了 LexikJWTAuthenticationBundle,它与 Curl 配合得很好。但是当我浏览到http://localhost:8000/api时,我只看到 {"code":401,"message":"JWT Token not found"}
。
我错过了什么吗?
这是我的security.yaml
:
security:
encoders:
App\Entity\User:
algorithm: bcrypt
providers:
db_provider:
entity:
class: App\Entity\User
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
api_login:
pattern: ^/api/login
stateless: true
anonymous: true
form_login:
check_path: /api/login_check
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
require_previous_session: false
api:
pattern: ^/api
stateless: true
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
main:
pattern: ^/
anonymous: ~
provider: db_provider
form_login:
login_path: app_security_login
check_path: app_security_login
csrf_token_generator: security.csrf.token_manager
logout:
path: /logout
target: /
remember_me:
secret: '%kernel.secret%'
lifetime: 604800
path: /
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
access_decision_manager:
strategy: unanimous
还有我的api_platform.yaml
:
api_platform:
title: 'My project'
version: '0.0.1'
mapping:
paths: ['%kernel.project_dir%/src/Entity']
swagger:
api_keys:
apiKey:
name: Authorization
type: header
最佳答案
有点晚了,但我也遇到了同样的问题。您的安全配置表明任何以 /api
开头的路由需要身份验证,其中包括 /api
本身。如果您想将文档保留在/api
上路由,在安全配置中添加尾部斜杠;
firewalls:
...
api:
pattern: ^/api/
和
access_control:
- { path: ^/api/, roles: IS_AUTHENTICATED_FULLY }
这将留下/api
可公开访问,同时需要为 /api/*
提供有效 token .
或者,您可以保留安全配置不变,move the documentation to a different URL (例如 /docs
)。为此,您可能需要添加 /docs
作为IS_AUTHENTICATED_ANONYMOUSLY
access_control
下的路径取决于您的其他规则。
然后,当可以访问文档页面时,单击页面顶部的授权按钮并输入 Bearer <valid JWT token>
.
关于symfony - API 平台 - 具有 JWT 身份验证的 Swagger UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48880227/