Authenticator.php 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <?php
  2. namespace fphammerle\yii2\auth\clientcert;
  3. class Authenticator extends \yii\base\Component
  4. {
  5. public function init()
  6. {
  7. parent::init();
  8. $this->loginByClientCertficiate();
  9. }
  10. /**
  11. * @see \yii\web\User::switchIdentity
  12. * @return IdentityInterface|null
  13. */
  14. public function loginByDistinguishedName($dn, $duration = 0)
  15. {
  16. $subj = Subject::findByDistinguishedName($dn);
  17. if($subj) {
  18. \Yii::$app->user->switchIdentity($subj->identity, $duration);
  19. if(\Yii::$app->user->identity == $subj->identity) {
  20. return $subj->identity;
  21. } else {
  22. return null;
  23. }
  24. } else {
  25. return null;
  26. }
  27. }
  28. /**
  29. * @return IdentityInterface|null
  30. */
  31. public function loginByClientCertficiate()
  32. {
  33. if(isset($_SERVER['SSL_CLIENT_VERIFY'])
  34. && $_SERVER['SSL_CLIENT_VERIFY'] == 'SUCCESS') {
  35. // Subject DN in client certificate
  36. return $this->loginByDistinguishedName($_SERVER["SSL_CLIENT_S_DN"]);
  37. } else {
  38. return null;
  39. }
  40. }
  41. }