OAuth2,API和JavaScript应用程序 - 令牌验证服务器端还是客户端?

时间:2018-05-23 14:35:32

标签: oauth-2.0 vuejs2 jwt single-page-application

我是OAuth2和单页面应用程序(SPA)的新手,并且正在构建使用implicit授权类型的应用程序。

我正在为JavaScript应用程序使用VUEJS(类似于React或Angular)。

在向受保护资源提供访问令牌以及SPA开发人员是否应该在此时验证访问令牌或者这是否是受保护资源开发人员通常提供的服务时,我感到困惑?

  

这是我的流程,所以我可以更好地说明我的困惑:

  1. 客户端SPA(通过webpack编译)和受保护资源/数据都将驻留在相同域/网络上,并使用授权服务器(也在同一域上)< / p>

  2. auth服务器将通过单点登录(SSO)服务提供授权,我可以注册该应用并获取client_id以便在我的SPA代码中使用。由于implicit授权类型,无需CLIENT_SECRET。

  3. 用户导航到https://my-spa.com后,将加载应用程序,然后检查localStorage是否存在令牌。

  4. 以下是我的代码逻辑和路由器的示例:

    router.beforeEach((to, from, next) => {
    
            const token = window.localStorage.getItem('tokens-myProvider')
    
            if (to.matched.some(record => record.meta.requiresAuth)) {
                //if token exists, continue user to protected resource
                if (token !== null) {
                    next()
                } else {
                    //if no token exists, send to landing page with login button
                    next({
                        path: '/',
                        query: {
                            redirect: to.fullPath
                        }
                    })
                }
            } else {
                // if token exists and user navigates to root, redirect to /protected-resource
                if (token !== null && to.path == '/') {
                    next({ path: '/protected-resource' })
                } else {
                    next() // make sure to always call next()!
                }
            }
        })
    
    1. 如您所见,如果不存在令牌,应用程序将提示用户使用登录页面和登录按钮。此登录按钮将用户重定向到auth服务器,在那里他可以输入用户名和密码进行身份验证。如果有效,他将被重定向到应用程序的/protected-resource页面,并在响应参数中包含访问令牌。
    2. 我的问题是......

      此时SPA是否需要执行任何其他操作才能验证令牌?前端SPA开发人员是否向受保护资源服务器说“这是我的令牌,为我验证”,或者SPA开发人员是否希望代表受保护资源在其SPA代码中执行此功能?资源服务器上的后端是否进行检查?让我们说令牌作为JSON对象进入

      最后,... SSO服务提供了一个返回JWT验证密钥的端点。这需要在某处放入SPA代码吗?不知道这是什么......

0 个答案:

没有答案