问题描述
我正在设计一个大学项目的体系结构,但我不知道如何处理其中的用户身份验证和授权部分。该项目是一个桌面电子应用程序,将需要两种类型的用户(因此 roles )。他们都需要通过身份验证才能使用该应用,并且根据其身份,他们将拥有不同的授权。由于该项目在完成后将被教师和学生用作实验班的一部分,所以我认为不会同时使用30个以上的人。
我的第一个想法是为此在AWS中使用Postrgesql数据库并自己实现身份验证,但这意味着用户将必须注册并创建一个新的配置文件,意味着要记住另一个
所以我想知道的全部是:是否可以使用Auth0(免费帐户)实现此功能,而不必使用第三方数据库解决方案(例如具有AWS的Postgresql)?如果没有,您会建议我研究什么?最好是一种解决方案,例如,我可以利用Google的OIDC实施来同时区分两种类型的用户BUT。。
解决方法
这里有2个单独的解决方案:
桌面验证
2个标准要求是:
- 使用授权码流(PKCE)
- 通过系统浏览器登录
您可以通过以下一种机制来监听登录响应(我更喜欢后者):
- 环回Web服务器
- 私有URI方案操作系统通知
我的博客中有一些tutorials + code samples使用了Electron。您可以同时运行上述两个聆听选项,然后查看自己喜欢的声音。
具有角色的API授权
您需要通过声明使角色对API可用。可以通过以下任何一种机制来完成此操作(我更喜欢后者):
- 通过Auth0在访问令牌中包含角色
- 获取API以从其自己的数据库读取用户角色
我的Authorization blog post讨论了以易于扩展的方式构建索赔对象的方法。通常的主要目的是使API OAuth处理产生这样的对象:
class UserPrincipal {
// The technical user id from the access token
string sub;
// The user id from your own database
string userId;
// The user's roles
string[] roles;
}
鉴于该对象,您可以执行以下操作:
- 在需要时使用基于角色的授权
- 登录后从您的应用程序数据中提供用户资源
总结
Auth0将满足您的某些要求,并且可能是您早期所需要的。不过,您有时可能需要在您的API中管理非OAuth用户数据。
很高兴回答任何后续问题..