サインイン体験の説明
このページでは、Logto におけるサインイン体験とその設計理由について説明します。
はじめに
サインイン体験は、Logto におけるユーザー認証 (Authentication) プロセスです。このプロセスは次のように簡略化できます:
- あなたのアプリがサインインメソッドを呼び出します。
- ユーザーは Logto のサインインページにリダイレクトされます。ネイティブアプリの場合、システムブラウザが開かれます。
- ユーザーがサインインし、あなたのアプリにリダイレクトされます(Logto で「リダイレクト URI」として設定されています)。
プロセスはシンプルですが、リダイレクト部分が時には過剰に見えることがあります。しかし、多くの点で有益で安全です。以下のセクションでその理由を説明します。
なぜリダイレクトするのか?
柔軟性
リダイレクトにより、認証 (Authentication) プロセスをアプリから分離できます。ビジネスが成長しても、アプリを変更せずに同じ認証 (Authentication) プロセスを維持できます。例えば、多要素認証 (MFA) を追加したり、サインイン方法を変更したりすることができます。
複数アプリのサポート
複数のアプリがある場合、ユーザーは一度サインインすれば、再度サインインすることなくすべてのアプリにアクセスできます。これは、SaaS ビジネスや複数のサービスを持つ企業に特に有用です。
ネイティブアプリ
ネイティブアプリの場合、システムブラウザへのリダイレクトはユーザーを認証 (Authentication) するための安全な方法であり、iOS と Android の両方で組み込みサポートがあります。
- iOS:Apple は安全な認証 (Authentication) のために ASWebAuthenticationSession を提供しています。
- Android:Google はシームレスな体験のために Custom Tabs を提供しています。
セキュリティ
内部的には、Logto は OpenID Connect (OIDC) プロバイダーです。OIDC はユーザー認証 (Authentication) のための広く採用されている標準です。
Logto は、PKCE などの厳格なセキュリティ対策を強制し、インプリシットフローのような安全でないフローを無効にしています。リダイレクトはユーザーを認証 (Authentication) するための安全な方法であり、多くの一般的な攻撃を防ぐことができます。
アプリにサインインコンポーネントを表示する必要がある場合は?
時には、アプリ内に「Google でサインイン」ボタンのようなサインインコンポーネントを表示したい場合があります。これは、Logto の「ダイレクトサインイン」機能を使用することで実現できます。
どのように機能するのか?
アプリに「始める」と「Google でサインイン」の 2 つのコールトゥアクションボタンがあるとします。これらのボタンは次のように設計されています:
- 「始める」:通常のサインインページにリダイレクトします。
- 「Google でサインイン」:Google のサインインページにリダイレクトします。
どちらのアクションもサインインプロセスを完了し、アプリにリダイレクトする必要があります。
「始める」をクリックした場合のプロセス
この場合、サインイン体験はデフォルトと同じです。ユーザーは Logto のサインインページにリダイレクトされ、その後アプリに戻ります。
Logto でソーシャルサインイン方法(例:Google、Facebook)を設定している場合、ユーザーは対応するサインインページにリダイレクトされることがあります。図では、簡潔さのために一般的なフローのみを示しています。
「Google でサインイン」をクリックした場合のプロセス
この場合、ユーザーは Logto のサインインページと対話することなく、自動的に Google のサインインページにリダイレクトされます。この自動リダイレクトの速度はほぼ瞬時で、ユーザーはリダイレクトに気付かないかもしれません。
要するに、ダイレクトサインイン機能は、セキュリティレベルを変更せずにサインイン体験の一部の操作を自動化する方法です。
アプリでダイレクトサインインを使用する
ダイレクトサインインを使用するには、サインインメソッドを呼び出す際に direct_sign_in
パラメータを渡す必要があります。この値は、Logto が認識する特定の形式で構成されている必要があります。例えば、Google でサインインするには、値は social:google
である必要があります。
Logto の公式 SDK の一部には、ダイレクトサインイン用の専用オプションがあります。以下は、@logto/client
JavaScript SDK でダイレクトサインインを使用する例です:
client.signIn({
redirectUri: 'https://some-redirect-uri',
directSignIn: { method: 'social', target: 'google' },
});
詳細については、ダイレクトサインイン を参照してください。
この機能は、すべての Logto 公式 SDK で段階的に展開されています。SDK にこの機能が見当たらない場合は、お気軽にお問い合わせください。
ユーザーにアプリ内で資格情報を入力させる必要がある場合
ユーザーにアプリ内で直接資格情報(メールやパスワードなど)を入力させる必要がある場合、現時点ではお手伝いできません。歴史的には「リソースオーナーパスワード資格情報」グラントがありましたが、現在では安全でないとされ、OAuth 2.1 で正式に廃止されました。
ROPC グラントタイプのセキュリティリスクについて詳しく知るには、ブログ記事 ROPC グラントタイプを廃止すべき理由 をご覧ください。
関連リソース
OAuth 2.1 が登場:知っておくべきことPKCE とは何か:基本概念から深い理解まで