我是OAuth2和单页面应用程序(SPA)的新手,并且正在构建使用implicit
授权类型的应用程序。
我正在为JavaScript应用程序使用VUEJS(类似于React或Angular)。
在向受保护资源提供访问令牌以及SPA开发人员是否应该在此时验证访问令牌或者这是否是受保护资源开发人员通常提供的服务时,我感到困惑?
这是我的流程,所以我可以更好地说明我的困惑:
客户端SPA(通过webpack编译)和受保护资源/数据都将驻留在相同域/网络上,并使用授权服务器(也在同一域上)< / p>
auth服务器将通过单点登录(SSO)服务提供授权,我可以注册该应用并获取client_id
以便在我的SPA代码中使用。由于implicit
授权类型,无需CLIENT_SECRET。
用户导航到https://my-spa.com
后,将加载应用程序,然后检查localStorage
是否存在令牌。
以下是我的代码逻辑和路由器的示例:
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()!
}
}
})
/protected-resource
页面,并在响应参数中包含访问令牌。我的问题是......
此时SPA是否需要执行任何其他操作才能验证令牌?前端SPA开发人员是否向受保护资源服务器说“这是我的令牌,为我验证”,或者SPA开发人员是否希望代表受保护资源在其SPA代码中执行此功能?资源服务器上的后端是否进行检查?让我们说令牌作为JSON对象进入
最后,... SSO服务提供了一个返回JWT验证密钥的端点。这需要在某处放入SPA代码吗?不知道这是什么......