[英]OAuth2 - my access token is a server-side secret, yes, so how do I use it with AJAX?
我正在使用Brent Shaffer的OAuth2 for PHP( https://github.com/bshaffer/oauth2-server-php )
我这样调用内部API:
$data = $fc->callAPI($_SERVER['HTTP_HOST'] . '/api/v1/test-member-search.php',
$fc->internalAccessTokenForAPI(), null);
callAPI
需要url,令牌,数据,并且您可以看到,我有一种获取自己的令牌的方法。 callAPI
实际上只是一个cURL包装器:
public function callAPI($fullURL, $token, $data ) {
$headers = [
'Accept: */*',
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $token
];
if (!$data) { $data = ["data" => "none"]; }
// open connection
$ch = curl_init();
// set curl options
$options = [
CURLOPT_URL => $fullURL,
CURLOPT_POST => count($data),
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
];
curl_setopt_array($ch, $options);
// execute
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
OAuth2服务器可以使用Authorization标头,或者如果不正确,它可以在POST中检查access_token
。
因此,这就是我使用PHP访问API的方式,但如何进行AJAX调用,如下所示:
<script type="text/javascript">
$(document).ready(function() {
var request;
$("#searchform").submit(function (event) {
event.preventDefault();
var $form = $(this);
var serializedData = $form.serialize();
request = $.ajax({
url: "/api/v1/test-member-search.php",
type: "post",
data: serializedData
});
...
... other stuff
我的知识到此结束。 我可以通过简单地使用PHP从PHP会话中将令牌作为被称为access_token
的隐藏输入access_token
,或者可以将其包含在AJAX请求数据中,但这使访问令牌(具有1小时的寿命) )对浏览器客户端可见。
知道访问令牌可以进行API调用,那么如何通过AJAX调用API并隐藏令牌呢?
我了解您希望您的客户端(用户代理=浏览器)直接调用API,这很好。 在这种情况下,令牌确实在运行您的JS的浏览器选项卡中“可见”。
在这种情况下,您需要将标题“ Authorization:Bearer”添加到您的ajax请求中。
例如:
request = $.ajax({
url: "/api/v1/test-member-search.php",
type: "post",
headers: {
'Authorization': `Bearer ${accessToken}`
},
data: serializedData
});
必须仅在TLS(https)上执行此操作,否则攻击者可能会看到您的令牌。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.