OAuth2Provider
extends OAuthProvider
in package
implements
OAuth2Interface
Implements an abstract OAuth2 provider with all methods required by the OAuth2Interface.
It also implements the ClientCredentials, CSRFToken and TokenRefresh interfaces in favor over traits.
Tags
Table of Contents
Interfaces
- OAuth2Interface
- Specifies the basic methods for an OAuth2 provider.
Constants
- MAGIC_PROPERTIES = ['apiDocs', 'apiURL', 'applicationURL', 'serviceName', 'userRevokeURL']
Properties
- $accessTokenURL : string
- the provider's access token exchange URL
- $apiDocs : string|null
- an optional link to the provider's API docs (magic)
- $apiURL : string
- the API base URL (magic)
- $applicationURL : string|null
- an optional URL to the provider's credential registration/application page (magic)
- $authURL : string
- the authentication URL
- $clientCredentialsTokenURL : string|null
- An optional client credentials token endpoint in case the provider supports ClientCredentials.
- $http : ClientInterface
- $logger : LoggerInterface
- $options : OAuthOptions|SettingsContainerInterface
- $refreshTokenURL : string
- An optional refresh token endpoint in case the provider supports TokenRefresh.
- $requestFactory : RequestFactoryInterface
- $revokeURL : string
- an optional URL for application side token revocation
- $serviceName : string
- the name of the provider/class (magic)
- $storage : OAuthStorageInterface
- $streamFactory : StreamFactoryInterface
- $uriFactory : UriFactoryInterface
- $userRevokeURL : string|null
- an optional link to the page where a user can revoke access tokens (magic)
Methods
- __construct() : mixed
- OAuthProvider constructor.
- __get() : string|null
- Magic getter for the properties specified in self::ALLOWED_PROPERTIES
- getAccessToken() : AccessToken
- Obtains an OAuth2 access token with the given $code, verifies the $state if the provider implements the CSRFToken interface, and returns an AccessToken object
- getAccessTokenFromStorage() : AccessToken
- Gets an access token from the current OAuthStorageInterface (shorthand/convenience)
- getAuthURL() : UriInterface
- getClientCredentialsToken() : AccessToken
- getRequestAuthorization() : RequestInterface
- getStorage() : OAuthStorageInterface
- Returns the current OAuthStorageInterface
- InvalidateAccessToken() : bool
- me() : ResponseInterface
- Returns information about the currently authenticated user (usually a /me or /user endpoint).
- refreshAccessToken() : AccessToken
- request() : ResponseInterface
- Prepares an API request to $path with the given parameters, gets authorization, fires the request and returns a PSR-7 ResponseInterface with the corresponding API response
- sendRequest() : ResponseInterface
- setLogger() : static
- Sets an optional PSR-3 LoggerInterface
- setRequestFactory() : static
- Sets an optional PSR-17 RequestFactoryInterface
- setStorage() : static
- Sets an optional OAuthStorageInterface
- setStreamFactory() : static
- Sets an optional PSR-17 StreamFactoryInterface
- setUriFactory() : static
- Sets an optional PSR-17 UriFactoryInterface
- storeAccessToken() : static
- Sets an access token in the current OAuthStorageInterface (shorthand/convenience)
- cleanBodyParams() : array<string|int, mixed>
- Cleans an array of body parameters
- cleanQueryParams() : array<string|int, mixed>
- Cleans an array of query parameters
- construct() : void
- A replacement constructor that you can call in extended classes, so that you don't have to implement the monstrous original `__construct()`
- createAccessToken() : AccessToken
- Creates an access token with the provider set to $this->serviceName
- getAccessTokenRequestBodyParams() : array<string|int, mixed>
- prepares the request body parameters for the access token request
- getAuthURLRequestParams() : array<string|int, mixed>
- prepares the query parameters for the auth URL
- getClientCredentialsTokenRequestBodyParams() : array<string|int, mixed>
- prepares the request body parameters for the client credentials token request
- getRefreshAccessTokenRequestBodyParams() : array<string|int, mixed>
- prepares the request body parameters for the token refresh
- getRequestBody() : StreamInterface
- Prepares the request body
- getRequestHeaders() : array<string|int, mixed>
- Prepare request headers
- getRequestTarget() : string
- Determine the request target from the given URI (path segment or URL) with respect to $apiURL, anything except host and path will be ignored, scheme will always be set to "https".
- getRequestURL() : string
- Prepares the request URL
- getTokenResponseData() : array<string|int, mixed>
- extracts the data from the access token response and returns an array with the key->value pairs contained
- nonce() : string
- returns a 32 byte random string (in hexadecimal representation) for use as a nonce
- parseTokenResponse() : AccessToken
- Parses the response from a request to the token endpoint
- sendAccessTokenRequest() : ResponseInterface
- sends a request to the access/refresh token endpoint $url with the given $body as form data
- sendClientCredentialsTokenRequest() : ResponseInterface
- sends a request to the client credentials endpoint, using basic authentication
Constants
MAGIC_PROPERTIES
protected
array<string|int, string>
MAGIC_PROPERTIES
= ['apiDocs', 'apiURL', 'applicationURL', 'serviceName', 'userRevokeURL']
Properties
$accessTokenURL
the provider's access token exchange URL
protected
string
$accessTokenURL
$apiDocs
an optional link to the provider's API docs (magic)
protected
string|null
$apiDocs
= null
$apiURL
the API base URL (magic)
protected
string
$apiURL
$applicationURL
an optional URL to the provider's credential registration/application page (magic)
protected
string|null
$applicationURL
= null
$authURL
the authentication URL
protected
string
$authURL
$clientCredentialsTokenURL
An optional client credentials token endpoint in case the provider supports ClientCredentials.
protected
string|null
$clientCredentialsTokenURL
= null
If the provider supports client credentials and $clientCredentialsTokenURL is null, $accessTokenURL will be used instead.
$http
protected
ClientInterface
$http
$logger
protected
LoggerInterface
$logger
= new NullLogger()
$options
protected
OAuthOptions|SettingsContainerInterface
$options
$refreshTokenURL
An optional refresh token endpoint in case the provider supports TokenRefresh.
protected
string
$refreshTokenURL
If the provider supports token refresh and $refreshTokenURL is null, $accessTokenURL will be used instead.
Tags
$requestFactory
protected
RequestFactoryInterface
$requestFactory
$revokeURL
an optional URL for application side token revocation
protected
string
$revokeURL
Tags
$serviceName
the name of the provider/class (magic)
protected
string
$serviceName
$storage
protected
OAuthStorageInterface
$storage
= new MemoryStorage()
$streamFactory
protected
StreamFactoryInterface
$streamFactory
$uriFactory
protected
UriFactoryInterface
$uriFactory
$userRevokeURL
an optional link to the page where a user can revoke access tokens (magic)
protected
string|null
$userRevokeURL
= null
Methods
__construct()
OAuthProvider constructor.
public
__construct(OAuthOptions|SettingsContainerInterface $options, ClientInterface $http, RequestFactoryInterface $requestFactory, StreamFactoryInterface $streamFactory, UriFactoryInterface $uriFactory[, OAuthStorageInterface $storage = new MemoryStorage() ][, LoggerInterface $logger = new NullLogger() ]) : mixed
Parameters
- $options : OAuthOptions|SettingsContainerInterface
- $http : ClientInterface
- $requestFactory : RequestFactoryInterface
- $streamFactory : StreamFactoryInterface
- $uriFactory : UriFactoryInterface
- $storage : OAuthStorageInterface = new MemoryStorage()
- $logger : LoggerInterface = new NullLogger()
__get()
Magic getter for the properties specified in self::ALLOWED_PROPERTIES
public
final __get(string $name) : string|null
Parameters
- $name : string
Return values
string|nullgetAccessToken()
Obtains an OAuth2 access token with the given $code, verifies the $state if the provider implements the CSRFToken interface, and returns an AccessToken object
public
getAccessToken(string $code[, string|null $state = null ]) : AccessToken
Parameters
- $code : string
- $state : string|null = null
Tags
Return values
AccessTokengetAccessTokenFromStorage()
Gets an access token from the current OAuthStorageInterface (shorthand/convenience)
public
getAccessTokenFromStorage() : AccessToken
Tags
Return values
AccessTokengetAuthURL()
public
getAuthURL([array<string|int, mixed>|null $params = null ][, array<string|int, string>|null $scopes = null ]) : UriInterface
Parameters
- $params : array<string|int, mixed>|null = null
- $scopes : array<string|int, string>|null = null
Tags
Return values
UriInterfacegetClientCredentialsToken()
public
getClientCredentialsToken([array<string|int, string>|null $scopes = null ]) : AccessToken
Parameters
- $scopes : array<string|int, string>|null = null
Tags
Return values
AccessTokengetRequestAuthorization()
public
getRequestAuthorization(RequestInterface $request[, AccessToken|null $token = null ]) : RequestInterface
Parameters
- $request : RequestInterface
- $token : AccessToken|null = null
Tags
Return values
RequestInterfacegetStorage()
Returns the current OAuthStorageInterface
public
final getStorage() : OAuthStorageInterface
Tags
Return values
OAuthStorageInterfaceInvalidateAccessToken()
public
InvalidateAccessToken([AccessToken|null $token = null ]) : bool
Parameters
- $token : AccessToken|null = null
Tags
Return values
boolme()
Returns information about the currently authenticated user (usually a /me or /user endpoint).
public
me() : ResponseInterface
Tags
Return values
ResponseInterfacerefreshAccessToken()
public
refreshAccessToken([AccessToken|null $token = null ]) : AccessToken
Parameters
- $token : AccessToken|null = null
Tags
Return values
AccessTokenrequest()
Prepares an API request to $path with the given parameters, gets authorization, fires the request and returns a PSR-7 ResponseInterface with the corresponding API response
public
request(string $path[, array<string|int, mixed>|null $params = null ][, string|null $method = null ][, StreamInterface|array<string|int, mixed>|string|null $body = null ][, array<string|int, mixed>|null $headers = null ][, string|null $protocolVersion = null ]) : ResponseInterface
Parameters
- $path : string
- $params : array<string|int, mixed>|null = null
- $method : string|null = null
- $body : StreamInterface|array<string|int, mixed>|string|null = null
- $headers : array<string|int, mixed>|null = null
- $protocolVersion : string|null = null
Tags
Return values
ResponseInterfacesendRequest()
public
final sendRequest(RequestInterface $request) : ResponseInterface
Parameters
- $request : RequestInterface
Tags
Return values
ResponseInterfacesetLogger()
Sets an optional PSR-3 LoggerInterface
public
final setLogger(LoggerInterface $logger) : static
Parameters
- $logger : LoggerInterface
Tags
Return values
staticsetRequestFactory()
Sets an optional PSR-17 RequestFactoryInterface
public
final setRequestFactory(RequestFactoryInterface $requestFactory) : static
Parameters
- $requestFactory : RequestFactoryInterface
Tags
Return values
staticsetStorage()
Sets an optional OAuthStorageInterface
public
final setStorage(OAuthStorageInterface $storage) : static
Parameters
- $storage : OAuthStorageInterface
Tags
Return values
staticsetStreamFactory()
Sets an optional PSR-17 StreamFactoryInterface
public
final setStreamFactory(StreamFactoryInterface $streamFactory) : static
Parameters
- $streamFactory : StreamFactoryInterface
Tags
Return values
staticsetUriFactory()
Sets an optional PSR-17 UriFactoryInterface
public
final setUriFactory(UriFactoryInterface $uriFactory) : static
Parameters
- $uriFactory : UriFactoryInterface
Tags
Return values
staticstoreAccessToken()
Sets an access token in the current OAuthStorageInterface (shorthand/convenience)
public
storeAccessToken(AccessToken $token) : static
Parameters
- $token : AccessToken
Tags
Return values
staticcleanBodyParams()
Cleans an array of body parameters
protected
cleanBodyParams(iterable<string|int, mixed> $params) : array<string|int, mixed>
Parameters
- $params : iterable<string|int, mixed>
Return values
array<string|int, mixed>cleanQueryParams()
Cleans an array of query parameters
protected
cleanQueryParams(iterable<string|int, mixed> $params) : array<string|int, mixed>
Parameters
- $params : iterable<string|int, mixed>
Return values
array<string|int, mixed>construct()
A replacement constructor that you can call in extended classes, so that you don't have to implement the monstrous original `__construct()`
protected
construct() : void
createAccessToken()
Creates an access token with the provider set to $this->serviceName
protected
createAccessToken() : AccessToken
Tags
Return values
AccessTokengetAccessTokenRequestBodyParams()
prepares the request body parameters for the access token request
protected
getAccessTokenRequestBodyParams(string $code) : array<string|int, mixed>
Parameters
- $code : string
Return values
array<string|int, mixed>getAuthURLRequestParams()
prepares the query parameters for the auth URL
protected
getAuthURLRequestParams(array<string|int, mixed> $params, array<string|int, mixed> $scopes) : array<string|int, mixed>
Parameters
- $params : array<string|int, mixed>
- $scopes : array<string|int, mixed>
Return values
array<string|int, mixed>getClientCredentialsTokenRequestBodyParams()
prepares the request body parameters for the client credentials token request
protected
getClientCredentialsTokenRequestBodyParams(array<string|int, string>|null $scopes) : array<string|int, mixed>
Parameters
- $scopes : array<string|int, string>|null
Return values
array<string|int, mixed>getRefreshAccessTokenRequestBodyParams()
prepares the request body parameters for the token refresh
protected
getRefreshAccessTokenRequestBodyParams(string $refreshToken) : array<string|int, mixed>
Parameters
- $refreshToken : string
Return values
array<string|int, mixed>getRequestBody()
Prepares the request body
protected
getRequestBody(StreamInterface|array<string|int, mixed>|string $body, RequestInterface $request) : StreamInterface
Parameters
- $body : StreamInterface|array<string|int, mixed>|string
- $request : RequestInterface
Tags
Return values
StreamInterfacegetRequestHeaders()
Prepare request headers
protected
getRequestHeaders([array<string|int, mixed>|null $headers = null ]) : array<string|int, mixed>
Parameters
- $headers : array<string|int, mixed>|null = null
Return values
array<string|int, mixed>getRequestTarget()
Determine the request target from the given URI (path segment or URL) with respect to $apiURL, anything except host and path will be ignored, scheme will always be set to "https".
protected
getRequestTarget(string $uri) : string
Throws if the host of a given URL does not match the host of $apiURL.
Parameters
- $uri : string
Tags
Return values
stringgetRequestURL()
Prepares the request URL
protected
getRequestURL(string $path[, array<string|int, mixed>|null $params = null ]) : string
Parameters
- $path : string
- $params : array<string|int, mixed>|null = null
Return values
stringgetTokenResponseData()
extracts the data from the access token response and returns an array with the key->value pairs contained
protected
getTokenResponseData(ResponseInterface $response) : array<string|int, mixed>
we don't bother checking the content type here as it's sometimes vendor specific, not set or plain wrong: the spec mandates a JSON body which is what almost all providers send - weird exceptions:
- mixcloud sends JSON with a "text/javascript" header
- deezer sends form-data with a "text/html" header (???)
- silly amazon sends gzip compressed data... (handled by decodeJSON)
Parameters
- $response : ResponseInterface
Tags
Return values
array<string|int, mixed>nonce()
returns a 32 byte random string (in hexadecimal representation) for use as a nonce
protected
nonce([int $bytes = 32 ]) : string
Parameters
- $bytes : int = 32
Tags
Return values
stringparseTokenResponse()
Parses the response from a request to the token endpoint
protected
parseTokenResponse(ResponseInterface $response) : AccessToken
Parameters
- $response : ResponseInterface
Tags
Return values
AccessTokensendAccessTokenRequest()
sends a request to the access/refresh token endpoint $url with the given $body as form data
protected
sendAccessTokenRequest(string $url, array<string|int, mixed> $body) : ResponseInterface
Parameters
- $url : string
- $body : array<string|int, mixed>
Return values
ResponseInterfacesendClientCredentialsTokenRequest()
sends a request to the client credentials endpoint, using basic authentication
protected
sendClientCredentialsTokenRequest(string $url, array<string|int, mixed> $body) : ResponseInterface
Parameters
- $url : string
- $body : array<string|int, mixed>