パスキー
パスキーは、パスワードを入力する代わりに指紋、顔、デバイスのPINでサインインできるようにします。パスワードマネージャーやスマートフォンに保存され、元のサイトでのみ機能し、フィッシングや他での再利用はできない。Power Portals Proは、ReactとBlazorの両方でポータルのローカルアカウントにパスキーを追加します。ユーザーはアカウントページでパスキーを追加し、一つのステップでサインインできます。
パスキーのオフにする
パスキーはローカルアカウントがある場所(LocalAccountsEnabled、デフォルトでオン)に設置されています。パスキーはパスワードと同じように連絡先のために保管されるローカル認証情報です。パスキーを提供しないポータルの場合は、PasskeysEnabled on AuthClientOptionsをProgram.csでfalseするように設定してください。電源を切ると、サーバーはパスキールートの提供を停止し、パスキーサインインを拒否し、アカウントページにもパスキーが表示されなくなり、すでに保存済みのパスキーは使えなくなります。
builder.Services.Configure<AuthClientOptions>(options => options.PasskeysEnabled = false);
重要
パスキーはPower Portals Pro管理ソリューションが提供する
ppp_passkeyテーブルに保持されます。アカウントページでパスキーを提供する前にソリューションをインポートし、ポータルのアプリケーションユーザーがshipdされたアプリケーションユーザーロールを保持し、その権限がテーブル上で保持されていることを確認してください。
アカウントページで
プロジェクトテンプレートが生成するアカウントページは、ログインページにパスワードフォームの横にあるパスキーボタン付きのサインインボタン、プロフィールページのパスキーセクションでユーザーがパスキーを追加・変更・削除するページなどがあります。どちらもGET /api/auth/optionsから読み取るか、Blazor ServerのページでAuthClientOptions読みpasskeysEnabled、パスキーがオフのままは何も表示されません。
構成要素
両方のスタックにある2つのコンポーネントが作業を行っています。 PasskeySignInButton はユーザーが選んだパスキーでサインインし、パスキーを使えないブラウザでは何もレンダリングしません。 PasskeyManager サインインしたユーザーのパスキーを一覧にし、追加、名前変更、削除を可能にします。パスキーがオンの時のみ表示します。
反応してください
import { LoginResult } from '@powerportalspro/core';
import { PasskeyManager, PasskeySignInButton } from '@powerportalspro/react-fluent';
// On the sign-in page, when GET /api/auth/options reports passkeysEnabled
<PasskeySignInButton onResult={(result) => result === LoginResult.Success && navigate(returnUrl)} />
// On the signed-in user's account page
<PasskeyManager />
ブレイザー
@* On the sign-in page, when passkeys are on *@
<PasskeySignInButton ReturnUrl="@ReturnUrl" OnResult="OnPasskeyResult" />
@* On the signed-in user's account page *@
<PasskeyManager />
サインインすると、Blazorボタンで ReturnUrlページが新たに読み込まれ、すべてのページがユーザーがサインインしていると認識されます。 OnResult ページに、ロックアウトされたアカウントなど、ページ自身が処理する結果を渡します。セレモニーのブラウザ部分はコンポーネント独自のスクリプトで動作するため、Blazor Server、WebAssembly、Autoでも同様に動作します。
式の仕組み
各パスキー操作は2つのリクエストで構成されており、ASP.NET Core Identityのパスキーサポートに基づいて構築されています。最初のリクエストはブラウザが navigator.credentialsに渡したオプションを返し、2つ目はブラウザが応答した内容を返します。Identityはそれらの間のチャレンジをクッキーとして保持します。
- サインイン:
POST /api/auth/passkey/request-options、次にPOST /api/auth/passkey/login。は保存されている公開鍵とシグネチャを照合し、ユーザーにサインインします。どちらもサインインフォームのアドレスごとの制限にカウントされます。 - 管理:
GET /api/auth/manage/passkeysリストアップ;POST /api/auth/manage/passkeys/creation-optionsとPOST /api/auth/manage/passkeys一つ追加します;/renameと、言われた通りに/remove行います。Reactでは、AuthClient.signInWithPasskeyAsyncとcreatePasskeyAsyncが一つの通話で式全体を運営します。
セキュリティ
- PINや生体認証を確認するパスキーはそれ自体が2つの要素であり、パスキーサインインは認証コードを求めません。ロックアウトまたは未確認アカウントは、パスワードサインイン時と同様に拒否されます。
- パスキーは作成されたドメインでのみ機能します。ポータルが別のドメインに移動したり、ステージングスロットにホスト名がある場合、既存のパスキーはそこで機能しません。
IdentityPasskeyOptions.ServerDomainドメインのパスキーをピン留めするように設定してください。 ppp_passkeyは保護されたテーブルです。ロールやセキュリティロールが何を許可しても、ポータルリクエストは届きません。サインインコードとアカウントコードがアプリケーションとして読み書きします。それが保持するもの、つまり公開鍵とブラウザが署名したデータは秘密ではありません。- 管理者がユーザーになりすましてパスワードを変更することはできないため、ユーザーのパスキーを追加または削除することはできません。
- 内部ユーザーはMicrosoft Entra IDを通じてサインインし、パスキーは保持されます。ポータルにはパスキーがありません。
注記
ブラウザは、開発中の
httpslocalhost、または安全な発信元でのみパスキーを許可します。
