मैं अपने एपीआई मार्गों की सुरक्षा के लिए बैक-एंड को संभालने और jwt टोकन का उपयोग करने के लिए एक व्यवस्थापक उपयोगकर्ता बनाना चाहता हूं।

मेरी सुरक्षा में। yaml फ़ाइल मैं लॉगिन फॉर्म प्रमाणीकरण को संभालने के लिए एक मुख्य फ़ायरवॉल जोड़ता हूं:

 main:
            anonymous: lazy
            provider: app_user_provider
            guard:
                authenticators:
                    - App\Security\LoginFormAuthenticator
            logout:
                path: app_logout

और मैं एक्सेस कंट्रोल कॉन्फ़िगर करता हूं:

- { path: '^/admin', roles: ROLE_ADMIN }
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }

अब, अगर मैं लॉगिन फॉर्म का उपयोग करता हूं, तो मैं एक व्यवस्थापक के रूप में साइन इन कर सकता हूं:

sign in

admin controller

साइन इन करने के बाद मैं व्यवस्थापक नियंत्रक तक पहुंच सकता हूं।

मैंने jwt लेक्सिक बंडल जोड़ा और मैंने security.yaml में config जोड़ा:

login:
            pattern:  ^/api/login
            stateless: true
            anonymous: true
            json_login:
                check_path:               /api/login_check
                success_handler:          lexik_jwt_authentication.handler.authentication_success
                failure_handler:          lexik_jwt_authentication.handler.authentication_failure
        api:
            pattern:   ^/api
            stateless: true
            anonymous: true
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator

और मैंने api_platform.yaml में config जोड़ा:

api_platform:
    mapping:
        paths: ['%kernel.project_dir%/src/Entity']
    patch_formats:
        json: ['application/merge-patch+json']
    swagger:
        versions: [3]
        api_keys:
            apiKey:
                name: Authorization
                type: header
    title: API partage de mandats
    version: 1.0.0
    collection:
        pagination:
            client_enabled: true
            enabled_parameter_name: pagination # optional
    eager_loading:
        enabled: false

मैं अपने एपीआई के लिए सार्वजनिक पहुंच बनाना चाहता हूं, और बिना टोकन के परीक्षण एपीआई को रोकना चाहता हूं:

मेरी एपीआई इस तरह दिखती है: api

समस्या यह है: अगर मैं प्रमाणीकृत नहीं हूं तो मुझे संसाधन घटना मिल सकती है:

enter image description here

मेरा वर्तमान एक्सेस नियंत्रण है:

enter image description here

एपीआई संसाधनों तक सार्वजनिक पहुंच को रोकने के लिए मैं सुरक्षा.yaml में कॉन्फ़िगरेशन कैसे जोड़ सकता हूं?

0
Khaled Boussoffara 22 मार्च 2020, 01:17

2 जवाब

क्या, आप इस लाइन को अपने एक्सेस_कंट्रोल में जोड़ सकते हैं:

security:
    # ...
    access_control:
        - { path: '^/api/mandates', roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: '^/api', roles: ROLE_USER }
-1
famas23 22 मार्च 2020, 02:12
अगर मैं एपीआई में ROLE_USER जोड़ता हूं, तो इसका मतलब है कि उपयोगकर्ता को दस्तावेज देखने के लिए प्रमाणित किया जाना चाहिए। मैं चाहता हूं कि ^/एपीआई सार्वजनिक हो, लेकिन ^/एपीआई/जनादेश सुरक्षित है।
 – 
Khaled Boussoffara
22 मार्च 2020, 01:59

मैं समस्या को ठीक करता हूं। मुझे केवल फ़ायरवॉल में अपने मार्ग में एक स्लैश जोड़ने की आवश्यकता है:

api:
            pattern:   ^/api/
            stateless: true
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator

अब सब कुछ वैसा ही काम करता है जैसा मैं चाहता हूं।

-1
Khaled Boussoffara 22 मार्च 2020, 02:14