kos*_*sas 6 oauth youtube-api oauth-2.0 google-oauth youtube-data-api
这是我为youtube api获取访问令牌和刷新令牌的工作流程.我正在生成带参数的授权网址
access_type = offline,response_type = code,redirect_uri = uri,scope = scopes,state = state,client_id = id
从授权网址我收到验证码,然后我使用这些参数使用授权网址中的代码生成另一个网址来获取access_token和refresh_token
代码:code,client_id:CLIENT_ID,client_secret:CLIENT_SECRET,redirect_uri:serviceCallback,state:state.callback,grant_type:"authorization_code"
据我所知,用户应该只完成一次这个过程,然后它应该是自动的.我的问题是我总是需要完成授权,并且我总是获得新的access_token和refresh_token,而不是根据请求强制它.
这是我获取身份验证网址的代码部分
getAuthUrl: function(scopes, applicationCallback, serviceCallback, siteId,
selectChannel, websiteUrl) {
var requestedClientId = CLIENT_ID;
var scopess =
"https://www.googleapis.com/auth/yt-analytics.readonly https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/userinfo.email " +
scopes.replace(",", " ");
return "https://accounts.google.com/o/oauth2/auth?" +
"access_type=offline" +
"&response_type=code" +
/*"&approval_prompt=auto" +*/
"&redirect_uri=" + serviceCallback +
"&scope=" + scopes +
"&state=" + JSON.stringify({
service: NAME,
callback: applicationCallback,
scopes: scopes,
siteId: siteId,
selectChannel: selectChannel,
websiteUrl: websiteUrl
}) +
"&client_id=" + requestedClientId;
},
Run Code Online (Sandbox Code Playgroud)
从那里我得到代码并使用该代码,clientID和clientSecret来获取访问令牌和刷新令牌
getAuthTokens: function(code, state, res, serviceCallback) {
// Google oAuth endpoint
var endpoint = "https://www.googleapis.com/oauth2/v4/token";
const scopes = state.scopes.split(" ");
// Setup request data
var data = {
code: code,
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
redirect_uri: serviceCallback,
state: state.callback,
grant_type: "authorization_code"
};
request.post(endpoint).send(data).type('form').set('Accept',
'application/json').end(function(err, oAuthResponse) {});
},
Run Code Online (Sandbox Code Playgroud)
我使用了错误的端点url我将其更改为由youtube api文档提供的不同的一对一并从数据变量中删除了state参数但仍然无法解决问题
新端点网址
var endpoint = "https://accounts.google.com/o/oauth2/token";
Run Code Online (Sandbox Code Playgroud)
我现在真的很困惑,因为我没有强制授权,在谷歌应用程序部分,我的应用程序已经授权,它没有更新授权,这意味着它只是第一次授予权限,之后当我按下允许它没有什么都不做 OAuth应该检查我是否有刷新令牌,所以我的结论是我不完全理解它应该如何工作或我在某种程度上测试调试或测试模式下的所有内容,其中自动强制授权提示.
我会非常感谢任何帮助,因为我觉得我尝试了一切.
| 归档时间: |
|
| 查看次数: |
1629 次 |
| 最近记录: |