# アクセストークンを管理する

このトピックでは、以下のアクセストークン管理タスクの実行方法について説明します。

安全にログインを処理する

安全にユーザー登録およびログインを処理する方法については、「アプリとサーバーの間で安全なログインプロセスを構築する」を参照してください。

# アクセストークンを更新する

認可が成功すると、ユーザーの有効なアクセストークンがLINE SDKによって保存され、そのアクセストークンを使って、APIリクエストが実行されます。アクセストークンの有効期限は以下のようにして取得できます。

if let token = AccessTokenStore.shared.current {
    print("Token expires at:\(token.expiresAt)")
}

APIタイプを介してAPIリクエストが実行されるとき、有効期限が切れたアクセストークンは自動的に更新されます。ただし、アクセストークンが失効してから長期間が経過していると、更新操作は失敗します。その場合はエラーが発生し、ユーザーを再ログインさせる必要があります。詳しくは、「エラーを制御する」を参照してください。

アクセストークンの自動更新について

APIタイプのメソッドのみが、アクセストークンを自動的に更新します。そのほかのタイプ(例えばAPI.Authタイプ)のメソッドでは、アクセストークンは自動的に更新されません。

開発者自身でアクセストークンを更新しないことを推奨します。LINE SDKによってアクセストークンを自動的に管理させるほうが、将来のアップグレードを考えるとより簡単な方法です。ただし、必要に応じて、以下のようにしてアクセストークンを手動で更新できます。

API.Auth.refreshAccessToken { result in
    switch result {
    case .success(let token):
        print("Token Refreshed: \(token)")
    case .failure(let error):
        print(error)
    }
}

# 現在のアクセストークンを取得する

クライアントサーバーアプリケーションでは、アプリとサーバーの間でユーザー情報を送受信する際に、アクセストークンを使用してください。 アプリで取得したアクセストークンをサーバーに送信すると、サーバーでLINEログインAPIを呼び出すことができます。 LINEログインAPIについて詳しくは、『LINEログイン v2.1 APIリファレンス』を参照してください。

アプリでLINE SDKが保存しているアクセストークンを取得するには、共有AccessTokenStoreオブジェクトのcurrentプロパティを以下のように利用します。

if let token = AccessTokenStore.shared.current {
    print(token.value)
}
注意

サーバーにアクセストークンを送信するときは、トークンを暗号化し、暗号化したデータをSSLで送信することをお勧めします。サーバーで受信したアクセストークンと、LINEログインの呼び出しに使用するアクセストークンが一致すること、さらにLINEログインの呼び出しに使用するチャネルIDが自分のチャネルのIDと一致することも、検証する必要があります。

# アクセストークンを検証する

現在のアクセストークンの有効性を検証するには、API.Auth.verifyAccessTokenメソッドを呼び出します。結果が含まれるAccessTokenVerifyResultオブジェクトが返されます。検証に成功すると、レスポンスとしてchannelIDpermissions、およびexpiresInのようなプロパティが返されます。それ以外の場合は、トークンは無効、失効、または期限切れであり、エラーが返されます。

API.Auth.verifyAccessToken { result in
    switch result {
    case .success(let value):
        print(value.channelID) // Bound channel ID of the token.
        print(value.permissions) // The permissions of this token.
        print(value.expiresIn) // How long it is before the token expires.
    case .failure(let error):
        print(error)
    }
}