Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript OAuth登录对第二台设备有效_Javascript_Php_Oauth_Oauth 2.0_Google Calendar Api - Fatal编程技术网

Javascript OAuth登录对第二台设备有效

Javascript OAuth登录对第二台设备有效,javascript,php,oauth,oauth-2.0,google-calendar-api,Javascript,Php,Oauth,Oauth 2.0,Google Calendar Api,Im为用户无法与设备交互的设备编写客户端web应用程序(无输入、鼠标和键盘) 我想在上述设备上显示谷歌日历。为了实现这一点,我构建了一个设置页面,用户可以在其中授权我的应用程序,我可以请求用户的日历。(可通过用户输入的任何设备上的web浏览器访问) 我现在的问题是,是否可以让登录在无输入设备上工作。两个站点(安装和非输入客户端站点)运行在同一url上 谢谢。我相信有多种方法可以实现这一目标。这只是我提出的一种方法,基于用简单的逻辑分解问题 您有两个设备,无输入设备和带输入设备。信息需要从有输入设

Im为用户无法与设备交互的设备编写客户端web应用程序(无输入、鼠标和键盘)

我想在上述设备上显示谷歌日历。为了实现这一点,我构建了一个设置页面,用户可以在其中授权我的应用程序,我可以请求用户的日历。(可通过用户输入的任何设备上的web浏览器访问)

我现在的问题是,是否可以让登录在无输入设备上工作。两个站点(安装和非输入客户端站点)运行在同一url上


谢谢。

我相信有多种方法可以实现这一目标。这只是我提出的一种方法,基于用简单的逻辑分解问题

您有两个设备,无输入设备和带输入设备。信息需要从有输入设备流向无输入设备。由于无输入设备无法允许用户输入此信息(duh!),因此信息需要通过服务器传输

所以你会有一个服务器

您需要一种方法将信息从用户的带输入设备发送到同一用户的无输入设备,而不是发送到其他用户的无输入设备。因此,在使用输入设备的情况下,您需要告诉服务器哪些设备不需要发送信息。这意味着您必须能够唯一地识别无输入设备

这可以通过多种方式实现。最简单的方法是生成一个足够长的加密随机数,比如256位,并在无输入设备上显示该数字。您可以以文本形式执行此操作,例如使用base 64,或者如果带有输入设备的设备具有摄像头,则可以将其显示为二维码。我们将其称为“设备标识符”(尽管严格来说它不是一个标识符,因为随着时间的推移,您可以生成多个标识符)

在带有输入设备的屏幕上输入(或扫描)该“设备标识符”。然后在with输入设备上通过OAuth授权代码授权流,直到您拥有授权代码为止。不要将其交换为访问令牌,而是将带有“设备标识符”的授权代码发送到服务器(显然是通过安全连接)

在没有输入设备的情况下,使用“设备标识符”(显然是通过安全连接)从服务器获取授权代码。由于无输入设备没有输入机制来确定何时获取该代码,因此它需要在一段时间内查找该代码。轮询是实现这一点的一种简单方法(尽管不是最有效的方法)

现在您在无输入设备上有了授权代码。将它从无输入设备交换为访问令牌和刷新令牌,就可以开始了。您有一个访问令牌,可以从无输入设备调用(Google)API


请注意,“设备标识符”不仅需要是唯一的,还必须几乎不可能猜测当前使用的设备标识符。否则,黑客可以轮询服务器以获取授权代码。256位的加密随机数满足这一要求。

首先:感谢您的努力!准确地说,我试图在非输入设备上显示用户谷歌日历。现在,我通过输入在设备上获得用户访问令牌,但是没有办法使用访问令牌创建与google的有效会话?创建会话的唯一方法是登录您的google帐户,并允许我的应用程序在非输入设备上运行…@ArEsiiX重新阅读我的答案,我(希望)已经澄清了一点。另外,如果您不确定我所说的“授权码”是什么意思,请特别阅读。