當你註冊,你得到一個Facebook應用程序什麼是Facebook應用程序的目的,關鍵
應用程序ID:123455678 應用的關鍵:hkjhkh3434hkklljk 應用祕密:jkjljlj1233455jk
是OAuth 2只應用ID(又名CLIENT_ID)和應用程序祕密(又稱client_secret)是有用的。
想知道應用程序密鑰的目的是什麼?這是爲了一些後端的目的嗎?如果是的話,那麼暴露點有什麼意義。
當你註冊,你得到一個Facebook應用程序什麼是Facebook應用程序的目的,關鍵
應用程序ID:123455678 應用的關鍵:hkjhkh3434hkklljk 應用祕密:jkjljlj1233455jk
是OAuth 2只應用ID(又名CLIENT_ID)和應用程序祕密(又稱client_secret)是有用的。
想知道應用程序密鑰的目的是什麼?這是爲了一些後端的目的嗎?如果是的話,那麼暴露點有什麼意義。
我只是想在這裏大聲。
我想這只是爲了向後兼容性,特別是舊的Facebook Connect實現和REST API,其中APP_KEY
被使用。
正如你可以在FB.init
Javascript的SDK看到:
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'YOUR APP ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
};
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
他們不提apiKey
這與新PHP-SDK使用的代碼。
現在,如果你去老connect-js example:
FB.init({ apiKey: '48f06bc570aaf9ed454699ec4fe416df' });
所以調試connect.facebook.net/en_US/all.js
文件(使用JSBeautifier):
FB.provide('', {
init: function (a) {
a = FB.copy(a || {}, {
logging: true,
status: true
});
FB._apiKey = a.appId || a.apiKey;
if (!a.logging && window.location.toString().indexOf('fb_debug=1') < 0) FB._logging = false;
FB.XD.init(a.channelUrl);
if (FB._apiKey) {
FB.Cookie.setEnabled(a.cookie);
a.session = a.session || FB.Cookie.load();
FB.Auth.setSession(a.session, a.session ? 'connected' : 'unknown');
if (a.status) FB.getLoginStatus();
}
if (a.xfbml) window.setTimeout(function() {
if (FB.XFBML) FB.Dom.ready(FB.XFBML.parse);
}, 0);
}
});
這裏你可以看到,它的檢查apiId
或apiKey
,然後存在試圖調用圖api和其他其餘api:
FB.provide('', {
api: function() {
if (typeof arguments[0] === 'string') {
FB.ApiServer.graph.apply(FB.ApiServer, arguments);
} else FB.ApiServer.rest.apply(FB.ApiServer, arguments);
}
});
和:
graph: function() {
var a = Array.prototype.slice.call(arguments),
f = a.shift(),
d = a.shift(),
c, e, b;
while (d) {
var g = typeof d;
if (g === 'string' && !c) {
c = d.toLowerCase();
} else if (g === 'function' && !b) {
b = d;
} else if (g === 'object' && !e) {
e = d;
} else {
FB.log('Invalid argument passed to FB.api(): ' + d);
return;
}
d = a.shift();
}
c = c || 'get';
e = e || {};
if (f[0] === '/') f = f.substr(1);
if (FB.Array.indexOf(FB.ApiServer.METHODS, c) < 0) {
FB.log('Invalid method passed to FB.api(): ' + c);
return;
}
FB.ApiServer.oauthRequest('graph', f, c, e, b);
},
rest: function (e, a) {
var c = e.method.toLowerCase().replace('.', '_');
if (FB.Auth && c === 'auth_revokeauthorization') {
var d = a;
a = function (f) {
if (f === true) FB.Auth.setSession(null, 'notConnected');
d && d(f);
};
}
e.format = 'json-strings';
e.api_key = FB._apiKey;
var b = FB.ApiServer._readOnlyCalls[c] ? 'api_read' : 'api';
FB.ApiServer.oauthRequest(b, 'restserver.php', 'get', e, a);
},
正如你可以在這裏看到,它與Old Rest API使用,閱讀文檔有:
的REST API支持OAuth 2.0用戶 以及舊的,定製 授權簽名方案。有關如何將您的 現有會話升級到OAuth 2.0的信息,請參閱 關於 的身份驗證升級指南。
所以APP_KEY
肯定是有的爲了向後兼容!
我認爲這是有道理的,它絕對是爲了向後兼容。我還注意到,註銷仍需要應用程序密鑰,例如,註銷一個調用`http://www.facebook.com/logout.php?api_key={application key}&; session_key = {oauth 2.0 code}「 ;對於_OAuth 2.0_兼容性,它應該是`http://www.facebook.com/logout.php?api_id={client_id}&;app_secret={client_secret}&;session_key={oauth 2.0 code};`或者只需`http://www.facebook。com/logout.php?session_key = {oauth 2.0 code};`看起來Facebook在實現OAuth 2.0方面不一致。 – user613343 2011-02-12 17:10:51