2017-07-02 80 views
0

我想验证一个Symfony 3应用程序的API和BackOffice用户与3束的组合:FR3DLdapBundle,LexikJwtAuthBundle和fosUserBundle。我试图做的第一步是LexicJwtBundle与fosUserBundle结合起来,作为一个供应商,而是每一个401错误“坏凭据”的出现给我时间,这里是我的配置文件:Symfony 3 API认证与FR3DLdapBundle,Jwt和FosUserBundle

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: [email protected] 
     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: ~ 

security.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 } 

parameters.yml

# 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 

的routing.yml

我测试此网址:http://localhost:8000/login_check与邮递员获取令牌,但没有工作!请帮忙吗?

enter image description here

+0

401码意味着用户没有鉴别的,这是如此logique,也许用户“测试”不alreday注册... – ahmedbhs

+0

嗨@Bhs感谢您的评论,用户已注册并存在于数据库中,它已经过身份验证,但仍然是相同的错误,并没有生成令牌:/! – sahnoun

回答

1

你必须通过JSON发送正文行这样的 {“_username”:“测试”, “_password”:“测试”}

-1

从截图,看来你错过_username和_password的下划线。也许这足以让auth成功?

+0

嗨@Mikael,我已经试过,没有下划线,但没有生成令牌,同样的错误仍然出现! – sahnoun

+0

也许它与路由有关:@ FOSUserBundle/Resources/config/routing/security.xml也有一个/ login_check路由。你可能想要有一个不同的路径? – Mikael

+0

没有找到办法做到这一点! – sahnoun