我有一个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允许用户进入。
所有这一切,我想我的问题是:
我应该在API Management Gateway进行身份验证还是应该在Azure Web API上进行身份验证?
我可以使用Django的内置身份验证系统来做我想要的或不需要的吗?
我是否过于复杂了?有更简单的方法吗?所有这些似乎都是很多工作。
OpenID Connect我应该使用什么(而不是Oauth2)?我也没有经验。
答案 0 :(得分:2)
Azure API Management实际上并不提供任何类型的JWT发布机制,因此您必须自己实现。这样做的终点可能会也可能不会通过API管理公开。
可能让您感到困惑的是,APIm 门户支持各种身份提供商(如Twitter或Google)注册API。但这些不您的应用程序用户,这些用于 API门户用户。
您能够对APIm网关执行的操作是验证对后端API的后续调用,即所提供的JWT令牌有效(使用<validate-jwt>
策略)。
希望有帮助(至少有点),马丁