用google账号进行身份验证的原生桌面应用与后台

问题描述 投票:1回答:1

我有一个应用程序,它有一个后端和一个前端(java)。我需要有用户认证,但我不希望自己处理大部分。所以我想我可以让用户用他们的google账号进行认证。

后台部分大部分已经实现了,从浏览器上看也能正常工作。

  1. 我尝试导航到我的服务器的URL, 浏览器被重定向到google的登录页面。
  2. 我登录后,浏览器又被重定向回我的服务器,这次是用auth信息(某种标记?),我得到一个响应。

但我不知道如何从桌面应用程序中设置这个问题。我想让应用程序有一个登录按钮,当按下时,在系统浏览器中打开谷歌登录页面,让用户登录。如果登录成功,桌面客户端就可以使用google账号的信息(比如邮箱地址)来识别自己与我的服务器。

这是我第一次做这样的事情,所以我不知道我找的地方是否正确。我在网上的研究让我想到了OAuth2.0,但这似乎更像是授权而不是认证。

我看了谷歌的 OpenID指南 它指引我到 在安装的应用程序中使用OAuth2这是我的用例的正确解决方案吗?还是说对于那些只有前端而所有数据都保存在桌面应用中的应用来说?

java authentication spring-security google-oauth google-oauth2
1个回答
0
投票

我不完全确定这是否安全,是否符合最佳实践,但我找到了一个解决方案。我使用了这个想法。回环重定向URI 用我自己的方式。

  1. 我在桌面应用程序上启动一个随机可用端口的http监听器,比如说是54321端口。
  2. 我想联系一个指向我的服务器的url。在这个url中,我添加了回环端口作为查询参数。因此,这个网址应该是这样的 https://myserver.org:8443/signin?loopback_port=54321
  3. 我用这个网址启动系统浏览器。服务器需要认证,所以浏览器被重定向到google登录,并为应用程序访问我的google账户数据提供授权。
  4. 在google中登录完成后,浏览器会被重定向回最初试图到达的我的服务器的url。现在由于身份验证已经完成,请求就会通过。
  5. 我更新了 /signin 在我的服务器上的端点,返回重定向至 /signin2 (再加上 loopback_port param)。) 的重定向。/signin 将设置 JSESSIONID 在浏览器中的cookie中,当我们收到请求时,在 /signin2我们可以这样理解 JSESSIONID.
  6. 当我们收到请求时,在 /signin2我们使用回环端口和jsessionid在桌面应用程序上建立一个重定向url到http监听器。jsessionid将作为一个查询参数。所以浏览器会被重定向到 http://localhost:54321/?JSESSIONID=....
  7. 桌面应用程序上的http监听器会解析该请求以获取 JSESSIONID 的cookie,它可以在随后向服务器发送的请求中使用该cookie。有了这个cookie,服务器就会将桌面应用的请求与之前所做的认证关联起来。
© www.soinside.com 2019 - 2024. All rights reserved.