什么是 SPA-Auth0-API 令牌认证序列?
What is the SPA-Auth0-API token authentication sequence?
我正在构建一个带有静态前端的 API,并且被 auth 绊倒了。我正在考虑为此使用 Auth0,但我对 身份验证后发生的事情有点模糊。
SPA 和 API 在不同的主机上。
那么,这是否接近成功 API 访问的事件顺序?
- 客户端从 API
请求资源
- API 响应资源受保护
- 客户端向 Auth0 提交登录凭据
- Auth0 对凭据进行身份验证,并响应...什么?令牌?
- 客户端存储此令牌以备将来使用? (这不是CSRF的秘诀吗?)
- 客户端然后从 API 请求资源,但这次使用令牌?
- 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。
希望对您有所帮助,如有任何不明之处,请随时发表评论。
我正在构建一个带有静态前端的 API,并且被 auth 绊倒了。我正在考虑为此使用 Auth0,但我对 身份验证后发生的事情有点模糊。
SPA 和 API 在不同的主机上。
那么,这是否接近成功 API 访问的事件顺序?
- 客户端从 API 请求资源
- API 响应资源受保护
- 客户端向 Auth0 提交登录凭据
- Auth0 对凭据进行身份验证,并响应...什么?令牌?
- 客户端存储此令牌以备将来使用? (这不是CSRF的秘诀吗?)
- 客户端然后从 API 请求资源,但这次使用令牌?
- 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。
希望对您有所帮助,如有任何不明之处,请随时发表评论。