如何保护应用程序安全并能够在Symfony + VueJs SPA中使用Symfony Auth凭证

时间:2019-02-07 14:36:57

标签: symfony vue.js axios symfony4 api-platform.com

我已经用Symfony4 + GraphQl + axios + vuejs实现了一个api平台应用程序;所有这些都作为SPA起作用,它使用单个控制器动作来呈现模板,然后所有路由器都由vue-router处理。到目前为止一切顺利。

当我要保护应用程序(常规symfony方式)正常工作时,这里是配置

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

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
        App\Entity\User:
            algorithm: bcrypt

    providers:

        in_memory:
            memory:
                users:
                    administrador: { password: p@ssw0rd, roles: [ 'ROLE_USER' ] }

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

        tempapi: #this should not be configured 
            pattern: ^/api
            security: false

        memory:
            pattern: ^/
            logout: true
            anonymous: true
            provider: in_memory
            form_login:
                login_path: /login
                check_path: /login

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_USER }

我认为一切都配置正确,但是当我评论tempapi防火墙并进行登录时,我无法访问api,我得到的只是重定向到登录页面。请注意,我正在从防火墙后面的视图访问该api,因此我希望它表现为常规的ajax请求(因为确实如此)。

当我删除注释并离开tempapi防火墙而没有安全性时,我可以访问api,但无法访问已记录的用户凭据,角色等。

  

阿波罗配置以使用graphql端点

const httpLink = new HttpLink({
  uri: '/api/graphql'
})

const cache = new InMemoryCache()

export default new ApolloClient({
  link: httpLink,
  cache,
  connectToDevTools: true
})
  

axios配置以访问其余端点

export const backend = axios.create({
  baseURL: '/api',
  headers: {
    'Content-Type': 'application/json'
  }
})

为什么symfony处理经过身份验证的防火墙后发出的异步请求,因为它们是外部的?我没有CORS的问题

谢谢!

0 个答案:

没有答案