如何为Electron桌面应用程序实施用户身份验证/角色?

问题描述

我正在设计一个大学项目的体系结构,但我不知道如何处理其中的用户身份验证和授权部分。该项目是一个桌面电子应用程序,将需要两种类型的用户(因此 roles )。他们都需要通过身份验证才能使用该应用,并且根据其身份,他们将拥有不同的授权。由于该项目在完成后将被教师和学生用作实验班的一部分,所以我认为不会同时使用30个以上的人。

我的第一个想法是为此在AWS中使用Postrgesql数据库并自己实现身份验证,但这意味着用户将必须注册并创建一个新的配置文件意味着要记住另一个 。为了避免这种情况,我阅读了一些有关 OAuth 2.0和OIDC 的知识,以及如何将其用于对用户进行身份验证和授权的方法,而无需自己执行任何一项任务,而是将任务委托给OIDC。我使用Auth0创建了一个免费帐户,并考虑将其用于OIDC集成,但是在阅读了他们免费提供的大约40页的“ OIDC集成手册”后,我不知道是否能够区分自己的帐户。我提到的这些角色或标签来吸引用户。我只是按照教程手册中的步骤进行操作,试图了解auth流程的工作原理,但这并没有为我的问题提供任何信息。

所以我想知道的全部是:是否可以使用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用户数据。

很高兴回答任何后续问题..