1

セキュリティで保護したい angularJS アプリケーションを使用する RESTful API ( FOSRestBundleに基づく) があります。そのために、期待どおりに機能するFOSUserBundleを使用しました。実際、RESTful API への呼び出しは、 I が を介して接続された場合に接続されます/login

では、 API が私のものであり、アプリケーションも私のものである場合に、API がアプリケーションまたはクライアントによって特別に消費される場合、なぜFOSOAuthServerBundleを使用する必要があるのでしょうか?

FOSOAuthServerBundleを介して接続した後でも、アプリケーション(私のアプリケーション)の RESTful APIへのアクセスを許可または拒否するページにリダイレクトされます。これはまったく論理的ではありません!!!

その上でご意見をお聞かせください。

NB:security.ymlと私のangularjsアプリの下に追加しました

security.yml

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_USER : ROLE_API
        ROLE_ADMIN: ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    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: ^/oauth/v2/auth$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] }

app.js

angular.module('ads', ['ngRoute', 'restangular'])
        .config(function ($interpolateProvider) {
            $interpolateProvider.startSymbol('{[{').endSymbol('}]}');
        })
        // .config(['RestangularProvider', function(RestangularProvider) {
        //     RestangularProvider.setDefaultHeaders({'Authorization': 'Basic YW1pbmU6c3RpZ21hdGFn'}); //cmVzdGFwaTpzZWNyZXRwdw==
        // }])
        .config(['RestangularProvider', function (RestangularProvider) {
                RestangularProvider.setBaseUrl('/minnapi/web/app_dev.php/api/v1/');
                RestangularProvider.setResponseExtractor(function (response, operation, what, url) {
                    if (operation == 'getList') {
                        return _.toArray(response);
                    } else {
                        return response;
                    }
                });
                RestangularProvider.addRequestInterceptor(function (element, operation, what, url) {
                    var newRequest = {};
                    if (operation == 'post' || operation == 'put') {
                        what = what.split('');
                        what.pop();
                        what = what.join('');
                    }
                    if (operation == 'put') {
                        delete element._links;
                    }

                    newRequest[what] = element;
                    return newRequest;
                });
                RestangularProvider.setRestangularFields({
                    selfLink: '_links.self.href'
                });
                RestangularProvider.setDefaultRequestParams('get', {limit: 100});
            }]);

app-controller.js

angular.module('ads')
        .controller('BrandController', ['$scope', '$routeParams', '$filter', 'Restangular', '$q',
            function ($scope, $routeParams, $filter, Restangular, $q) {
                'use strict';

                $scope.brands = [];
                $scope.newBrand = {name: '', published: true};

                Restangular.all('brands').getList().then(function (brands) {
                    $scope.brands = brands;
                });


                $scope.addBrand = function () {
                    $scope.brands.post($scope.newBrand).then(function (brand) {});
                    $scope.brands.push($scope.newBrand);
                    $scope.newBrand = {name: '', published: true};
                };

            }]);
4

1 に答える 1

0

簡単に言うと、API をサード パーティに公開しない場合は、FOSOAuthServerBundle は必要ありません。

于 2016-08-09T14:02:15.550 に答える