2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LINEのログインURLを作成する(AWS cognitoのOIDC対応時)

Posted at

LINEのログインURLを作成する

AWS cognitoのOIDCでLINEの連携は行ったものの、ログインのUIは自前のものを使用したいと考えた。
LINEのログインURLが欲しいが、SDKやAPIを使って取得する方法は見つけられなかったので、cognitoのホストされたUIに表示されているLINEログインURLを確認した。
※SDKやAPIでURLが提供されている場合は教えてください。

前提条件

・AWS cognitoとLINEは連携済みであること。AWS Cognito ユーザープールにLINEサインイン連携を設定するを参照。

結論

下記のような形となる

https://{APP_CLIENT_DOMAIN}.auth.ap-northeast-1.amazoncognito.com/oauth2/authorize?identity_provider={PROVIDER_NAME}&redirect_uri={CALLBACK_URL}&response_type=CODE&client_id={APP_CLIENT_ID}&scope=aws.cognito.signin.user.admin%20email%20openid%20profile

APP_CLIENT_DOMAIN:cognitoのユーザープールのアプリケーション統合で設定したドメイン名
PROVIDER_NAME:cognitoのユーザープールのサインインエクスペリエンスのフェデレ―テッドアイデンティティプロバイダーで設定したIDプロバイダー名
CALLBACK_URL:cognitoのユーザープールのアプリケーションに設定したホストされたUIに設定した許可されているコールバックURL
APP_CLIENT_ID:cognitoのユーザープールのアプリケーションのクライアントID
※カスタムドメインの場合、一部修正が必要かもしれません。

以下詳細

URLを確認する

ホストされたUIを確認する
cognitoのホストされたUI.png

aタグでリンクとなっているのでURLを確認する
cognitoホストされたUIのLINE部分.png

lambdaで実装

import json
import os
import uuid
import boto3

# LINEログインのコールバックURL
CALLBACK_URL = os.environ.get('LINE_CALLBACK_URL')
# cognitoのアプリケーションのクライアントID
APP_CLIENT_ID = os.environ.get('CLIENT_ID')
# cognitoのアプリケーションのドメイン名
APP_CLIENT_DOMAIN = os.environ.get('CLIENT_DOMAIN')

# ユーザーがログインするためのURLを生成する
def generate_login_url(state):
    login_url = f"https://{APP_CLIENT_DOMAIN}.auth.ap-northeast-1.amazoncognito.com/oauth2/authorize?identity_provider=LINE&redirect_uri={CALLBACK_URL}&response_type=CODE&client_id={APP_CLIENT_ID}&scope=aws.cognito.signin.user.admin%20email%20openid%20profile"
    return login_url

# Lambda関数のエントリーポイント
def lambda_handler(event, context):
    state = str(uuid.uuid4()) # 任意の文字列を指定
    login_url = generate_login_url(state)
    
    return {
        "statusCode": 200,
        "body": json.dumps({
            "login_url": login_url,
        }),
    }

作成したURLにアクセスする

作成したURLにアクセスすると下記のような画面となる。
LINEログイン画面.png

ログイン後は設定したコールバック関数が呼ばれる。

まとめ

ログインURLはstatusを固定値にしてしまえばURLが変わることはないためサーバーから返さなくても画面に固定値で埋め込むことは出来るかもしれない。
(statusは固定値でいいのか、nonceを設定した方がいいのかなど考慮する必要はある)
サーバーはREST APIで構築しようとして考えたため、そもそもログイン後のセッションなどはどうなるのかいまいちわかっていない。
これから試していきます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?