authentication - 我应该如何为 Electron 桌面应用程序实现用户身份验证/角色?
问题描述
我正在为一个大学项目设计架构,但我不知道如何处理其中的用户身份验证和授权部分。该项目是一个桌面 Electron 应用程序,需要两种类型的用户(因此是角色)。他们都需要经过身份验证才能使用该应用程序,并且根据他们的身份,他们将拥有不同的授权。由于该项目是为了让教师和学生在完成后作为实验课的一部分使用,所以我认为不会超过 30 人同时使用它。
我的第一个想法是为此使用 AWS 中的 PostrgeSQL 数据库并自己实施身份验证,但这意味着用户必须注册并创建一个新配置文件,这意味着还要记住另一个<username/email, password>。为了避免这种情况,我阅读了一些关于OAuth 2.0 和 OIDC的内容,以及如何使用它来验证和授权用户,而无需自己实现这些任务中的任何一个,而是将任务委托给 OIDC。我用Auth0创建了一个免费帐户并考虑将其用于 OIDC 集成,但在阅读了大约 40 页他们免费提供的“OIDC 集成手册”后,我不知道我是否能够通过我提到的这些角色或标签来区分我的用户群。我只是按照教程手册中的步骤操作,并试图了解身份验证流程是如何工作的,但这并没有给我任何关于我的问题的信息。
所以总而言之,我想知道的是:是否可以使用 Auth0(免费帐户)来实现这一点,而不必使用第三方数据库解决方案(例如带有 AWS 的 PostgreSQL)?如果没有,你会建议我研究什么?最好是一种解决方案,它可以让我区分两种类型的用户,但同时利用 Google 的 OIDC 实现。
解决方案
这里有2个单独的解决方案:
桌面认证
2个标准要求是:
- 使用授权码流 (PKCE)
- 通过系统浏览器登录
您通过以下机制之一收听登录响应(我更喜欢后者):
- 环回网络服务器
- 私有 URI 方案 OS 通知
我的博客有一些使用 Electron 的教程 + 代码示例。您可以运行上述两个聆听选项,看看您喜欢什么。
API授权与角色
您需要通过声明使角色对 API 可用。这可以通过以下任何一种机制来完成(我更喜欢后者):
- 通过 Auth0 在访问令牌中包含角色
- 获取 API 以从自己的数据库中读取用户角色
我的授权博客文章讨论了以易于扩展的方式构建声明对象。主要目标通常是让 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 用户数据。
很高兴回答任何后续问题..
推荐阅读
- scala - Spark 和 MapR 数据库连接
- android - 使用 Firebase Cloud 函数获取当前日期和时间
- ibm-cloud - Watson Assistant @sys-date 返回明年的月份
- c++ - 宏能否用于访问动态数组或向量中的元素或为其赋值
- function - Haskell 不带参数的 catch 函数
- python - Subprocess.check_output 失败,退出状态为 -15
- visual-studio - 拉取请求策略 - 构建已过期 - 如何再次运行构建?
- php - PHP Profiler - 使用 C++ 从 PHP 扩展中获取客户端 IP 和 URL
- asp.net - 调用控制器后,MVC 视图不显示 Temp Data 值
- java - java/android - 无法访问 SD 卡上的文件