【问题标题】:How should I implement user authentication/roles for an Electron desktop app?我应该如何为 Electron 桌面应用程序实现用户身份验证/角色?
【发布时间】:2020-08-24 05:19:27
【问题描述】:

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

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

所以总而言之,我想知道的是:是否可以使用 Auth0(免费帐户)实现此功能,而无需使用第三方数据库解决方案(例如 PostgreSQL 和 AWS)?如果没有,你会建议我研究什么?最好是一种解决方案,让我能够区分两种类型的用户,但同时利用 Google 的 OIDC 实施,例如

【问题讨论】:

    标签: authentication oauth-2.0 electron openid-connect desktop-application


    【解决方案1】:

    这里有两种不同的解决方案:

    桌面验证

    两个标准要求是:

    • 使用授权码流 (PKCE)
    • 通过系统浏览器登录

    您通过以下机制之一收听登录响应(我更喜欢后者):

    • 环回网络服务器
    • 私有 URI 方案操作系统通知

    我的博客有一些使用 Electron 的 tutorials + code samples。您可以运行上述两种聆听选项,看看您喜欢什么。

    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 用户数据。

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

    【讨论】:

    • 谢谢!我一定会查看您提供的链接,如果它们解决了我的问题,我会将其标记为已解决:)
    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2017-12-02
    • 2012-01-16
    相关资源
    最近更新 更多