我对使用 facebook 进行身份验证 oauth 过程的安全性表示怀疑。
我使用带有 javascript sdk 和 fb 按钮的 web 登录:
我成功获得了访问令牌并将其传递给服务器(调用 check_facebook_session.php)以对 Facebook Provider 进行 API 调用。在以下代码中,还有访问令牌的登录控制台。
一切正常!!!在服务器上,我使用 php sdk 通过 APPID、APPSECRET 和 ACCESS_TOKEN 调用 API REST:
** 现在我的问题是,我有安全问题吗?将令牌传递给服务器是一个坏主意吗?可以在没有 APP SECRET 的情况下使用客户端上可见的令牌来获取有关登录用户的信息?**
注意:服务器端应用程序的 Google+ 登录 使用步骤实现一次性代码流程:
- Include the Google+ script on your page.
- Add the sign-in button to your page.
- Sign in the user.
- Send the authorization code to the server.
as explained in: https://developers.google.com/+/web/signin/server-side-flow
与 js 客户端中的 facebook google 不同,它返回 CODE,而不是 ACCES TOKEN,服务器接收并使用它来请求 ACCESS TOKEN。
谢谢..
Following is the javascript code for facebook:
window.fbAsyncInit = function() {
FB.init({
appId : FACEBOOK_APP_ID, // App ID
status : true, // check login status
cookie : false, // enable/disable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.Event.subscribe('auth.authResponseChange', function(response)
{
if (response.status === 'connected')
{
var accessToken = FB.getAuthResponse()['accessToken'];
console.log(accessToken);
$.ajax({
type: 'POST',
url: check_facebook_session.php,
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
processData: false,
data: 'token=' + accessToken,
success: function(result)
{
if(result == 'SUCCESS'){window.location.href = fb_callback_url}
},
error: function(xhr)
{
alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText);
}
});
}
else if (response.status === 'not_authorized')
{
FB.login();
}
else
{
FB.login();
}
});
};
// Load the SDK asynchronously
.......
}(document));