我想知道谷歌主页帐户链接详细步骤(与OAuth)



我遵循这个链接:https://developers.google.com/assistant/smarthome/develop/implement-oauth

但有几件事我不明白。

首先,这是我所经历的。

  1. 账号链接添加(A)授权URL, (B)令牌URL

  2. 为OAuth部署spring启动服务器

    (A) Html文件&源代码如下(授权URL端)

    • oauth.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>google login</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
function press() {
var email = document.getElementById("email");
var id = document.getElementById("id");

$.ajax({
url: '/api/getMemberInfo.do',
async: true,
type: 'POST',
data:JSON.stringify({
email: id.value
}),
contentType: 'application/json',
dataType:"json",
success: function(res){
email.innerText = res.member_email;
},
error: function(res){
alert("error");
}
})
}
function getParam(sname) {
var params = location.search.substr(location.search.indexOf("?") + 1);
var sval = "";
params = params.split("&");
for (var i = 0; i < params.length; i++) {
temp = params[i].split("=");
if ([temp[0]] == sname) { sval = temp[1]; }
}
return sval;
}
window.onload = function(){
var client_id = document.getElementById("client_id");
var redirect_uri = document.getElementById("redirect_uri");
var state = document.getElementById("state");
var scope = document.getElementById("scope");
var response_type = document.getElementById("response_type");
var user_locale = document.getElementById("user_locale");
const url = window.location.href;
const urlParams = url.searchParams;
client_id.innerText = getParam("client_id");
redirect_uri.innerText = getParam("redirect_uri");
state.innerText = getParam("state");
scope.innerText = getParam("scope");
response_type.innerText = getParam("response_type");
user_locale.innerText = getParam("user_locale");
}
function redirect(){
var state = getParam("state");
var redirect_uri = getParam("redirect_uri");
var url = redirect_uri + "?code=asdf1234&state=" + state;
window.location.href = url;
}

</script>
</head>
<body>
<input type="text" id="id">
<input type="button" value="redirect" onclick="redirect()">
<table border="1">
<tr>
<th>client_id</th>
<td id="client_id"></td>
</tr>
<tr>
<th>redirect_uri</th>
<td id="redirect_uri"></td>
</tr>
<tr>
<th>state</th>
<td id="state"></td>
</tr>
<tr>
<th>scope</th>
<td id="scope"></td>
</tr>
<tr>
<th>response_type</th>
<td id="response_type"></td>
</tr>
<tr>
<th>user_locale</th>
<td id="user_locale"></td>
</tr>
</table>
</body>
</html>

[1]在这部分我有一个问题。

//who generate code parameter? (me? or google?) 
var url = redirect_uri + "?code=asdf1234&state=" + state;
window.location.href = url;

(B)/tokenExcange。do(令牌URL端)

indexController.java
@Controller
@ComponentScan({"com.ramax.ramaxloadtestserver"})
public class IndexController {

@Autowired
meberServiceImpl service;

@ResponseBody
@PostMapping("/tokenExcange.do")
public HashMap<String, String> tokenExcange(@RequestBody MultiValueMap<String, String> param) {
System.out.print(param.toString());
HashMap<String, String> map = new HashMap<String, String>();
map.put("token_type", "Bearer");
map.put("access_token", "dpvm9412");    // I write Any Value
map.put("refresh_token", "dpvm0217");   // I write Any Value
map.put("expires_in", "3600");

return map;
}
}

[2]在这部分我有第二个问题。

map.put("access_token", "dpvm9412");    // I write Any Value  <-- who make this token?
map.put("refresh_token", "dpvm0217");   // I write Any Value  <-- who make this token?

[3]第三个问题是,这真的是/tokenexchange的结束吗?要退货吗?

  1. 我做了与Google Home应用程序的链接帐户过程。

[4]但是我发现了这个错误。

{
"insertId": "16qlk2of7t19ol",
"jsonPayload": {
"syncLog": {
"syncs": [
{
"httpLatencyMsec": "553",
"status": "json_response_invalid_format",
"requestId": "17655534332433302029"
}
]
}
},
"resource": {
"type": "assistant_action_project",
"labels": {
"project_id": "hometrigger-7ec6d"
}
},
"timestamp": "2021-08-17T06:25:48.498293954Z",
"severity": "ERROR",
"logName": "projects/hometrigger-7ec6d/logs/assistant_smarthome%2Fassistant_smarthome_logs",
"receiveTimestamp": "2021-08-17T06:25:48.498293954Z"
}

我想知道那些问题的答案。[1], [2], [3], [4]

请帮助我,我很抱歉我的英语。

谢谢你看我的帖子。

[1] Google发送(生成)状态并重定向turl给合作伙伴,合作伙伴返回"code"谷歌。请参考以下链接了解更多信息https://developers.google.com/identity/account-linking/oauth-linking?oauth=code。

[2]伙伴生成这些值

[3]是的,一旦Google收到令牌,帐户链接就创建了。

[4]你没有正确处理同步意图。您需要返回正确的同步响应。

最新更新