2015-01-15 14 views
5

लौटाता है मैं एक विश्वसनीय API के लिए LexikJWTBundle का उपयोग कर रहा हूं।लेक्सिक जेडब्ल्यूटी 401 अनधिकृत

लॉगिन ठीक काम करता है और मुझे अपना टोकन मिलता है। लेकिन जब मैं एक जीईटी अनुरोध करता हूं तो मुझे कोई सामग्री नहीं मिलती है। प्राधिकरण हैडर ठीक लगता है के बाद से मैं प्रोफाइलर में यह मिलता है: अनुरोध हेडर: प्राधिकरण: बियरर {टोकन} अनुरोध सर्वर पैरामीटर: HTTP_AUTHORIZATION: बियरर {टोकन}

401 मैं से है: https://github.com/lexik/LexikJWTAuthenticationBundle/blob/master/Security/Firewall/JWTListener.php#L80

मैंने विभिन्न समाधानों का प्रयास किया है लेकिन फिर भी यह काम नहीं कर रहा है।

क्या आपको इस बारे में कोई विचार होगा कि इसे कैसे हल/डीबग करें?

मेरे config:

# config.yml 
... 

lexik_jwt_authentication: 
    private_key_path: %kernel.root_dir%/var/jwt/private.pem # ssh private key path 
    public_key_path: %kernel.root_dir%/var/jwt/public.pem # ssh public key path 
    pass_phrase:  'TEST'          # ssh key pass phrase 
    token_ttl:  86400         # token ttl - defaults to 86400 

और

# security.yml 

security: 
role_hierarchy: 
    ROLE_SUPER_ADMIN:  [ROLE_ADMIN, ROLE_SONATA_ADMIN, ROLE_ALLOWED_TO_SWITCH] 
# http://sonata-project.org/bundles/admin/2-3/doc/reference/security.html 
# set access_strategy to unanimous, else you may have unexpected behaviors 
access_decision_manager: 
    strategy: unanimous 

encoders: 
    FOS\UserBundle\Model\UserInterface: sha512 

providers: 
    fos_userbundle: 
     id: fos_user.user_provider.username_email 

firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 

    api_login: 
     pattern: ^/api/login # Default: .* 
     provider: fos_userbundle 

     # form login 
     form_login: 
      login_path:  fos_user_security_login 
      # csrf_provider: form.csrf_provider # Default: my.csrf_provider.id 
      # LexikJWT # 09/01/15 - Note: provient de la configuration officielle. 
      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 
     anonymous: true # Default: ~ 

    api: 
     pattern: ^/api 
     stateless: true 
     lexik_jwt: 
      authorization_header: # check token in Authorization Header 
       enabled: true 
       prefix: Bearer 
     anonymous: true 

access_control: 
    # Secured part of the site 
    # This config requires being logged for the whole site and having the admin role for the admin part. 
    # Change these rules to adapt them to your needs 
    - { path: "^/api/contacts$", roles: IS_AUTHENTICATED_ANONYMOUSLY, methods: [POST] } 
    - { path: "^/api/users/dt$", roles: IS_AUTHENTICATED_ANONYMOUSLY, methods: [GET] } 
    - { path: "^/api/users$", roles: IS_AUTHENTICATED_ANONYMOUSLY, methods: [POST] } 
    - { path: "^/api",  roles: [IS_AUTHENTICATED_FULLY, ROLE_API] } 

उत्तर

4

मैं सिर्फ एक ही समस्या

यहाँ मेरी security.yml

firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt|error)|css|images|js)/ 
     security: false 

    login: 
     pattern: ^/api/login 
     stateless: true 
     anonymous: true 
     provider: user_db 
     form_login: 
      check_path:    /api/login_check 
      username_parameter:  _username 
      password_parameter:  _password 
      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 
     lexik_jwt: 
      authorization_header: # check token in Authorization Header 
       enabled: true 
       prefix: Bearer 
      throw_exceptions:  false  # When an authentication failure occurs, return a 401 response immediately 
      create_entry_point:  true  # When no authentication details are provided, create a default entry point that returns a 401 response 
      authentication_provider: lexik_jwt_authentication.security.authentication.provider 

मेरे समस्या यूज़रनेम और पासवर्ड मानकों था पर एक समाधान मिल गया। मैं "_password" द्वारा "_username" और "password" द्वारा"उपयोगकर्ता नाम" बदलने

0

LexikJWTBundle टोकन जेनरेट करता तो उपयोगकर्ता की साख मान्य हैं। समस्या तब होती है जब आप सुरक्षित मार्गों तक पहुंचने का प्रयास करते हैं ("^/api" पथ के पीछे)।

आपको निश्चित रूप से उपयोगकर्ता को नियुक्त भूमिकाओं की जांच करनी चाहिए। शायद ROLE_API गुम है और उपयोगकर्ता पूरी तरह प्रमाणित नहीं है।

+0

आपके उत्तर के लिए धन्यवाद। समस्या यह थी कि प्रदाता एपीआई फ़ायरवॉल में गायब था। इसलिए इसे api_login और api में होना चाहिए। – Xavier13

1

आप अपने security.yml की role_hierarchy में ROLE_API जोड़ना चाहिए:

role_hierarchy: 
    # ... 
    ROLE_API: [ROLE_USER] 

फिर, ROLE_API के साथ रैंक किए गए उपयोगकर्ता IS_AUTHENTICATED_FULLY तक सीमित मार्गों तक पहुंच सकते हैं।

इसके अलावा, यदि आप वेब सर्वर का उपयोग कर रहे हैं, तो अंतर्निहित सर्वर (यानी app/console server:run) का उपयोग करके अपने एप्लिकेशन का उपयोग करने का प्रयास करें।

अपाचे हेडर में टोकन को संशोधित करने लगता है।

संबंधित मुद्दे