1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
<?php /* * Copyright 2011 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
include_once __DIR__ . '/../vendor/autoload.php'; include_once "templates/base.php";
echo pageHeader("Retrieving An Id Token");
/************************************************* * Ensure you've downloaded your oauth credentials ************************************************/ if (!$oauth_credentials = getOAuthCredentialsFile()) { echo missingOAuth2CredentialsWarning(); return; }
/************************************************ * NOTICE: * The redirect URI is to the current page, e.g: * http://localhost:8080/idtoken.php ************************************************/ $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
$client = new Google_Client(); $client->setAuthConfig($oauth_credentials); $client->setRedirectUri($redirect_uri); $client->setScopes('email');
/************************************************ * If we're logging out we just need to clear our * local access token in this case ************************************************/ if (isset($_REQUEST['logout'])) { unset($_SESSION['id_token_token']); }
/************************************************ * If we have a code back from the OAuth 2.0 flow, * we need to exchange that with the * Google_Client::fetchAccessTokenWithAuthCode() * function. We store the resultant access token * bundle in the session, and redirect to ourself. ************************************************/ if (isset($_GET['code'])) { $token = $client->fetchAccessTokenWithAuthCode($_GET['code']); $client->setAccessToken($token);
// store in the session also $_SESSION['id_token_token'] = $token;
// redirect back to the example header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); }
/************************************************ If we have an access token, we can make requests, else we generate an authentication URL. ************************************************/ if ( !empty($_SESSION['id_token_token']) && isset($_SESSION['id_token_token']['id_token']) ) { $client->setAccessToken($_SESSION['id_token_token']); } else { $authUrl = $client->createAuthUrl(); }
/************************************************ If we're signed in we can go ahead and retrieve the ID token, which is part of the bundle of data that is exchange in the authenticate step - we only need to do a network call if we have to retrieve the Google certificate to verify it, and that can be cached. ************************************************/ if ($client->getAccessToken()) { $token_data = $client->verifyIdToken(); } ?>
<div class="box"> <?php if (isset($authUrl)): ?> <div class="request"> <a class='login' href='<?= $authUrl ?>'>Connect Me!</a> </div> <?php else: ?> <div class="data"> <p>Here is the data from your Id Token:</p> <pre><?php var_export($token_data) ?></pre> </div> <?php endif ?> </div>
<?= pageFooter(__FILE__) ?>
|