Php 成功登录Google OAuth后,在整个应用程序中需要验证哪些会话变量

Php 成功登录Google OAuth后,在整个应用程序中需要验证哪些会话变量,php,oauth,oauth-2.0,google-oauth,google-login,Php,Oauth,Oauth 2.0,Google Oauth,Google Login,我已经在我的网站上实现了GoogleOAuth登录。用户使用其Google帐户登录,到达我的欢迎页面&现在在我的欢迎页面和其他后续页面/脚本上,我需要验证哪些变量,以验证和检查用户是否登录。现在我正在做这个: checklogin.php (using it in require_once in all my subsequent php scripts) if(isset ( $_SESSION['access_token'] )) { //logged in } else {

我已经在我的网站上实现了GoogleOAuth登录。用户使用其Google帐户登录,到达我的欢迎页面&现在在我的欢迎页面和其他后续页面/脚本上,我需要验证哪些变量,以验证和检查用户是否登录。现在我正在做这个:

checklogin.php (using it in require_once in all my subsequent php scripts)

if(isset ( $_SESSION['access_token'] ))
{

  //logged in 
}
else
{
   //NOT LOGGED IN

    header('location:login.php');

} 
我是否还需要检查访问令牌的值和任何其他安全变量,以使我的登录检查过程更加健壮?如果是,如何检查?还是这张支票就足够了?

摘自评论

$\u会话['access\u token']='foo'并运行它,然后我的条件将再次返回true,他将跳入我的网站并查看任何用户的所有私人数据

如果您真的担心有人会这样做,那么最好的做法是根据tokeninfo端点验证您的访问令牌

我真的不知道当你在浏览器中谈论会话变量时,你认为用户是如何做到这一点的。然而,浏览器黑客不是我的专长

用户信息端点

另一个选项是检查用户信息端点。所有identity Server都有此端点,该端点返回有关当前用户的信息。因为您正在请求配置文件范围,所以应该能够看到这一点

请求

GET www.googleapis.com/userinfo/v2/me 
Authorization: Bearer ya29.GluEBbGJOYKQ0gcDAFvU2iRKotG-a6MvbyNP6mUUk96RDKJHIFOR_RKiWxl8vQ01rbgy9lP_KmspvrHDzHMZ_
回应

{
  "family_name": "Lawton", 
  "name": "Linda Lawton", 
  "picture": "https://lh5.googleusercontent.com/-a1CWlFnA5xE/AAAAAAAAAAI/AAAAAAAAl1I/UcwPajZOuN4/photo.jpg", 
  "locale": "en", 
  "gender": "female", 
  "email": "xxx@gmail.com", 
  "link": "https://plus.google.com/+LindaLawton", 
  "given_name": "Linda", 
  "id": "7200475532672775346", 
  "verified_email": true
}

该id是我在google中的内部id

假设您使用的是php客户端库,它会为您处理所有这些,您有一个访问令牌,您应该很好。@DalmTo:Am使用google教程中给出的OAuth php登录过程。你需要什么特别的图书馆?这个问题很清楚。使用
if(isset($\u会话['access\u token'])&&$\u会话['access\u token'])){
检查用户是否经过身份验证。@DalmTo:am正在执行获取客户端id和密码的过程,然后在联机提供的库中使用这些id和密码,并完成此过程。将自动生成一个访问令牌,该令牌将在用于验证登录名的每个登录名上进行更改。@MonkeyZeus:那么你是说没有值检查,没有g、 这一切都是完全安全的吗?如果用户只是为了一个简单的黑客,请使用$\u SESSION['access\u token''在其php脚本中设置访问令牌='foo'并运行它,然后我的条件将再次返回true,他将跳入我的网站并查看任何用户的所有私人数据?好的,那么我使用什么来为每个用户分配特定的代码/用户id?它是谷歌个人资料id,但必须与所有程序员一起使用there@DalmTo:好的,很好。谷歌API有什么独特之处吗我可以使用每个用户的圈数从我的数据库中分别获取每个用户的数据,并唯一标识我的用户?@DalmTo:另外,根据您的回答,您的意思是我们可以交叉检查访问令牌的值?取决于您正在验证的作用域(假设您也正在获取id_令牌),您可以它是一个jwt.io,里面有一个用户id,这是谷歌的内部用户id。但是这取决于你的作用域。不同的api也有能力获得用户的电子邮件地址。我通常不会费心验证访问令牌。我通常只需向api发出请求,如果它能工作,那么我知道它很好。我基本上信任谷歌e、 但您可以使用令牌信息检查其是否有效endpoint@DalmTo:是的,我也正在获取id_令牌..以下内容:expires_in,id_令牌的格式为:a.b.c-d-e-xx-xxxx-xxxx-xxxx-xxxx-xxxx,令牌类型:承载,创建:1521552493,我的范围代码为:$client->addScope(“电子邮件”);$client->addScope(“简介”);