3

REST API を開発しました。これに接続するには、セッションと oauth の 2 つの方法があります。基本的に、私の Web サイトはセッション モードを使用し、サードパーティ ソフトウェアは oauth モードを使用します。

セッションモードと oauth モードの両方を symfony で機能させることができましたが、同時に機能させることはできません。

これが私のファイアウォールのセキュリティ設定です:

firewalls:
    auth_oauth_token:
        pattern:    ^/auth/oauth/v2/token
        security:   false

    api:
        pattern:    ^/api
        anonymous:  false
        fos_oauth:  true
        stateless:  true

    auth:
        pattern:    ^/
        anonymous: ~
        form_login:
            login_path: /auth/session/check
            check_path: /auth/session/login
            always_use_default_target_path: true
            default_target_path: /auth/session/check
            failure_path: /auth/session/check
            failure_forward: false
            use_forward: false
            failure_forward: false
            username_parameter: username
            password_parameter: password
            post_only: true
            remember_me: false
            require_previous_session: false
        logout:
            path: /auth/session/logout
            target: /auth/session/logged_out
            invalidate_session: false

セッション処理: /auth/session. OAuth 処理: /auth/oauth. API: /api.

したがって、この構成では、最初に「api」ファイアウォールを使用して、トークンでログインできます。ただし、セッションでログインしたとしても、トークンを指定しないとアクセスできません。

最初に "auth" ファイアウォールを使用すると、セッション フォームでログインできます。しかし、トークンを指定してもアクセスできません。

私はこれに夢中になっています。スタック オーバーフローでチェーン プロバイダーに関する何かを見つけました。おそらく「チェーン ファイアウォール」のようなものが必要になるでしょう...禁止されている場合は、別のファイアウォールを確認してください。

ありがとうございました

4

1 に答える 1

2

/api/methodOAuth2 に依存する/webapi/methodルートと、標準 (メイン) ファイアウォールに依存するルートを持つように、API コントローラーのルートを複製することで解決しました。

security.yml で:

firewalls:
    api:
        pattern:    ^/api
        fos_oauth:  true
        stateless:  true

    oauth_token:
        pattern:    ^/oauth/v2/token
        security:   false

    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path: /login
            check_path: /login_check
        logout:       true
        anonymous:    true

access_control:        
    - { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] }
    - { path: ^/web-api, roles: [ IS_AUTHENTICATED_FULLY ] }

routing.yml で:

acme_api:
    type: rest 
    prefix: /
    resource: "@AcmeBundle/Resources/config/routing_api.yml"

routing_api.yml で:

# REST API - OAUTH Access
acme_api_users:
    resource: AcmeBundle\Controller\UsersController
    type:     rest
    defaults: {_format: json}
    prefix:   /api
    name_prefix:  api_

# REST API - Frontend Client Access 
acme_webapi_users:
    resource: AcmeBundle\Controller\UsersController
    type:     rest
    defaults: {_format: json}
    prefix:   /web-api
    name_prefix:  webapi_
于 2014-04-09T13:51:51.390 に答える