帮我为Angular App和我的REST API选择正确的OAuth2授权类型?
UX-wise我只想在我的前端使用一个登录表单,这将要求用户名/密码(没有对话框要求权限)。我认为"资源所有者(密码)授予"对我来说是最合适的(因为我控制前端和后端),但我不确定如何处理访问令牌刷新。
如果我对流程有误,请纠正我:
access token
。LocalStorage
中,以便随后发出Ajax请求。access tokens
应该是短暂的。并应使用Refresh token
进行更新。首次登录后refresh token
是否应该返回access token
并存储在客户端?如果不是什么替代方案?
access token
刷新?或者我应该从前端拨打电话,以便在它即将到期时刷新access token
。但是我在前端需要一个refresh token
,对吧?如你所见,我的头脑里有refresh token
。对另一项拨款实施有一些澄清或建议会很棒。
我认为后端技术在这里是无关紧要的,但以防万一它是带有FOSOAuthServerBundle的Symfony2。
答案 0 :(得分:0)
当您在OAuth服务器上调用TOKEN端点(对于每个grant_type可能)时,您会获得access_token但其他信息(我认为这里有所有信息):
{
access_token: // your short-lived token
expires_in: // number of seconds before the access_token is invalid
token_type: // the type of the access_token
scope: // scopes of the access_token
refresh_token: // long-lived token to get a new access_token
}
在我看来,您需要所有这些信息(可能范围未使用,但所有其他信息将在以后使用)。您必须存储access_token才能进行API调用。几秒钟后,您的access_token将不再起作用。你需要一个新的。您可以要求用户登录AGAIN或使用refresh_token。
您必须使用grant_type:refresh_token在TOKEN端点上调用OAuth服务器。您必须提供第一个请求中的refresh_token(以及其他信息),作为回报,您将获得与上述相同的响应。事实上,我认为每次access_token过期都必须这样做。在我看来,服务器端对会话或连接用户一无所知。它知道有效和无效的access_token。
这是OAuth。如果你不想每次都要刷新,你可以制作一个长期存在的access_token(通过设置expires_in),我认为这是在OAuth上下文中使sens变为唯一的解决方案。
您是否需要对OAuth进行一些澄清?