我的应用有一个Android客户端与我自己的后端服务器通信。我想使用Google API来处理用户授权(使用Google+帐户),这样用户就无需为我的应用注册单独的帐户。
通过遵循https://developers.google.com/+/web/signin/server-side-flow中的文档,我对身份验证流程的理解如下所示。我不确定它是否正确,因为它听起来像是为了我的目的而劫持Google API。
特别是,我对第3点表示怀疑。我交换了Google刷新令牌和访问令牌的访问代码,但我从不使用它们。交换的目的只是检查用户是否已获得Google的授权。听起来是否正确?如果没有,这样做的好方法是什么?
答案 0 :(得分:1)
在服务器上收到 access_token 后,请执行对Google服务器的cURL /网络请求。
例如(在PHP中):
<?php
$access_token = $_GET['access_token']; // Get the access token
$google_api_url = "https://www.googleapis.com/plus/v1/people/me?access_token=". $access_token; // Create Google API URL with access_token
$c = curl_init($google_api_url); // Create network request to the Google server
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($c); // Execute request and get the response from th Google server
var_dump($result); // Print the result
RESULT OUTPUT(以JSON格式):
如果access_token 有效
{
"kind": "plus#person",
"gender": "male",
"emails": [
{
"value": "arr.mohd@gmail.com",
"type": "account"
}
],
"objectType": "person",
"id": "101571740244190011262",
"displayName": "Rafique Mohammed",
"name": {
"familyName": "Mohammed",
"givenName": "Rafique"
},
"url": "https://plus.google.com/101571740244190011262",
"image": {
"url": "https://lh6.googleusercontent.com/-pxiRX5gNkWE/AAAAAAAAAAI/AAAAAAAAAEg/99WWMsH16P8/photo.jpg?sz=50",
"isDefault": false
},.... //etc
如果access_token 无效
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}