以下是我的工作流程,用於爲youtube API獲取訪問令牌和刷新令牌。 IM產生授權的URL與參數YOUTO oAuth每次提出請求時都會提示授權窗口
ACCESS_TYPE =離線,RESPONSE_TYPE =代碼,REDIRECT_URI = URI,範圍=範圍,狀態=狀態,CLIENT_ID = ID
從授權URL I'm接收認證碼,然後I'm生成另一URL獲得的access_token和使用代碼從與這些參數
代碼授權URL refresh_token:代碼,CLIENT_ID:CLIENT_ID,client_secret:cLIENT_SECRET,REDIRECT_URI:serviceCallback,狀態:state.callback,grant_typ e:「authorization_code」
據我所知用戶應該只完成一次該過程,然後它應該是自動的。我的問題是,我總是需要完成授權,並且我總是獲得新的access_token和refresh_token,而不會根據請求強制它。
這裏是I'm得到驗證網址
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;
},
從那裏即時得到回代碼並使用該代碼,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) {});
},
我使用了錯誤的端點url我將它改爲了youtube api文檔提供的不同的one-to-one,並從數據變量中刪除了狀態參數,但仍不能解決問題
新端點URL
var endpoint = "https://accounts.google.com/o/oauth2/token";
I'm真的,因爲現在我可不是強制許可,並在谷歌Apps部分,這正是我已經授權的應用程序,它不會更新授權,這意味着它授予權限只有第一個困惑時間和之後,當我按下允許它不會做任何事情。 OAuth應該檢查是否有刷新令牌,所以我的結論是,我不完全瞭解它應該如何工作,或者我在某種程度上以自動強制授權提示的調試或測試模式測試所有內容。
我會非常感謝任何形式的幫助,因爲我覺得我嘗試了一切。
您需要自行發佈代碼。您應該只在代碼中提示用戶身份驗證一次。一旦你有了一個刷新令牌,你就可以在你喜歡請求一個新的訪問令牌時使用它。您的問題可能與您在不需要時始終請求訪問用戶的事實有關。 – DaImTo