由Azure API网关提供的Django API

时间:2016-03-07 03:36:26

标签: django jwt openid-connect azure-api-apps azure-api-management

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

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

所有这一切,我想我的问题是:

  1. 我应该在API Management Gateway进行身份验证还是应该在Azure Web API上进行身份验证?

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

  3. 我是否过于复杂了?有更简单的方法吗?所有这些似乎都是很多工作。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

希望有帮助(至少有点),马丁