私はphpとZendを使用したWebサイト(siteAと呼びます)を持っています。別のサイト(SiteBと呼びます)から自分のサイト(SiteA)の制限された領域にアクセスするためのAPIを実装しようとしています。
SiteB の資格情報を使用して siteB のユーザーを認証し、ユーザーが API を介して認証された siteA への html iframe を使用できるようにしたいと考えています。
私は新しいので、正しい方向に向かっているかどうかはよくわかりません。
これまでのところ、安らかなAPIを使用することを考えていました.フレーム外ではユーザーは検証されますが、フレーム内ではユーザーは検証されません.
提案とヘルプ? そして、私のコードは次のとおりです。
----- SiteB ユーザー/index.php ----
<html>
<body>
<?php
$postdata = http_build_query(
array(
'userid' => 'someid',
'key' => 'somekey',
'public' => '1'
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
file_get_contents('https://www.siteA.com/api', false, $context);
?>
<iframe src="https://www.siteA.com/" width="950" height="700"></iframe>
</body>
</html>
----- サイト A ---------
<?php
class ApiController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->layout->disableLayout();
}
public function indexAction() {
if($this->getRequest()->isPost()){
$data = $this->_request->getPost();
$this->_authenticateApi($data);
}
else{
//error
}
}
public function _authenticateApi($data){
$db = Zend_Registry::get('db_local');
$authAdapter = new Zend_Auth_Adapter_DbTable($db);
$authAdapter->setTableName('sometable');
$authAdapter->setIdentityColumn('id');
$authAdapter->setCredentialColumn('key');
$authAdapter->setIdentity($data['id']);
$authAdapter->setCredential($data['key']);
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
if($data['public'] == "1"){
Zend_Session::rememberMe(1209600);
}else{
Zend_Session::forgetMe();
}
return true;
} else {
return false;
}
}