> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> B2C IAM 実装における認証の仕組み。

# 認証 (B2C)

ユーザーにサービスを提供するには、そのユーザーが誰であるかを識別できなければなりません。このプロセスはユーザー認証と呼ばれます。ユーザーを認証する方法には、ソーシャルメディアアカウント、ユーザー名とパスワード、<Tooltip tip="パスワードレス: 第1要素としてパスワードに依存しない認証形式。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=passwordless">パスワードレス</Tooltip>など、さまざまなものがあります。また、ユーザー認証では、第1要素だけに頼らず、<Tooltip tip="パスワードレス: 第1要素としてパスワードに依存しない認証形式。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=multi-factor+authentication">多要素認証</Tooltip> (MFA) を有効にすることが推奨される場合も少なくありません。

<Info>
  ### ベストプラクティス

  ユーザーの認証方法を設計する際は、セキュリティとユーザー体験の両方を考慮することが重要です。複数の第1要素を用意したり、認証時に複数の要素を必須にしたりすることで、その両方を実現できます。
</Info>

機能やワークフローを検討する際には、考慮すべき点が数多くあります。

* ユーザーはどこで認証情報を入力しますか。
* ユーザーの認証情報をどのように安全に保ちますか。
* 認証システムをどのように維持しますか。
* ユーザーにパスワード認証をどのように提供しますか。
* 攻撃者がユーザーになりすましてログインしようとするのを、どのように防ぎますか。
* 異なる種類のアプリケーションで認証をどのように実装しますか。
* 異なる言語背景を持つユーザーに対して、ログインをどのように簡単にしますか。
* レガシー認証システムから移行する際に、優れたユーザー体験をどのように提供しますか。
* アプリケーションを Auth0 と統合する際には、何を考慮すべきですか。
* ユーザーは既存のソーシャルアカウント (たとえば Facebook や Google) を使ってログインできますか。
* 多要素認証を提供する必要がありますか。
* ユーザーが事前にログインする手段を持たないサービスがある場合、どうしますか。
* ある API の同じユーザーの<Tooltip tip="アクセストークン: API へのアクセスに使用される、不透明な文字列または JWT の形式の認可資格情報。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=access+token">アクセストークン</Tooltip>を、別の API に渡せますか。

Auth0 の[Universal Login](#universal-login)は、ユーザー ID／パスワード認証情報によるサインインを提供する場合でも、[Social Login](https://auth0.com/learn/social-login/)による、いわゆる Bring Your Own Identity のシナリオを許可する場合でも、ユーザーに安全で安心な体験を提供します。さらに、製品固有の[branding](/docs/ja-jp/get-started/architecture-scenarios/business-to-consumer/branding)要件がある場合でも、<Tooltip tip="Universal Login: アプリケーションは、ユーザーの本人確認のために、Auth0 の認可サーバーでホストされる Universal Login にリダイレクトされます。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Universal+Login">Universal Login</Tooltip>でログイン体験を一元化することには、ブランド認知の面での利点もあります。Universal Login で通常使用される Auth0 の UI ウィジェットは、異なる言語要件を持つユーザー向けの[internationalization](/docs/ja-jp/customize/internationalization-and-localization/universal-login-internationalization)を標準でサポートしています。また、[MFA](#multi-factor-authentication-mfa-)や[攻撃対策](#anomaly-detection)といった Auth0 の機能も標準でサポートしているため、攻撃者がユーザーアカウントにアクセスしようとするのを防ぐための対策を講じることができます。

ユーザー ID／パスワード認証情報によるサインインを許可すると、ユーザーがシステムにアクセスする際に、サードパーティーの<Tooltip tip="Identity Provider (IdP): デジタルアイデンティティを保存および管理するサービス。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=identity+providers">ID プロバイダー</Tooltip>の状態に依存せずに済みます。また、使用する認証情報を自社のポリシーに沿ったものにすることもできます。Auth0 は、ユーザー ID／パスワードによるログインを支援する複数の選択肢を提供しており、[guidance provided](#username-and-password-authentication)を読むことで、これらの選択肢をどのように活用できるかを理解できます。さらに、追加の第1認証要素として、どこかの段階で[social](#social-authentication)サポートを加えると、柔軟性が高まるだけでなく、さまざまなソーシャルログインの[providers](/docs/ja-jp/authenticate/identity-providers/social-identity-providers)がすでに保持している情報を活用することで、追加で質問しなくてもユーザー理解を深めるのに役立ちます。

既存のレガシーなアイデンティティストアがある場合は、[User Migration](/docs/ja-jp/get-started/architecture-scenarios/business-to-consumer/provisioning)もご覧ください。このセクションでは、安全性とセキュリティの観点から、Auth0 のマネージドアイデンティティストレージに移行するメリットを説明しています。

顧客向けアプリケーションでは、<Tooltip tip="OpenID: ログイン情報を収集・保存することなく、アプリケーションがユーザーの本人確認を行えるようにする認証のオープン標準。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=OpenID">OpenID</Tooltip> Connect ([OIDC](/docs/ja-jp/authenticate/protocols/openid-connect-protocol)) が最も広く使われている業界標準のプロトコルであり、Auth0 は OIDC をネイティブにサポートしています。Auth0 は、さまざまなアプリケーションを統合するための多様なアプローチをサポートしているため、適切な選択を行うために必要な情報については、[アプリケーション統合](#application-integration)のセクションをご覧ください。

ある API から別の API を呼び出す場合や、認証済みユーザーのコンテキストが存在しない状況、たとえば 1 つ以上の cron ジョブ、レポート生成ツール、または継続的インテグレーション／デリバリーシステムなどでは、`user`ではなく`application`を認可する方法が必要になります。これは 1 段階のプロセスで、アプリケーションを認証し (<Tooltip tip="Client ID: Auth0 から登録済みリソースに付与される識別値。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=client+ID">client ID</Tooltip> とシークレットを使用) 、その後 1 回の呼び出しで認可します。詳しくは、認可ワークストリームの [machine-to-machine (m2m) authorization](/docs/ja-jp/get-started/architecture-scenarios/business-to-consumer/authorization) をご覧ください。

<div id="universal-login">
  ## Universal Login
</div>

現在または将来的に、システム内で複数のアプリケーションを利用する予定はありますか。答えが「はい」であれば、サインイン体験を一元化することをおすすめします。複数のアプリケーション間でシームレスな <Tooltip tip="Single Sign-On (SSO): ユーザーが1つのアプリケーションにログインすると、その後ほかのアプリケーションにも自動的にログインされるサービス。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=Single+Sign-on">シングルサインオン</Tooltip> (SSO) を実現するには、認証のためにユーザーをリダイレクトする一元的な場所を用意することが非常に重要です。そうすることで、今後ソーシャル認証を追加したり、システムにサードパーティ製アプリケーションを組み込んだり、ユーザー向けに多要素認証をオプションまたは必須として導入したりする場合でも、一貫した体験を提供できます。さらに、ユーザー体験を向上させる新機能も、追加の開発工数をほとんど、あるいはまったくかけずに活用できるようになります。

<Info>
  ### ベストプラクティス

  複数のアプリケーションがある場合は、ユーザーを認証するために[一元的な場所](/docs/ja-jp/authenticate/login/auth0-universal-login)へリダイレクトするのがベストプラクティスです。Auth0 では、これは [Universal Login](/docs/ja-jp/authenticate/login/auth0-universal-login) を活用することを意味します。Universal Login では、[SSO](/docs/ja-jp/authenticate/single-sign-on) を含め、多くのセキュリティ面およびユーザー体験面での利点を追加実装なしですぐに利用できます。
</Info>

Auth0 Universal Login を使うと、ユーザー認証は短時間で簡単に行えるようになり、次の 3 つの手順で実現できます (これらはすべて Quickstarts で紹介されており、SDK が複雑さも吸収してくれます) 。

1. [アプリケーションからのリダイレクト](#application-integration)を、いつ、どのように行うかを決定します。
2. Auth0 の設定で、適切な[ブランド設定](/docs/ja-jp/get-started/architecture-scenarios/business-to-consumer/branding)やカスタマイズした HTML を設定します。
3. Authorization Server からの[レスポンスを受け取り処理する](#application-integration)ようにアプリケーションを設定します。

<div id="username-and-password-authentication">
  ## ユーザー名とパスワードによる認証
</div>

ほぼすべての B2C アプリケーションでは、顧客が新しい認証情報を作成できるようになっています。これは、ほとんどのユーザーにとってなじみのある一般的な認証方式です。

Auth0 では、ユーザー名とパスワードによる認証に複数の方式があります。既存のユーザー基盤を持たない新規開発のアプリケーションであれば、Auth0 の標準機能であるシンプルな [Database Connection](/docs/ja-jp/authenticate/database-connections) だけで、ユーザー認証を始めるために必要なものがすべて揃います。一方、独自のユーザーデータベースや既存の LDAP システムなど、レガシーなユーザーストアがある場合は、[User migration](/docs/ja-jp/get-started/architecture-scenarios/business-to-consumer/provisioning) に関するガイダンスで説明しているとおり、ユーザーを移行するためのいくつかの選択肢があります。

データベース接続にどのようにユーザーを登録する場合でも、それらのユーザーの認証方法はほぼ同じです。ユーザーに、ユーザー名とパスワードを入力するフォームを表示する必要があります。[Universal Login](#universal-login) に関するガイダンスでも述べたとおり、ユーザー名とパスワードでユーザーを認証する最も簡単かつ安全な方法は、ユーザーを一元化されたログインページにリダイレクトし、そこでユーザー名とパスワードを入力してもらうことです。これにより Auth0 は、ユーザーがすでに認証済みかどうかを判断し、不要な場合はログインフォーム自体を表示せずに済みます。

<Info>
  ### ベストプラクティス

  認証情報の収集を一元化されたログインページのみに限定することで、ユーザーの秘密情報が漏えいする可能性のある箇所を減らせます。また、不要に認証情報を収集する必要も少なくなります。詳しくは [Universal Login](#universal-login) を参照してください。
</Info>

<div id="application-integration">
  ## アプリケーション統合
</div>

ユーザーをどのように認証するかが決まったら、次はその認証をどのように開始するかを決めます。通常、アプリケーションごとに認証の開始地点は異なります。

<Warning>
  ネイティブモバイルアプリケーション (およびデスクトップアプリケーション) では、認証にシステムブラウザーを使用する必要があります。そうしないと、セキュリティリスクが増大するおそれがあります。詳しくは [Native Login](/docs/ja-jp/authenticate/login/native-login) を参照してください。
</Warning>

前述のとおり、顧客向けアプリケーションでは、多くのお客様が業界標準のプロトコルとして [OpenID Connect (OIDC)](/docs/ja-jp/authenticate/protocols/openid-connect-protocol) を使用しています。まず最初に行うべきことは、どの OIDCフロー を使うかを決めることです。そのため、まずは [grant mapping](/docs/ja-jp/get-started/applications/application-grant-types) のガイダンスを確認することをお勧めします。

アプリケーションの一部への匿名ユーザーのアクセスを許可する場合は、すぐにリダイレクトするのか、それとも必要になったときだけユーザーにリダイレクトを求めるのか (あるいはその両方を組み合わせるのか。詳しくは [Redirect Users After Login](/docs/ja-jp/authenticate/login/redirect-users-after-login) を参照してください) を判断する必要があります。ユーザーがサイトの保護されたバージョン (または領域) に [deep link](#deep-linking-to-protected-endpoints) できる場合は、どのアプリケーションへのリンクで Auth0 への自動リダイレクトが発生するのかを判断する必要があります。

<div id="anonymous-access">
  ### 匿名アクセス
</div>

ユーザーが初めてアプリケーションを訪れたときの体験を考慮することは重要です。アプリケーションが匿名ユーザーによるアクセスをサポートしている場合 (eコマースアプリケーションでは非常に一般的です) 、考慮すべきシナリオがいくつかあります。

* すでにログインしたことがあり、アプリケーションに再訪しているのか
* それとも今回が初めてこのアプリケーションにアクセスするのか

  * 同じAuth0 tenantを使用する別のアプリケーションにすでにアクセスしたことがあるか
  * このデバイスまたはブラウザーで認証したことがあるか (あるいは、長い間認証していないか)

匿名ユーザーがアプリケーションにアクセスした際、同じサービス群に属する別のアプリケーションにそのユーザーがすでにログインしているかどうかをアプリケーション側で検出できることや、アプリケーションが状態を持たない[SPA](/docs/ja-jp/quickstart/spa)であってもそのユーザーを記憶できることが望ましい場合はよくあります。たとえば、ユーザーがすでにログインしていると判断できれば、アプリケーションのUIヘッダーではログインボタンを表示せず、代わりにアカウントメニューやプロフィールメニューを表示するようにできます。これを実現するには、"[サイレント認証](/docs/ja-jp/authenticate/login/configure-silent-authentication)" を利用します。サイレント認証を使うと、ユーザーがログインしていない場合でもログインを求めることなく、ログイン済みかどうかを確認できます。必要であれば、その後アプリケーションでログインボタンを表示できます。一方、ユーザーがすでにログインしている場合はトークンを受け取れるため、あらためてログインボタンを表示する必要はありません。

<Warning>
  Auth0にリダイレクトしてログインセッションを確認する方法はアプリケーションにとって有用ですが、その結果としてリクエスト数が多くなる場合は、遅延やレート制限を避けるためにスロットリングの仕組みを導入してください。

  Management API の呼び出しには、[Auth0 Rate Limiting policy](/docs/ja-jp/troubleshoot/customer-support/operational-policies/rate-limit-policy)が適用されます。この点を考慮する必要があります。対応を容易にするため、Auth0では通常、APIを直接呼び出すのではなく、開発環境に適した[Auth0 SDK](/docs/ja-jp/libraries)を使用することを推奨しています。
</Warning>

<div id="deep-linking-to-protected-endpoints">
  ### 保護されたエンドポイントへのディープリンク
</div>

認証済みユーザーしかアクセスできないアプリケーション内の特定のページに、ユーザーが直接リンクするケースはさまざまです。アプリケーションでこれが可能な場合は、ユーザーが未認証であれば自動的に Auth0 にリダイレクトする必要があります。ユーザーが認証を完了し、<Tooltip tip="認可サーバー: ユーザーのアクセス範囲の境界を定義することに寄与する一元化されたサーバー。たとえば、認可サーバーはユーザーが利用できるデータ、タスク、機能を制御できます。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=authorization+server">認可サーバー</Tooltip>からアプリケーションに戻されたら、本来アクセスしようとしていた場所へ[リダイレクト](/docs/ja-jp/authenticate/login/redirect-users-after-login)できます。

<div id="best-practice">
  ### ベストプラクティス
</div>

最近の認証フレームワークの多くは、Auth0 のような認可サーバーへのリダイレクトに対応したミドルウェアをサポートしています。選定する際は、次の重要な点を考慮してください。

* コンフィデンシャルクライアント、非コンフィデンシャルクライアント、またはその両方への対応
* [ディスカバリーエンドポイント](/docs/ja-jp/get-started/applications/configure-applications-with-oidc-discovery "OIDC Discovery を使用してアプリケーションを設定する") 経由の設定、または明示的なインライン設定への対応
* 有効期限、署名、クレーム、スコープを含むトークン検証への対応
* 必要に応じた <Tooltip tip="リフレッシュトークン: ユーザーに再度ログインを求めることなく、新しいアクセストークンを取得するために使用されるトークンです。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Refresh+Tokens">リフレッシュトークン</Tooltip> への対応

<div id="authenticating-the-user">
  ### ユーザーの認証
</div>

認証とは、ユーザーの本人確認を行うプロセスです。OIDCにおける認証の結果は、<Tooltip tip="ID Token: リソースへのアクセスではなく、クライアント自体のための認証情報です。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=ID+Token">ID Token</Tooltip>です。このトークンにはユーザーに関する情報が含まれており、認可サーバーで定義された1つ以上の要素を使ってユーザーが認証した場合にのみ取得できるようにする必要があります (最も一般的なのは、[ユーザーIDとパスワード](#username-and-password-authentication)です) 。ID Token の取得に加えて、以下の点も考慮する必要がある場合があります。

* 共有APIを呼び出すために、[アクセストークン](/docs/ja-jp/secure/tokens/access-tokens) も必要ですか？
* アプリケーションはシングルページアプリケーションで、必要なのは [ID Token](/docs/ja-jp/secure/tokens/id-tokens) だけですか？ 詳しくは [Authorization Code Grant with PKCE](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce/call-your-api-using-the-authorization-code-flow-with-pkce) を参照してください。
* アプリケーションはネイティブアプリケーション (モバイルまたはデスクトップ) ですか？ また、[リフレッシュトークン](/docs/ja-jp/secure/tokens/refresh-tokens) は必要ですか？ 詳しくは [Authorization Code Grant with PKCE](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce/call-your-api-using-the-authorization-code-flow-with-pkce) を参照してください。

<Warning>
  本番環境に移行する前に、各アプリケーションについて、使用しているグラント **のみ** が [アプリケーションの設定](/docs/ja-jp/get-started/applications/update-grant-types) で有効になっていることを確認してください。
</Warning>

<div id="authorization-code-grant-with-or-without-pkce">
  ### 認可コードグラント (PKCE あり／なし)
</div>

お使いの SDK が Authorization Code grant のみをサポートしている場合や、アクセストークン または <Tooltip tip="リフレッシュトークン: ユーザーに再度ログインを求めることなく、新しい アクセストークン を取得するために使用されるトークン。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Refresh+Token">リフレッシュトークン</Tooltip> が必要な場合は、Authorization Code grant ([PKCE](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce) のあり／なし) を使って ID Token を取得することもできます。Authorization Code grant では、コードをトークンに交換するために追加の API 呼び出しが必要になるため、ID Token だけが必要な場合には、不必要なレイテンシが発生することがあります。多くの場合、ID Token への最適なアクセスを確保しつつ、アクセストークン と リフレッシュトークン を安全に取得するために Authorization Code grant のワークフローも活用できるよう、[ハイブリッドフロー](/docs/ja-jp/get-started/authentication-and-authorization-flow/hybrid-flow) が実装されます。

<Warning>
  Auth0 は、ID Token のみを必要とするブラウザベースのアプリケーションでの implicit grant の利用をサポートしていますが、[PKCE](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce) を使用する authorization code grant の利用を推奨しています。詳しくは、Auth0 Blog の [OAuth2 Implicit Grant and SPA](https://auth0.com/blog/oauth2-implicit-grant-and-spa/) を参照してください。

  ユーザーを再認証させることなく新しい アクセストークン または ID Token を取得できるようにするために [リフレッシュトークン](/docs/ja-jp/secure/tokens/refresh-tokens) が必要な場合は、[authorization code grant](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow/call-your-api-using-the-authorization-code-flow) を使用する必要があります。
</Warning>

<div id="attack-protection">
  ## 攻撃対策
</div>

認証システムが重要なのは、<Tooltip tip="Bad Actors: ビジネスや環境に脅威をもたらし、害を与える意図を持つ存在（個人または集団）。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=bad+actors">悪意のある者</Tooltip>が、本来アクセス権のないアプリケーションやユーザーデータにアクセスするのを防ぐためです。こうした悪意のある者が自社システムにアクセスできないよう、できるだけ多くの防御策を講じる必要があります。その最も簡単な方法の 1 つが、Auth0 の[攻撃対策](/docs/ja-jp/secure/attack-protection)が正しく設定されていることを確認することです。このトピックに関するガイダンスをぜひ一読し、適切に機能していることを確認してください。

<Info>
  ### ベストプラクティス

  異常検知は Auth0 がバックグラウンドで処理し、製品に優れたセキュリティ機能を提供します。これを利用する場合は、ユーザーへのメール配信を有効にする前に、[Email Provider](/docs/ja-jp/get-started/architecture-scenarios/business-to-consumer/operations#email-provider-setup) を設定し、[Email Templates](/docs/ja-jp/get-started/architecture-scenarios/business-to-consumer/branding#email-template-customization) を構成しておいてください。
</Info>

<div id="sso-with-legacy-systems">
  ## レガシーシステムとの SSO
</div>

大規模な再構築では、すべてのアプリケーションを一度に更新することが、常に可能であるとは限らず、現実的でもありません。実際、Auth0 との統合にあたっては、段階的に進めるアプローチを前提に計画することをベストプラクティスとして推奨しています。アプリケーションがすでにシングルサインオン (SSO) に対応しており、レガシーのアイデンティティシステムが OIDC や <Tooltip tip="Security Assertion Markup Language (SAML): パスワードなしで 2 者間の認証情報のやり取りを可能にする標準化されたプロトコル。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=SAML">SAML</Tooltip> のようなプロトコルをサポートしている場合は、Auth0 との統合を進めながら引き続き SSO を提供するために、いくつかの選択肢があります。

* レガシー SSO システム内の既存の ID プロバイダーを更新し、ログイン時に Auth0 にリダイレクトする (例: [SAML](/docs/ja-jp/authenticate/single-sign-on/outbound-single-sign-on/configure-auth0-saml-identity-provider) を使用) 、または
* Auth0 からレガシー SSO システムにリダイレクトしてログインさせる。この場合、Auth0 でレガシーシステムを IdP として設定する必要があります (つまり、[SAML](/docs/ja-jp/authenticate/protocols/saml/saml-sso-integrations/configure-auth0-saml-service-provider) または [OIDC](/docs/ja-jp/authenticate/identity-providers/social-identity-providers) を使用します) 。

<Info>
  ### ベストプラクティス

  レガシーシステムでの SSO エクスペリエンスをサポートすると複雑さは増しますが、Auth0 との統合を進める中で、よりシームレスなユーザー体験を実現するうえで、その価値がある場合があります。この方法を採る予定であれば、早い段階で計画しておくことで、実現可能性を確保しやすくなります。まだ中央集約型のサービスで SSO を提供していない場合は、それを追加する複雑さは、得られるメリットに見合わない可能性が高いでしょう。
</Info>

これは複雑なトピックであり、現在のレガシーアーキテクチャによっては追加の調査が必要になる可能性が高いため、現時点でレガシーシステムが SSO をサポートしている場合にのみ検討することをお勧めします。注: 現在、アプリケーションから中央集約型のシステムにリダイレクトしてユーザーを認証しており、そのシステムが、その中央集約型システムとのセッションがまだない場合にのみ認証情報を求めるのであれば、それはレガシー SSO の実装です。

<div id="social-authentication">
  ## ソーシャル認証
</div>

Facebook や Google などが提供する「自身の ID を持ち込む」シナリオは、セキュリティを損なうことなくユーザー認証の体験をシンプルにできる有効な方法です。[Universal Login](#universal-login) を使用すれば、[Social Connections](/docs/ja-jp/authenticate/identity-providers/social-identity-providers) のサポートも最小限の手間で簡単に追加し始められます。

<Warning>
  Auth0 では、[事前構成済みの開発者キー](/docs/ja-jp/authenticate/identity-providers/social-identity-providers/devkeys) を使ってソーシャル接続を簡単にテストできます。ただし、これらには[制限事項](/docs/ja-jp/authenticate/identity-providers/social-identity-providers/devkeys#limitations-of-developer-keys)があるため、本番環境に移行する前に、選択したソーシャルプロバイダーごとの[手順](/docs/ja-jp/authenticate/identity-providers/social-identity-providers)に従って、アプリケーション専用のキーを設定する必要があります。
</Warning>

[social](https://auth0.com/learn/social-login/) をサポートすると、ユーザーの ID と認証情報はソーシャルプロバイダーによって管理され、一部の ID クレームも同様に管理されます。Auth0 はそれらを使ってユーザーの[プロフィール](/docs/ja-jp/get-started/architecture-scenarios/business-to-consumer/profile-management)を作成します。さらに Auth0 は、Social Identity Providers (Social IdPs) の[アクセストークン](/docs/ja-jp/secure/tokens/access-tokens)も提供できるため、アプリケーションはユーザーに代わってサードパーティの Social IdP API を呼び出すこともできます。

<Info>
  ### ベストプラクティス

  ソーシャル認証は便利な機能ですが、サインイン方法を複数提供する場合は、顧客が実際に複数の方法を使ってサインインする可能性を考慮する必要があります。既定では、Auth0 では各ユーザー ID ごとに個別のユーザープロフィールが作成されるため、1 つのユーザープロフィールに複数の ID を関連付ける効果的な方法として、Auth0 の[ユーザーアカウントのリンク](/docs/ja-jp/manage-users/user-accounts/user-account-linking)機能の利用を検討するとよいでしょう。
</Info>

Auth0 の [Custom Social Connections extension](/docs/ja-jp/authenticate/identity-providers/social-identity-providers) を使うと、標準ではサポートされていない [OpenID Connect (OIDC)](/docs/ja-jp/authenticate/protocols/openid-connect-protocol) 準拠の任意のサードパーティベンダーにも接続でき、ソーシャル認証をさらに拡張できます。たとえば、政府発行 ID のプロバイダーである [SwissID](https://www.swissid.ch/) も、Custom Social Connection を使用して Auth0 で構成できます。

<div id="multi-factor-authentication-mfa">
  ## 多要素認証 (MFA)
</div>

ユーザー認証情報の悪用がかつてないほど増えている現在、ハッカーによる個人情報の窃取が日常的に発生しているなかで、システムを保護することは大きな課題です。しかし、その対策として特に効果的なのが、アカウント保護のための第 2 要素をユーザー自身で設定できるようにすることです。これは一般に [Multi-Factor Authentication](/docs/ja-jp/secure/multi-factor-authentication) と呼ばれます。これにより、たとえ別のアプリケーションから漏えいしたユーザー名とパスワードが使われた場合でも、正当なユーザー本人だけが自分のアカウントにアクセスできるようになります。

<Info>
  ### ベストプラクティス

  顧客向けアプリケーションでは、第 2 要素の利用を*強制*するのではなく、追加できる*選択肢*としてユーザーに提供するのが一般的です。詳しくは、[ユーザーに MFA を追加する選択肢を提供する](https://auth0.com/learn/multifactor-authentication-customers/) を参照してください。
</Info>

Auth0 は、ユーザーアカウントへのアクセスを保護するために MFA を有効にする複数の方法をサポートしており、さらに、柔軟な第 2 要素による保護を確実に提供するためのベストプラクティスもいくつかあります。

* Auth0 [Guardian](https://auth0.com/multifactor-authentication): プッシュ通知の送信機能と、リクエストを許可または拒否するためのアプリケーションを提供するサービスです。プッシュ通知は、ユーザーが事前登録したデバイス (通常はスマートフォンやタブレット) に送信され、ユーザーはボタンを押すだけでアカウントへのアクセスをすぐに許可または拒否できます。
* Time-based One-Time Password ([TOTP](https://auth0.com/blog/from-theory-to-practice-adding-two-factor-to-node-dot-js/)): Google Authenticator などのデバイスを登録すると、時間とともに変化するワンタイムパスワードが生成され、それを第 2 要素として入力してユーザーアカウントを検証できます。
* SMS: SMS でワンタイムコードを送信し、認証を完了する前にユーザーにその入力を求めます。
* Voice: 電話でワンタイムコードを伝え、認証を完了する前にユーザーにその入力を求めます。
* Duo: 多要素認証に Duo アカウントを使用できます。
* Email: 多要素認証にメールアカウントを使用できます。

Guardian や Google Authenticator などを使った MFA のワークフローは、通常、スマートフォンやタブレットで動作する別個のアプリケーションを通じて提供されますが、顧客に別のアプリケーションをダウンロードさせたくない場合に備えて、Auth0 は既存のモバイルアプリケーション内に第 2 要素のワークフローを組み込むために使用できる [SDK](https://auth0.com/blog/announcing-guardian-whitelabel-sdk/) も提供しています。

<div id="project-planning-guide">
  ## プロジェクト計画ガイド
</div>

推奨戦略の詳細を確認できるよう、ダウンロードして参照できるPDF形式の計画ガイドをご用意しています。

[B2C IAM プロジェクト計画ガイド](https://assets.ctfassets.net/cdy7uua7fh8z/3er1aEQ7Ul0q3c9leJWczR/b1f18b4c16abb7e78b01e4eb2b52bb8e/B2C_Project_Planning.pdf)
