== 詳細

=== Project Modules

WebAuthn4Jは、以下の4つのModuleから構成されます。

==== Core webauthn4j-core.jar

Attestation/Assertionの検証に関わるコア機能を提供します。

==== Metadata webauthn4j-metadata.jar

FIDO Metadata Serviceを用いたTrustAnchorの解決など、追加的な機能を提供します。
依拠しているFIDO Metadata Statements仕様がドラフトの為、実験的な提供です。
含まれているクラスは、Publicであっても、セマンティックバージョニングに従わずに破壊的変更が入る場合があります。

==== Test webauthn4j-test.jar

WebAuthn4Jのテストを行うための内部ライブラリです。含まれているクラスは、Publicであっても、セマンティックバージョニングに従わずに
破壊的変更が入る場合があります。

==== Util webauthn4j-util.jar

WebAuthn4Jライブラリで使用されるユーティリティクラスをまとめたライブラリです。

=== カスタムなデータ変換ロジックの実装

WebAuthn4Jでは、JSONやCBORのシリアライズ、デシリアライズ処理にJacksonライブラリを使用しています。
Client ExtensionやAuthenticator Extensionのデータ変換でカスタムな変換を行いたい場合、WebAuthn4Jが内部で使用している
Jacksonの `ObjectMapper` にカスタムなシリアライザ、デシリアライザを登録することで実現できます。

==== カスタムなデータ変換ロジックの登録

WebAuthn4Jは、Jacksonの `ObjectMapper` を `ObjectConverter` というクラスでラップして使用しており、
カスタムなシリアライザ、デシリアライザを登録した `ObjectMapper` を `ObjectConverter` インスタンス作成時にコンストラクタから
インジェクトし、その `ObjectConverter` を `WebAuthnManager` のインスタンス作成時にパラメータとして指定してください。

=== カスタムな検証ロジックの実装

WebAuthn4Jでは、カスタムな検証ロジックを実装し、追加することが可能です。
登録時の検証にカスタムロジックを追加する場合は、 `CustomRegistrationValidator` を実装してください。
認証時の検証にカスタムロジックを追加する場合は、 `CustomAuthenticationValidator` を実装してください。

==== カスタム検証ロジックの登録

`CustomRegistrationValidator` と `CustomAuthenticationValidator` の実装は `WebAuthnManager` のコンストラクタの
`customRegistrationValidators` パラメータおよび `customAuthenticationValidators` パラメータを通じて登録することが出来ます。

=== クラス

==== Data transfer Objects

`com.webauthn4j.data` パッケージ配下のクラスはイミュータブルなDTOとして設計されています。

==== Converter, WebAuthnModule

データパッケージ配下のクラスはJacksonによってシリアライズ、デシリアライズ可能なように設計されています。
一部のクラスはカスタムなシリアライザ、デシリアライザが必要であり、 `converter` パッケージ配下に集約されています。
カスタムシリアライザ、デシリアライザは `WebAuthnJSONModule` と `WebAuthnCBORModule` というJacksonのModuleにまとめられています。
WebAuthn4Jは内部で使用するJacksonの `ObjectMapper` に自動で `WebAuthnModule` を適用しますが、`WebAuthnManager` の外部で
WebAuthn4Jのシリアライザ、デシリアライザを使用したい場合は、Jacksonの `ObjectMapper` に `WebAuthnModule` を登録すると
良いでしょう。

==== TrustAnchorsResolver

`TrustAnchorsResolver` インタフェースは `TrustAnchorCertPathTrustworthinessValidator` で構成証明ステートメントの信頼性の
検証を行う際に信頼するルート証明書のセットを探索するために使用されます。

==== TrustAnchorsProvider

`TrustAnchorsProvider` インタフェースは前述の `TrustAnchorsResolver` インタフェースの実装である `TrustAnchorsResolverImpl`
がTrustAnchorの読込処理を委譲する先のインタフェースです。実装としてJava Key StoreファイルからTrustAnchorを読み込む
`KeyStoreFileTrustAnchorsProvider` クラスが提供されている他、Spring Security WebAuthnでは、SpringのResourceから
TrustAnchorを読み込む `CertFileResourcesTrustAnchorProvider` が提供されています。


==== 例外クラス

データの変換に失敗した場合、 `DataConversionException` のサブクラスがスローされます。
データの検証に失敗した場合、 `ValidationException` のサブクラスがスローされます。

=== ログ

WebAuthn4JはSLF4Jをログインタフェースライブラリとして使用します。
Logbackなどログ実装ライブラリを構成し、ログをお好みのスタイルで出力してください。

