当前位置: 首页 > 知识库问答 >
问题:

oauth2 openid连接javascript(electron)桌面应用程序

韩喜
2023-03-14

桌面应用程序的正确oAuth2流是什么?除了桌面应用程序之外,我还有一个使用隐式流的SPA Web GUI。如果客户端在3600之后重定向到IdP以发出新的Access令牌,这并不重要。

但是桌面应用程序需要全天候运行,或者可能全天候运行。因此它需要通过refresh_token自动刷新访问令牌。但是由于隐式流不提供刷新令牌,因此它可能是桌面应用程序的错误流,不是吗?

我想我需要身份验证代码流,它确实提供了一个refresh\u令牌。但身份验证请求需要redirect\u uri。假设我想使用Google作为我的openid提供者。使用google,我似乎无法用自定义URI方案注册客户端凭据(https://developers.google.com/identity/protocols/OpenIDConnect). 例如,注册是有效的http://localhost:9300,理论上可以由应用程序处理。

A.

桌面应用程序接收refresh\u令牌的正确oauth2流是什么?

B.

我可以在不使用隐式流(Google IdP)的情况下通过自定义URI方案捕获redirect_uri吗?监听自定义uri方案比监听本地tcp端口要容易得多。

C

这是一个更普遍的问题。通常桌面应用程序是公共应用程序,所以我不应该包含client_secret对吗?所以唯一剩下的流是隐式流。但是我如何根据规范更新访问令牌而不会每3600个麻烦桌面用户呢?就我而言,我可以在本地发布应用程序,这样就不公开了,但是对于公共应用程序来说怎么样呢?

共有3个答案

郭阳曜
2023-03-14

对于本机应用程序(桌面),您可以遵循OAuth 2.0进行本机应用程序。但这仍在审查中,您可以参考提供的链接中的最新草案。

使用此流,您可以使用授权代码流来获取访问令牌和刷新令牌。当涉及到扩展应用程序使用(24/7及以后)时,刷新令牌应该可以解决与用户体验相关的问题。

根据本工作文档,对客户端身份验证有严格的指导方针。第8.5节对此进行了讨论。因为它说不推荐客户端凭据

出于这个原因,以及[RFC6819]第5.3.1节中所述的原因,不建议授权服务器要求使用共享秘密对公共本机应用程序客户端进行客户端身份验证

正如nvnagr在他的回答中提到的,PKCE[RFC7636]是本地公共客户端的必备工具。

卫华奥
2023-03-14

A: 是使用代码授权

C: 是的,它不应该包括客户机密。这就是为什么在将代码交换为刷新令牌时,不需要为本机客户端(“其他”)发送机密。只需将该字段留空即可。

正如jwilleke所建议的,如果AppAuth库可用于您的用例,请使用它,因为它还将处理一些安全问题(PKCE)。

邢项禹
2023-03-14

A-授权代码授予

B-此处不确定,您可以注册自定义URI方案

C-没有提供足够的信息。您是否使用AppAuth库?如果是这样,您应该使用PKCE,然后不需要为刷新令牌采取额外的安全措施,前提是客户端从不通过安全连接与IDP以外的任何人发送刷新令牌。

这有帮助吗?

 类似资料:
  • 这里怎么了?是否可以使用这样的PowerShell脚本? 我可以通过HTML页面调用此脚本吗(因为我将在网页上放置许多其他资源,这些资源将作为开发人员的一个链接,这样我们就不会在每次需要它们时浪费时间和精力去查找它们)?是否可以将应用程序注册到URI方案? 还有其他(标准)方法吗?

  • Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。vscode就是用它来实现的。本篇介绍使用electron和cesium搭建简单的三维桌面环境。 先来搭建electron的环境

  • 在学习这本书的过程中,你已经掌握了很多关于 Git 的命令。虽然这些是在学习过程中不可缺少的,但是版本控制的核心并不是让你学习所有的命令和参数。 当你掌握一些基本的概念,再加上一个带有用户图形界面的应用程序的帮助,就可以让你的日常工作变得更加简单。一个最大的好处就是它会为你提供了一个可视化的用户操作界面。 在桌面应用程序中,很多任务使用起来会更加容易和更方便。并且你也不需要记住那几十个繁琐的 Gi

  • 我正在尝试使用PostgreSQL数据库构建一个Ruby on Rails Web应用程序,并使用Hibernate使用H2数据库引擎构建一个Java应用程序。 我听说过JDBC、RMI和套接字,但我对这些一无所知。 问题是,我想使用web应用程序中的数据,使用本地数据库在其中进行一些处理,最后我想将更改上传到数据库,或者说我想在web数据库中创建新表,并立即在web中显示更改。 例如,我想让学生

  • Windows提供了一种远程桌面系统,可使用户远程登录进行系统管理或作为终端服务器运行各种应用软件。要连接Windows远程桌面,需在Windows客户端安装相应的软件(tsclient)。如果你是Windows服务器管理员肯定使用过该工具,因为远程桌面能大大方便系统管理员远程维护服务器。在Linux系统中,我们也可通过rdesktop工具连接Windows远程桌面。 debian:~# apt

  • 我想通过制作将我的电脑连接到另一台电脑。蝙蝠档案。当我运行该文件时,它应该连接到另一台电脑。我编写了“mstsc/v:192.168.15.102”命令。当我执行该文件时,它会打开远程桌面窗口并要求用户名和密码。我怎样才能避开那个窗口并将凭证传递进来。蝙蝠档案。