不了解将Oauth集成到rest API和单页应用程序的工作流程

时间:2018-06-12 12:37:46

标签: angular django-rest-framework auth0

我正在尝试将我的SPA,DjangoRestframework和auth0联系在一起。据我所知,用户注册和登录用户都是由Angular处理的

我真正需要帮助的一些问题:

1.用户在客户端注册后,我们是否需要执行以下操作:User.objects.create(** data)。

2.如果我们不在API上创建用户,当我们执行Recipe.objects.create(user = request.user)之类的操作时,如何存储用户的信息?

3.如果我们在前端进行身份验证,我们肯定会有一个带有用户信息的令牌。因此,当我们使用Http.post()时,我们应该将有关用户的数据传递给数据(例如:id_token,access_token)?

4.关于auth0的文档对我没有多大帮助,因为大多数事情是手动完成的。是否有人可以解释所有这些是如何工作的?我花了整整2天的时间试图找出如何连接拼图,但无济于事。

由于

1 个答案:

答案 0 :(得分:0)

使用OAuth术语,您将拥有:

  1. 资源所有者 - 想要授权的用户
  2. 客户 - 您的Angular SPA
  3. 资源服务器 - 您的Django后端/ API
  4. 授权服务器 - 处理OAuth授权/注册的服务器,这是您的案例中的Auth0提供程序
  5. 实际注册/认证由Auth0处理,而不是Angular。 Angular app将检索并存储授权服务器(Auth0)发出的访问令牌,以访问资源服务器(Django API)。

    注册

    由Auth0处理,客户端(Angular app)将用户重定向到Auth0 customizable Sign Up page,它与Facebook或Google等第三方提供商集成,Auth0还可以在自己的数据库中保留用户凭据。 您可能希望在注册期间在后端存储其他信息,也可以向Django API发送其他请求 - 问题#1& #2

    <强>验证

    您可以使用多种OAuth流程。 Auth0建议对SPA使用隐式授权流程。

    隐含拨款:

    1. 当资源所有者(用户)想要登录客户端(Angular app)时,启动流并将浏览器重定向到Authorization Server - Auth0(特别是/ authorize端点),以便用户进行身份验证。 URL可能如下所示:

      https://auth0.com/authorize? response_type=access_token& client_id=angular_client_id& redirect_uri=https://YourAngularApp.com/callback& state=123456

    2. 授权服务器 - 如果尚未登录,Auth0将使用凭据对用户进行身份验证。用户第一次浏览此流程时,将显示同意页面,其中列出了将给予Angular应用程序的权限(例如:发布消息,列出联系人等等)。

      < / LI>
    3. 授权服务器 - Auth0使用URI的哈希片段中的access_token(以及可选的id_token)将用户重定向回客户端(Angular app)。该应用程序现在可以从哈希片段中提取令牌。 E.g。

      https://YourAngularApp.com/callback# access_token=kUsPx6ohjUD7UCtm& expires_in=86400& token_type=Bearer& state=123456

    4. 客户端(Angular app)现在可以在向Django API(资源服务器)发送请求时附加access_token - 通常它只能发送带有客户端授权请求的access_token - 问题#3

    5. 关于问题#4,我认为Auth0提供了足够的文档来正确实现流程:

      Auth0 Implicit Grant

      Auth0 Implicit Grant Tutorial