facebook应用程序密钥的用途是什么

时间:2011-02-11 16:29:00

标签: facebook key oauth-2.0

当您注册Facebook应用程序时,您将获得

申请ID:123455678 应用密钥:hkjhkh3434hkklljk 申请秘密:jkjljlj1233455jk

对于OAuth 2,只有应用程序ID(a.k.a. client_id)和应用程序密钥(a.k.a.client_secret)是有用的。

想知道应用程序密钥的用途是什么?是出于后端目的吗?如果是,那么揭露的是什么。

1 个答案:

答案 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);
    }
});

您可以在此处看到它正在检查是否存在apiIdapiKey,然后尝试调用图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肯定有向后兼容性!