# OAuth 2.0 Client ## Provider Guide New providers may be created by copying the layout of an existing package. See the [list of providers](docs/providers/thirdparty.md) for good examples. When choosing a name for your package, please don’t use the `league` vendor prefix, as this implies that it is officially supported. You should use your own username as the vendor prefix, and prepend `oauth2-` to the package name to make it clear that your package works with OAuth2 Client. For example, if your GitHub username was "santa," and you were implementing the "giftpay" OAuth2 library, a good name for your composer package would be `santa/oauth2-giftpay`. ### Implementing your own provider If you are working with an oauth2 service not supported out-of-the-box or by an existing package, it is quite simple to implement your own. Simply extend [`League\OAuth2\Client\Provider\AbstractProvider`](src/Provider/AbstractProvider.php) and implement the required abstract methods: ```php abstract public function getBaseAuthorizationUrl(); abstract public function getBaseAccessTokenUrl(array $params); abstract public function getResourceOwnerDetailsUrl(AccessToken $token); abstract protected function getDefaultScopes(); abstract protected function checkResponse(ResponseInterface $response, $data); abstract protected function createResourceOwner(array $response, AccessToken $token); ``` Each of these abstract methods contain a docblock defining their expectations and typical behavior. Once you have extended this class, you can simply follow the [usage example in the README](README.md#usage) using your new `Provider`. If you wish to use the `Provider` to make authenticated requests to the service, you will also need to define how you provide the token to the service. If this is done via headers, you should override this method: ```php protected function getAuthorizationHeaders($token = null); ``` This package comes with a trait for implementing `Bearer` authorization. To use this, you just need to include the trait in your `Provider` class: ```php