---
name: "LWP::Authen::OAuth2::ServiceProvider::Line"
section: "3pm"
platform: "linux"
package: "liblwp-authen-oauth2-perl"
version: "0.20-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/LWP::Authen::OAuth2::ServiceProvider::Line"
---

# LWP::Authen::OAuth2::ServiceProvider::Line(3pm)

Access Line OAuth2 API v2

## NAME

LWP::Authen::OAuth2::ServiceProvider::Line - Access Line OAuth2 API v2

## VERSION

version 0.20

## SYNOPSIS

```
    my $oauth2 = LWP::Authen::OAuth2->new(
        service_provider => 'Line',
        redirect_uri     => 'http://example.com/',
        client_id        => 'line_client_id'      # Retrieved from https://developers.line.me/
        client_secret    => 'line_client_secret'  # Retrieved from https://developers.line.me/
    );
    my $url = $oauth2->authorization_url(state => $state);
    # ... Send user to authorization URL and get authorization $code ...
    $oauth2->request_tokens(code => $code);
    # Simple requests
    # User Info
    my $profile       = $oauth2->make_api_call('profile');
    my $userId        = $profile->{userId};
    my $displayName   = $profile->{displayName};
    my $pictureUrl    = $profile->{pictureUrl};
    my $statusMessage = $profile->{statusMessage};
    # Refresh
    $oauth2->refresh_access_token();
    # More complex requests...
    # Verify
    # Manually send the request using the internal user agent - see explanation in "Line API Documentation" below.
    my $access_token_str = $oauth2->access_token->access_token;
    my $res = $oauth2->user_agent->post($oauth2->api_url_base.'oauth/verify' => { access_token => $access_token_str });
    my $content = eval { decode_json($res->content) };
    my $scope      = $content->{scope};
    my $client_id  = $content->{client_id};
    my $expires_in = $content->{expires_in};
    # Revoke
    # Look up the internal refresh token - see explanation in "Line API Documentation" below.
    my $refresh_token_str = $oauth2->access_token->refresh_token;
    $oauth2->post($oauth2->api_url_base.'oauth/revoke' => { refresh_token => $refresh_token_str });
```

## REGISTERING

Individual users must have an account created with the Line application \<https://line.me/download\>.  In order to log in with OAuth2, users must register their email address. Device-specific instructions can be found on the Line support site \<https://help.line.me/\>.

API clients can follow the Line Login \<https://developers.line.me/line-login/overview\> documentation to set up the OAuth2 credentials.

## Line API Documentation

See the Line Social REST API Reference \<https://devdocs.line.me/en/#how-to-use-the-apis\>.

As of writing, there are two simple API calls: `"profile"` and `"refresh"`.

There are also `"verify"` and `"revoke"` endpoints, which require a bit more work.

- "verify"

  `"verify"` is designed for verifying pre-existing access tokens. Instead of using the `"Authorization"` header, this endpoint expects the access token to be form-urlencoded in the request body. Because of this, it's necessary to get access to the internal access token string to send in the request body. The LWP::Authen::OAuth2::ServiceProvider::Line::AccessToken token class used by this service provider provides the `"access_token"` accessor for this purpose.

  The server seems to ignore the `"Authorization"` header for this request, so including it is probably not a problem. If you want to avoid sending the access token in the header, it's necessary to manually construct the request and decode the response.

  See "SYNOPSIS" for usage examples.

- "revoke"

  `"revoke"` requires the refresh token to be form-urlencoded in the request body. Because of this, it's necessary to get access to the internal refresh token string to send in the request body. The LWP::Authen::OAuth2::ServiceProvider::Line::AccessToken token class used by this service provider provides the `"refresh_token"` accessor for this purpose. See "SYNOPSYS" for usage examples.

## Refresh timing

Line access tokens can be refreshed at any time up until 10 days after the access token expires. The LWP::Authen::OAuth2::ServiceProvider::Line::AccessToken token class used by this service provider extends the `"should_refresh"` method for this purpose, causing `"$oauth2->should_refresh()"` to return false if this 10-day period has lapsed.

## AUTHOR

Adam Millerchip, `"<adam at millerchip.net>"`

## AUTHORS

- •

  Ben Tilly, \<btilly at gmail.com\>

- •

  Thomas Klausner \<domm@plix.at\>

## COPYRIGHT AND LICENSE

This software is copyright (c) 2013 - 2022 by Ben Tilly, Rent.com, Thomas Klausner.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
