UserInfoController.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace OAuth2\OpenID\Controller;
  3. use OAuth2\Scope;
  4. use OAuth2\TokenType\TokenTypeInterface;
  5. use OAuth2\Storage\AccessTokenInterface;
  6. use OAuth2\OpenID\Storage\UserClaimsInterface;
  7. use OAuth2\Controller\ResourceController;
  8. use OAuth2\ScopeInterface;
  9. use OAuth2\RequestInterface;
  10. use OAuth2\ResponseInterface;
  11. /**
  12. * @see OAuth2\Controller\UserInfoControllerInterface
  13. */
  14. class UserInfoController extends ResourceController implements UserInfoControllerInterface
  15. {
  16. private $token;
  17. protected $tokenType;
  18. protected $tokenStorage;
  19. protected $userClaimsStorage;
  20. protected $config;
  21. protected $scopeUtil;
  22. public function __construct(TokenTypeInterface $tokenType, AccessTokenInterface $tokenStorage, UserClaimsInterface $userClaimsStorage, $config = array(), ScopeInterface $scopeUtil = null)
  23. {
  24. $this->tokenType = $tokenType;
  25. $this->tokenStorage = $tokenStorage;
  26. $this->userClaimsStorage = $userClaimsStorage;
  27. $this->config = array_merge(array(
  28. 'www_realm' => 'Service',
  29. ), $config);
  30. if (is_null($scopeUtil)) {
  31. $scopeUtil = new Scope();
  32. }
  33. $this->scopeUtil = $scopeUtil;
  34. }
  35. public function handleUserInfoRequest(RequestInterface $request, ResponseInterface $response)
  36. {
  37. if (!$this->verifyResourceRequest($request, $response, 'openid')) {
  38. return;
  39. }
  40. $token = $this->getToken();
  41. $claims = $this->userClaimsStorage->getUserClaims($token['user_id'], $token['scope']);
  42. // The sub Claim MUST always be returned in the UserInfo Response.
  43. // http://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse
  44. $claims += array(
  45. 'sub' => $token['user_id'],
  46. );
  47. $response->addParameters($claims);
  48. }
  49. }