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

时间:2017-08-24 17:21:59

标签: api authentication jwt single-page-application auth0

我正在构建一个带有静态前端的API,并通过身份验证进行绊倒。我考虑过使用Auth0来解决其中一些问题,但我对认证后发生的事情有点模糊。

SPA和API位于不同的主机上。

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

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

1 个答案:

答案 0 :(得分:1)

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

使用Auth0进行身份验证,并在您的请求中使用令牌作为audience传递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访问令牌存储在本地存储中。与使用一个cookie相比,这提供了更好的CSRF保护。然后使用返回的JWT访问令牌对API发出授权请求(通常通过发送授权承载头)。 API请求是无状态的,并且需要在每个请求上验证承载令牌(JWT访问令牌) - 发行者/签名/受众/到期 - Auth0强烈支持RS256而不是HS256 - 并且具有抽象掉低级别的库/ SDK细节。例如,使用Node.js(Express)就像向Passport添加一些中间件一样简单。 在RS256 vs HS256 here上写得非常好。

有关完整示例,请使用Node.js / Express,recommend this sample

希望这有帮助,如果有任何不明确的地方,请随时发表评论。