2

我有一个 Django 应用程序,它当前存储用户凭据并执行授权和身份验证。我正在将前端分解为 Angular SPA 并将后端转换为 REST API。我的 Django API 将作为受 Azure API 网关保护的 Azure API 应用程序存在。我想从 Django 中删除身份验证部分,并允许用户通过 Google 或 Microsoft 帐户使用 OpenID Connect 登录。我想要发生的是这样的:

当用户访问该网站时,假设他们从未注册过我的应用程序,他们将可以选择使用他们的 Google 帐户或 Microsoft 帐户登录。如果用户决定使用他们的 Google 或 Microsoft 帐户登录,(这是我感到困惑的地方,也是我在这里发帖的原因......)我认为会发生什么是 API 网关执行身份验证,生成 JSON Web 令牌(JWT),并将该令牌发送回 Django API。Django 接收 JWT,对其进行解密,并检查是否存在与 JWT 中的电子邮件地址匹配的用户帐户。如果没有用户帐户,Django 会将用户添加到用户帐户表(不存储密码)。如果有与该电子邮件地址匹配的用户,则 Django 允许该用户进入。

说了这么多,我想我的问题是:

  1. 我应该在 API 管理网关上进行身份验证,还是应该在 Azure Web API 上进行身份验证?

  2. 我可以使用 Django 的内置身份验证系统来做我想做的事还是不需要做的事?

  3. 我是不是把这一切都复杂化了?有没有更简单的方法来做到这一点?这一切似乎需要做很多工作。

  4. 我应该使用 OpenID Connect(而不是 Oauth2)吗?我也没有经验。

4

1 回答 1

2

Azure API 管理实际上不提供任何类型的 JWT 发布机制,因此您必须自己实现。这样做的终点可能会也可能不会通过 API 管理公开。

可能让您感到困惑的是 APIm门户支持各种身份提供商(如 Twitter 或 Google)来注册 API。但这些不是您的应用程序用户,这些是API 门户用户

可以使用 APIm 网关执行的操作是验证对后端 API 的后续调用是否提供的 JWT 令牌有效(使用<validate-jwt>策略)。

于 2016-03-08T09:50:38.233 回答