- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TL;DR 在桌面应用程序上使用 google oauth 时,要在磁盘上保存什么以避免重复登录?保存谷歌用户 ID?还是 token ?还是 session ID?
我正在创建一个小型桌面应用程序,它必须对我的 REST API 服务器进行身份验证。为此,我正在使用 google oauth2。
想法是,当桌面应用程序将被验证时,它会生成一些数据,这些数据将发送到我的服务器。服务器将使用从 https://www.googleapis.com/userinfo/v2/me
收到的 google 用户 ID 存储数据。
在第一次运行桌面应用程序时,它会打开默认浏览器,使用我的服务器的 url 并启动本地 http 服务器。然后:
下次桌面应用程序启动时,它只读取参数文件,将生成的数据连同它一起发送到我的服务器
我的问题是:参数应该是什么?谷歌用户 ID? oauth token ?为此桌面应用程序生成的 session ID?还是别的?
最佳答案
正如软件开发中的通常情况一样,根据需求,您有多种选择。
强制性要求是您的客户端(桌面)应用程序需要向您的 REST API 发送一些内容,以便该 API 最多可以执行两个决定:
如果所有经过身份验证的用户都可以访问完全相同的一组操作,那么第二步可能不适用,因此我将介绍这两种情况。
另请注意,对于第一步,发送 Google 用户 ID 不是一个有效的选项,因为其他方可以获得该信息,并且不能确保用户确实通过身份验证来使用您的申请。
始终发送 id_token
或将该 token 与您的自定义 session 标识符交换都满足前面的要求,因为 id_token
包含明确指示用户经过身份验证的受众使用您的应用程序并且 session 标识符是由您的应用程序生成的,因此它也可以确保这一点。对您的 API 的请求需要使用 HTTPS,否则 token 或 session ID 很容易被攻击者捕获。
如果您使用 id_token
替代方案,您需要考虑 token 将过期;为此,再次提供一些选项:
offline_access
。使用最后一个选项,您应该得到 refresh token即使在第一个 id_token
过期后,您的应用程序也可以通过这种方式识别用户。我说应该,因为谷歌似乎做的事情与规范有点不同,例如,获取刷新 token 的方式是通过 providing access_type=offline
而不是 offline_access
from OpenID Connect .
就个人而言,我会选择 session 标识符,因为您可以更好地控制生命周期,而且它也可能更简单。
如果您的 REST API 需要一个细粒度的授权系统,那么最好的方法是使用 Google 对您的用户进行身份验证,然后拥有一个符合 OAuth 2.0 标准的授权服务器,该服务器会颁发特定于您的 API 的访问 token 。
对于授权服务器实现,您可以:
自行实现或利用开源组件
⤷ 可能会耗时、复杂并且安全风险的缓解将全部落在您身上
使用第三方 OAuth 2.0 作为服务授权提供程序,例如 Auth0
⤷ 容易上手,取决于使用量(Auth0 上的免费计划 goes up to 7000 users )它会花钱而不是时间
披露:我在 Auth0 工作。
关于rest - OAuth - 在磁盘上存储什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40316787/
我正在运行一个辅助角色,并检查 Azure 上托管的存储中是否存在数据。当我将连接字符串用于经典类型的存储时,我的代码可以正常工作,但是当我连接到 V2 Azure 存储时,它会抛出此异常。 “远程服
在我的应用程序的主页上,我正在进行 AJAX 调用以获取应用程序各个部分所需的大量数据。该调用如下所示: var url = "/Taxonomy/GetTaxonomyList/" $.getJSO
大家好,我正在尝试将我的商店导入我的 Vuex Route-Gard。 路由器/auth-guard.js import {store} from '../store' export default
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我的 Windows 计算机上的本地文件夹中有一些图像。我想将所有图像上传到同一容器中的同一 blob。 我知道如何使用 Azure Storage SDKs 上传单个文件BlockBlobServi
我尝试发出 GET 请求来获取我的 Azure Blob 存储帐户的帐户详细信息,但每次都显示身份验证失败。谁能判断形成的 header 或签名字符串是否正确或是否存在其他问题? 代码如下: cons
这是用于编写 JSON 的 NeutralinoJS 存储 API。是否可以更新 JSON 文件(推送数据),而不仅仅是用新的 JS 对象覆盖数据。怎么做到的??? // Javascript
我有一个并行阶段设置,想知道是否可以在嵌套阶段之前运行脚本,所以像这样: stage('E2E-PR-CYPRESS') { when { allOf {
我想从命令行而不是从GUI列出VirtualBox VM的详细信息。我对存储细节特别感兴趣。 当我在GUI中单击VM时,可以看到包括存储部分在内的详细信息: 但是到目前为止,我还没有找到通过命令行执行
我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定流动路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 来递归检查所有节点及其上游组件,只要上游路径没有 fork
谁能告诉我 jquery data() 在哪里存储数据以及何时删除以及如何删除? 如果我用它来存储ajax调用结果,会有性能问题吗? 例如: $("body").data("test", { myDa
有人可以建议如何为 Firebase 存储中的文件设置备份。我能够备份数据库,但不确定如何为 firebase 存储中的文件(我有图像)设置定期备份。 最佳答案 如何进行 Firebase 存储的本地
我最近开始使用 firebase 存储和 firebase 功能。现在我一直在开发从功能到存储的文件上传。 我已经让它工作了(上传完成并且文件出现在存储部分),但是,图像永远保持这样(永远在右侧加载)
我想只允许用户将文件上传到他们自己的存储桶中,最大文件大小为 1MB,仍然允许他们删除文件。我添加了以下内容: match /myusers/{userId}/{allPaths=**} { al
使用生命周期管理策略将容器的内容从冷访问层移动到存档。我正在尝试以下策略,希望它能在一天后将该容器中的所有文件移动到存档层,但事实并非如此在职的。我设置了选择标准“一天未使用后”。 这是 json 代
对于连接到 Azure 存储端点,有 http 和 https 两个选项。 第一。 https 会带来开销,可能是 5%-10%,但我不支付同一个数据中心的费用。 第二。 http 更快,但 Auth
有人可以帮我理解这一点吗?我创建了Virtual Machine in Azure running Windows Server 2012 。我注意到 Azure 自动创建了一个存储帐户。当我进入该存
我是一名优秀的程序员,十分优秀!