什么是 SPA-Auth0-API 令牌认证序列?

What is the SPA-Auth0-API token authentication sequence?

我正在构建一个带有静态前端的 API,并且被 auth 绊倒了。我正在考虑为此使用 Auth0,但我对 身份验证后发生的事情有点模糊。

SPA 和 API 在不同的主机上。

那么,这是否接近成功 API 访问的事件顺序?

  1. 客户端从 API
  2. 请求资源
  3. API 响应资源受保护
  4. 客户端向 Auth0 提交登录凭据
  5. Auth0 对凭据进行身份验证,并响应...什么?令牌?
  6. 客户端存储此令牌以备将来使用? (这不是CSRF的秘诀吗?)
  7. 客户端然后从 API 请求资源,但这次使用令牌?
  8. API 识别令牌,并响应资源?或者,在向客户端响应资源之前,API 是否必须针对每个请求针对 Auth0 验证令牌?

提前致谢。

基本上,您的步骤是正确的 - 出于以下描述的目的使用 Auth0 和 SPA 应用程序。

使用 Auth0 进行身份验证,并在您的请求中传递一个 audience 参数,使用 token 作为 response_type。这是一个示例,只需将 {{YOUR_XXX}} 部分与您自己的值交换即可。它会将结果发送到 https://jwt.io(您需要使用 Auth0 仪表板/api.

将其添加到您允许的客户端回调中
https://{{YOUR_TENANT}}.auth0.com/authorize?client_id={{YOUR_CLIENT_ID}}&protocol=oauth2&redirect_uri=https://jwt.io&response_type=token&scope=openid email&audience=https://{{YOUR_API_AUDIENCE}}&nonce=123&state=xyz

有关此内容的 docs,请参阅此处。

是的,SPA 客户端通常将 JWT 访问令牌存储在本地存储中。这比使用 say a cookie 提供更好的 CSRF 保护。然后使用返回的 JWT 访问令牌对 API 发出授权请求(通常通过作为授权承载 header 发送)。 API 请求是无状态的,并且需要在每个请求上验证 Bearer 令牌(JWT 访问令牌) - 发行者/签名/受众/到期 - Auth0 强烈支持 RS256 而不是 HS256 - 并且具有抽象的库/SDK low-level 详细信息。例如,使用 Node.js (Express) 这就像向 Passport 添加一些中间件一样简单。 关于 RS256 vs HS256 here.

的一篇很好的文章

对于完整的示例,使用 Node.js / Express,recommend this sample

希望对您有所帮助,如有任何不明之处,请随时发表评论。