对id_token的澄清vs access_token
我正在用OIDC和OAuth 2.0(使用Auth0)构建系统,并且我不确定如何正确使用id_token
和access_token
。或者说,我很困惑在我的设置中将哪些角色分配给各种服务。对id_token的澄清vs access_token
我有一个完全静态的前端应用程序(单页面应用程序,HTML + JS,没有后端),可以确保用户使用针对Auth0的隐式流进行身份验证。前端应用程序然后从我正在构建的API中获取数据。
现在,这是对的?
- 的前端SPA是OAuth的客户端应用程序
- 我的API服务是一个OAuth 资源服务器
...或:
- 的前端和我API服务都是客户端应用程序
如果我的两个前端和后端API可以被认为是客户端,我看到在使用id_token
因为从我的前端到我的后端请求承载令牌没有造成真正的伤害 - 这是有吸引力,因为这样我可以简单地验证后端上的已签名令牌,并且我拥有关于我需要的用户的所有信息。但是,如果我的API被认为是资源服务器,我应该使用access_token
,但是随后我必须在每个API请求上连接到Auth0的服务器,以验证令牌并获取基本的用户信息,对吗?
我读过this这似乎表明access_token
是唯一与我的API一起使用的有效标记。但就像我说的,我不确定个别服务的作用。使用id_token
是诱人的,因为它在后端不需要网络连接,并且包含我需要提取正确数据的信息。
什么是正确的方式去做这件事?
您的frontent是您的OAuth客户端应用程序,只要它存储令牌并可以对OAuth流程执行操作。而你的API服务是资源服务,因为它接受你的身份服务器发出的access_token。
另外我会说,你的id_token代表记录用户的身份,并可能包含你的应用程序的敏感数据。 access_token作为您的凭证来访问资源。
最后,您将使用access_token来请求资源,并且如果您需要登录用户(资源所有者)的特定数据,则可以从令牌端点请求ID令牌。
我对这个真的比实心输入在Auth0论坛:https://community.auth0.com/questions/10010/clarification-on-token-usage –
考虑到论坛的响应转换成一个答案在这里,它将帮助我们在同一条船上的其他人:-) –