0

API を FOSUserBundle で保護したい (完全な例を含むドキュメントがないため、FOSOAuthServerBundle の使用を避けたい)。

API を安全にするために、次のようにファイアウォールを作成しました。

firewalls:
    dev:
        pattern:       ^/(_(profiler|wdt)|css|images|js)/
        security:      false
    api_doc:
        pattern:      ^/api/doc
        security:     false
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_token_generator: security.csrf.token_manager
        logout:       true
        anonymous:    true

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] } 
    - { path: ^/admin/, roles: [ROLE_SUPER_ADMIN]}

これは素晴らしい!ただし、これには、広告のリストなどを表示できるように、Web サイトを使用する前にすべてを接続する必要があります (GET クエリでも、セキュリティのために接続が必要です) 。

克服するために、すべてのユーザーを限られた権限を持つ「デフォルト」ユーザーに接続することを考えています(投稿せずに単純なクエリを実行するのに十分です)。

そうすることは可能ですか?

ご協力いただきありがとうございます。

PS: FOSUserBundle と FOSOAuthServerBundle を連携させることができました。実際、クライアントを作成し、コマンド ラインからアクセス トークンを取得することができました。しかし、security.ymlアクセストークンを返すログインページを取得するように適切に構成できませんでした。

4

1 に答える 1

0

How to Authenticate Users with API Keysの symfony エントリを見てください。このエントリには、必要なコードのほとんどが含まれており、十分に文書化されています。

fos_userテーブルに API キーのフィールドを追加する必要があります。

ALTER TABLE fos_user ADD api_key VARCHAR(255) DEFAULT NULL;

ApiKeyUserProvider::getUsernameForApiKeyまた、次のように、指定された API キーに基づいてデータベースでユーザーを検索するを正しく実装する必要があります。

$repository = $this->manager->getRepository('Application\UserBundle\Entity\User');
$user = $repository->findOneBy(array('apiKey' => $apiKey));
return empty($user) ? $user : $user->getUsername();

私はこれを数年前に実装しました。従うのは簡単で、うまく機能しました!

于 2016-09-15T06:49:51.153 に答える