代码之家  ›  专栏  ›  技术社区  ›  547n00n

使用FR3DLdapBundle、Jwt和FosUserBundle的Symfony 3 api认证

  •  0
  • 547n00n  · 技术社区  · 7 年前

    imports:
        - { resource: parameters.yml }
        - { resource: security.yml }
        - { resource: services.yml }
    
    # Put parameters here that don't need to change on each machine where the app is deployed
    # https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
    parameters:
        locale: en
    
    framework:
        #esi: ~
        translator: ~
        secret: '%secret%'
        router:
            resource: '%kernel.project_dir%/app/config/routing.yml'
            strict_requirements: ~
        form: ~
        csrf_protection: ~
        validation: { enable_annotations: true }
        #serializer: { enable_annotations: true }
        templating:
            engines: ['twig']
        default_locale: '%locale%'
        trusted_hosts: ~
        session:
            # https://symfony.com/doc/current/reference/configuration/framework.html#handler-id
            handler_id: session.handler.native_file
            save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
        fragments: ~
        http_method_override: true
        assets: ~
        php_errors:
            log: true
    
    # Twig Configuration
    twig:
        debug: '%kernel.debug%'
        strict_variables: '%kernel.debug%'
    
    # Doctrine Configuration
    doctrine:
        dbal:
            driver: pdo_mysql
            host: '%database_host%'
            port: '%database_port%'
            dbname: '%database_name%'
            user: '%database_user%'
            password: '%database_password%'
            charset: UTF8
            # if using pdo_sqlite as your database driver:
            #   1. add the path in parameters.yml
            #     e.g. database_path: "%kernel.project_dir%/var/data/data.sqlite"
            #   2. Uncomment database_path in parameters.yml.dist
            #   3. Uncomment next line:
            #path: '%database_path%'
    
        orm:
            auto_generate_proxy_classes: '%kernel.debug%'
            naming_strategy: doctrine.orm.naming_strategy.underscore
            auto_mapping: true
    
    # Swiftmailer Configuration
    swiftmailer:
        transport: '%mailer_transport%'
        host: '%mailer_host%'
        username: '%mailer_user%'
        password: '%mailer_password%'
        spool: { type: memory }
    
    lexik_jwt_authentication:
        private_key_path: '%jwt_private_key_path%'
        public_key_path:  '%jwt_public_key_path%'
        pass_phrase:      '%jwt_key_pass_phrase%'
        token_ttl:        '%jwt_token_ttl%'
    
    fos_user:
        db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'
        firewall_name: main
        user_class: AppBundle\Entity\User
        from_email:
            address: admin200@tls.tt
            sender_name: admin tls
    
    nelmio_cors:
        defaults:
            allow_credentials: false
            allow_origin: []
            allow_headers: []
            allow_methods: []
            expose_headers: []
            max_age: 0
            hosts: []
            origin_regex: false
            forced_allow_origin_value: ~
    

    安全yml:

       # To get started with security, check out the documentation:
    # https://symfony.com/doc/current/security.html
    security:
        encoders:
            FOS\UserBundle\Model\UserInterface: bcrypt
    
        # https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
        providers:
            in_memory:
                memory: ~
            fos_userbundle:
                id: fos_user.user_provider.username
    
        firewalls:
            # disables authentication for assets and the profiler, adapt it according to your needs
            dev:
                pattern: ^/(_(profiler|wdt)|css|images|js)/
                security: false
    
            main:
                pattern: ^/
                form_login:
                    provider: fos_userbundle
                    csrf_token_generator: security.csrf.token_manager # Use form.csrf_provider instead for Symfony <2.4
                logout:       true
                anonymous:    true
                # activate different ways to authenticate
    
                # https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
                #http_basic: ~
    
                # https://symfony.com/doc/current/security/form_login_setup.html
                #form_login: ~
            login:
                pattern:  ^/login
                stateless: true
                anonymous: true
                provider: fos_userbundle
                form_login:
                    check_path:               /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
        access_control:
            - { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/api,       roles: IS_AUTHENTICATED_FULLY }
            - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/admin/, role: ROLE_ADMIN }
    

    # This file is auto-generated during the composer install
    parameters:
        database_host: 127.0.0.1
        database_port: null
        database_name: jwt
        database_user: root
        database_password: root
        mailer_transport: smtp
        mailer_host: 127.0.0.1
        mailer_user: null
        mailer_password: null
        secret: ea0a3bab6b4dc3bb4b9f8c54c5c7b6e5139ad444
    
        jwt_private_key_path: '%kernel.root_dir%/../var/jwt/private.pem' # ssh private key path
        jwt_public_key_path:  '%kernel.root_dir%/../var/jwt/public.pem'  # ssh public key path
        jwt_key_pass_phrase:  ''                                         # ssh key pass phrase
        jwt_token_ttl:        3600
    

    路由.yml

    app:
        resource: '@AppBundle/Controller/'
        type: annotation
    api_login_check:
        path: /login_check
    
    # app/config/routing.yml
    fos_user_security:
        resource: "@FOSUserBundle/Resources/config/routing/security.xml"
    
    fos_user_profile:
        resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
        prefix: /profile
    
    fos_user_register:
        resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
        prefix: /register
    
    fos_user_resetting:
        resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
        prefix: /resetting
    
    fos_user_change_password:
        resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
        prefix: /profile
    

    http://localhost:8000/login_check 邮递员去拿信物,但什么都没用!请帮点忙?

    enter image description here

    2 回复  |  直到 7 年前
        1
  •  1
  •   Elisabeth    6 年前

    你必须像那样通过json发送正文行 {“_username”:“test”,

        2
  •  -1
  •   Mikael    7 年前

    从截图上看,你似乎错过了_用户名和_密码的下划线。也许这足以让auth成功?