当您注册Facebook应用程序时,您将获得
申请ID:123455678 应用密钥:hkjhkh3434hkklljk 申请秘密:jkjljlj1233455jk
对于OAuth 2,只有应用程序ID(a.k.a. client_id)和应用程序密钥(a.k.a.client_secret)是有用的。
想知道应用程序密钥的用途是什么?是出于后端目的吗?如果是,那么揭露的是什么。
答案 0 :(得分:2)
我只是在这里大声思考。
我想这仅用于向后兼容,特别是对于使用APP_KEY
的旧Facebook Connect实现和REST API。
正如您在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和 else 其余的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
肯定有向后兼容性!