API平台-具有JWT身份验证的Swagger UI

use*_*432 7 symfony lexikjwtauthbundle api-platform.com

我想在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
Run Code Online (Sandbox Code Playgroud)

而我的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
Run Code Online (Sandbox Code Playgroud)

Chr*_*own 8

有点晚了,但是我遇到了同样的问题。您的安全配置表明,任何以/api身份验证开头的路由都需要身份验证,包括身份验证/api。如果要将文档保留在/api路由中,请在安全配置中添加斜杠;

firewalls:
    ...
    api:
        pattern: ^/api/
Run Code Online (Sandbox Code Playgroud)

access_control:
    - { path: ^/api/, roles: IS_AUTHENTICATED_FULLY }
Run Code Online (Sandbox Code Playgroud)

这将留给/api公众使用,同时需要提供有效的令牌/api/*

或者,您可以保留安全配置不变,然后将文档移动到其他URL(例如/docs)。为此,您可能需要根据其他规则将其添加/docsIS_AUTHENTICATED_ANONYMOUSLY路径access_control

然后,在可访问文档页面时,单击页面顶部的“ 授权”按钮并输入Bearer <valid JWT token>


Tey*_*non 0

我可以解决我的问题。就我而言,问题是在公共和私人 openssl 密钥中。首先我修复了它,第二个是编码问题。我使用下面的来源来实现结果。只需查看 LexikJWTAuthenticationBundleSandbox下面的链接即可