@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/winforms-wpf-entra-id-auth/#article>
    schema:about <https://comcomponent.com/knowledge/entra-id/>, <https://comcomponent.com/knowledge/msal-dotnet/>, <https://comcomponent.com/knowledge/wam-broker/> ;
    schema:mentions <https://comcomponent.com/knowledge/windows-forms/>, <https://comcomponent.com/knowledge/wpf/>, <https://comcomponent.com/knowledge/public-client-application/>, <https://comcomponent.com/knowledge/ropc/>, <https://comcomponent.com/knowledge/token-cache-persistence/>, <https://comcomponent.com/knowledge/id-token/>, <https://comcomponent.com/knowledge/access-token/>, <https://comcomponent.com/knowledge/app-registration-entra/>, <https://comcomponent.com/knowledge/conditional-access/>, <https://comcomponent.com/knowledge/microsoft-graph/>, <https://comcomponent.com/knowledge/redirect-uri/>, <https://comcomponent.com/knowledge/admin-consent/>, <https://comcomponent.com/knowledge/home-account-id/>, <https://comcomponent.com/knowledge/dpapi/>, <https://comcomponent.com/knowledge/windows-hello/>, <https://comcomponent.com/knowledge/fido2/>, <https://comcomponent.com/knowledge/acquiretokensilent-pattern/>, <https://comcomponent.com/knowledge/task-scheduler/>, <https://comcomponent.com/knowledge/windows-service/>, <https://comcomponent.com/knowledge/silent-account-misselection/> .

<https://comcomponent.com/knowledge/entra-id/> a skos:Concept ;
    skos:prefLabel "Microsoft Entra ID"@ja ;
    skos:definition "Microsoftのクラウド型ID・アクセス管理基盤。"@ja ;
    skos:altLabel "Entra ID" ;
    skos:altLabel "Azure AD" ;
    skos:altLabel "Azure Active Directory" .

<https://comcomponent.com/knowledge/msal-dotnet/> a skos:Concept ;
    skos:prefLabel "MSAL.NET"@ja ;
    skos:definition ".NETアプリからMicrosoft Entra IDなどのIDプロバイダーに対して認証・トークン取得を行うマイクロソフト製のクライアントライブラリ。"@ja ;
    skos:altLabel "Microsoft.Identity.Client" ;
    skos:altLabel "Microsoft Authentication Library for .NET" ;
    ks:implements <https://comcomponent.com/knowledge/public-client-application/> ;
    ks:implements <https://comcomponent.com/knowledge/acquiretokensilent-pattern/> .

<https://comcomponent.com/knowledge/wam-broker/> a skos:Concept ;
    skos:prefLabel "WAM(Web Account Manager)ブローカー"@ja ;
    skos:definition "Windows 10(1703)以降とWindows Server 2019以降に組み込まれた認証ブローカーで、Windowsサインイン済みアカウントとのSSOや条件付きアクセス連携をMSAL.NETに提供する。"@ja ;
    skos:altLabel "Web Account Manager" ;
    skos:altLabel "WAM" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/entra-id/> ;
    ks:requires <https://comcomponent.com/knowledge/redirect-uri/> ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/windows-service/> .

<https://comcomponent.com/knowledge/windows-forms/> a skos:Concept ;
    skos:prefLabel "Windows Forms"@ja ;
    skos:definition "デスクトップGUIアプリケーションを構築するための.NET/.NET FrameworkのUIフレームワーク。"@ja ;
    skos:altLabel "WinForms" .

<https://comcomponent.com/knowledge/wpf/> a skos:Concept ;
    skos:prefLabel "WPF"@ja ;
    skos:definition "XAMLでUIを宣言的に記述する、Windows専用のデスクトップUIフレームワーク。ベクターベースの描画とデータバインディングを特徴とする。"@ja ;
    skos:altLabel "Windows Presentation Foundation" .

<https://comcomponent.com/knowledge/public-client-application/> a skos:Concept ;
    skos:prefLabel "パブリッククライアント"@ja ;
    skos:definition "exeやモバイルアプリなど、クライアントシークレットを安全に保持できず、ユーザーの代理としてのみトークンを取得できるOAuth 2.0クライアントの区分。"@ja ;
    skos:altLabel "Public Client Application" ;
    ks:requires <https://comcomponent.com/knowledge/app-registration-entra/> .

<https://comcomponent.com/knowledge/app-registration-entra/> a skos:Concept ;
    skos:prefLabel "Entra IDのアプリ登録"@ja ;
    skos:definition "Entra管理センターでアプリケーションをテナントに登録し、クライアントID・リダイレクトURI・APIのアクセス許可などを構成する手続き。"@ja ;
    skos:altLabel "App Registration" ;
    skos:altLabel "アプリの登録"@ja ;
    ks:configuredBy <https://comcomponent.com/knowledge/redirect-uri/> .

<https://comcomponent.com/knowledge/redirect-uri/> a skos:Concept ;
    skos:prefLabel "リダイレクトURI"@ja ;
    skos:definition "認証後にIDプロバイダーがトークンを返す宛先として、アプリ登録側に事前登録しておくURI。"@ja ;
    skos:altLabel "Redirect URI" ;
    skos:altLabel "Reply URL" .

<https://comcomponent.com/knowledge/admin-consent/> a skos:Concept ;
    skos:prefLabel "管理者の同意"@ja ;
    skos:definition "アプリケーションアクセス許可を実際に有効にするために管理者が行う承認操作。付与後は一覧の状態が「テナント名に付与されました」に変わる。"@ja ;
    skos:altLabel "Admin consent" .

<https://comcomponent.com/knowledge/ropc/> a skos:Concept ;
    skos:prefLabel "ROPC(Resource Owner Password Credentials)"@ja ;
    skos:definition "ユーザー名とパスワードをアプリが直接受け取ってIDプロバイダーに検証させる認証フロー。パブリッククライアント向けは公式に廃止(deprecated)とされている。"@ja ;
    skos:altLabel "Resource Owner Password Credentials" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/public-client-application/> ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/conditional-access/> .

<https://comcomponent.com/knowledge/conditional-access/> a skos:Concept ;
    skos:prefLabel "条件付きアクセス"@ja ;
    skos:definition "デバイスの状態やサインインのリスクなどの条件に応じて、Entra IDへのサインインを許可・拒否・追加認証要求するポリシー機構。"@ja ;
    skos:altLabel "Conditional Access" .

<https://comcomponent.com/knowledge/acquiretokensilent-pattern/> a skos:Concept ;
    skos:prefLabel "Silent→Interactiveパターン"@ja ;
    skos:definition "まずAcquireTokenSilentでキャッシュからの取得を試み、MsalUiRequiredExceptionを受けたときだけAcquireTokenInteractiveで対話認証にフォールバックする、MSAL.NETの基本的な呼び出しパターン。"@ja ;
    skos:altLabel "AcquireTokenSilent→AcquireTokenInteractive"@ja .

<https://comcomponent.com/knowledge/token-cache-persistence/> a skos:Concept ;
    skos:prefLabel "トークンキャッシュの永続化"@ja ;
    skos:definition "MSAL.NETの既定ではメモリ上のみのトークンキャッシュを、プロセス再起動をまたいで使えるようファイル等に保存する実装。デスクトップアプリではアプリ側の責任とされる。"@ja ;
    skos:altLabel "Token Cache Persistence" .

<https://comcomponent.com/knowledge/dpapi/> a skos:Concept ;
    skos:prefLabel "DPAPI"@ja ;
    skos:definition "実行中のマシン上でアプリの秘密情報を保護するWindowsのデータ保護API。"@ja ;
    skos:altLabel "データ保護API"@ja .

<https://comcomponent.com/knowledge/windows-hello/> a skos:Concept ;
    skos:prefLabel "Windows Hello"@ja ;
    skos:definition "顔・指紋・PINでサインインするWindowsの生体認証機能。パスキーの認証器としても使え、秘密鍵はTPMがあればハードウェア保護される。"@ja .

<https://comcomponent.com/knowledge/fido2/> a skos:Concept ;
    skos:prefLabel "FIDO2"@ja ;
    skos:definition "WebAuthnとCTAPを合わせた枠組みの総称(FIDO2 = WebAuthn + CTAP)。パスキーはこの土台の上に成り立つ。"@ja .

<https://comcomponent.com/knowledge/task-scheduler/> a skos:Concept ;
    skos:prefLabel "タスクスケジューラの無人実行"@ja ;
    skos:definition "指定したアカウントで、スケジュールやログオンなどのトリガーに従いプログラムを実行するWindowsの仕組み。ログオン種別(対話トークン・パスワード保存・S4Uなど)の設定によっては、ユーザーがログオンしていなくても実行できる。"@ja .

<https://comcomponent.com/knowledge/windows-service/> a skos:Concept ;
    skos:prefLabel "Windowsサービス"@ja ;
    skos:definition "ユーザーのサインインと無関係にバックグラウンドで動くWindowsのプロセス。"@ja ;
    skos:altLabel "サービス"@ja .

<https://comcomponent.com/knowledge/id-token/> a skos:Concept ;
    skos:prefLabel "IDトークン"@ja ;
    skos:definition "サインインしたユーザーが誰かを表すJWT形式のトークン。ログイン機能だけであればこれで足りる。"@ja ;
    skos:altLabel "ID Token" .

<https://comcomponent.com/knowledge/access-token/> a skos:Concept ;
    skos:prefLabel "アクセストークン"@ja ;
    skos:definition "特定のAPI(Microsoft Graphや自社Web APIなど)を呼び出すための通行証となるトークンで、宛先(audience)とスコープが焼き込まれている。"@ja ;
    skos:altLabel "Access Token" .

<https://comcomponent.com/knowledge/microsoft-graph/> a skos:Concept ;
    skos:prefLabel "Microsoft Graph"@ja ;
    skos:definition "Microsoft 365やEntra IDのデータ・機能を統一的なREST APIとして公開するマイクロソフトのプラットフォーム。"@ja ;
    skos:altLabel "Graph API" ;
    ks:requires <https://comcomponent.com/knowledge/access-token/> .

<https://comcomponent.com/knowledge/home-account-id/> a skos:Concept ;
    skos:prefLabel "HomeAccountId"@ja ;
    skos:definition "MSALのアカウントオブジェクトが持つ、どのテナントのどのユーザーかを表す識別子。前回サインインしたアカウントの照合に使える。"@ja ;
    skos:altLabel "HomeAccountId.Identifier" ;
    ks:mitigates <https://comcomponent.com/knowledge/silent-account-misselection/> .

<https://comcomponent.com/knowledge/silent-account-misselection/> a skos:Concept ;
    skos:prefLabel "サイレント認証でのアカウント誤選択"@ja ;
    skos:definition "GetAccountsAsyncが返す複数アカウントを列挙順(FirstOrDefault等)で選んでAcquireTokenSilentに渡すことで、意図しない別アカウントのトークンが画面上の兆候なしに取得されてしまう問題。"@ja ;
    skos:altLabel "FirstOrDefaultによるアカウント誤選択"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-forms/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/msal-dotnet/> ;
    schema:description "Entra ID認証を実装する場合、WinForms業務アプリはMSAL.NET(Microsoft.Identity.Client)を利用する。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/acquire-token-silently> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wpf/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/msal-dotnet/> ;
    schema:description "Entra ID認証を実装する場合、WPF業務アプリも同じMSAL.NETライブラリを利用する。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/acquire-token-silently> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/msal-dotnet/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/public-client-application/> ;
    schema:description "MSAL.NETはクライアントシークレットを持てないデスクトップアプリを、ユーザー代理でのみトークンを取得できるパブリッククライアントとして扱う実装を担う。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity-platform/scenario-desktop-app-configuration> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/msal-dotnet/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/entra-id/> ;
    schema:description "本記事のように認証先としてMicrosoft Entra IDのテナントをauthorityに指定する場合、MSAL.NETはそのテナントに対して認証を要求する。MSAL.NET自体はEntra ID専用のライブラリではなく、Azure AD B2CやAD FSなど他のauthorityも指定できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/acquire-token-silently> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/public-client-application/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/app-registration-entra/> ;
    schema:description "デスクトップアプリのようなパブリッククライアントがEntra IDで認証するには、事前にEntra管理センターでのアプリ登録が前提になる。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity-platform/quickstart-register-app> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/app-registration-entra/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/redirect-uri/> ;
    schema:description "アプリ登録の認証設定は、WAM・システムブラウザー・埋め込みブラウザーに応じたリダイレクトURIで構成する。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity-platform/scenario-desktop-app-configuration> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/app-registration-entra/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/admin-consent/> ;
    schema:description "ユーザー自身の同意が無効化されたテナント、または管理者の同意を要求するアクセス許可を追加した場合に限り、初回サインインを通すには管理者の同意が前提になる。ユーザー同意が有効なテナントでの委任アクセス許可は、追加後にユーザー自身の同意でも初回サインインが成立する。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity-platform/quickstart-register-app> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/public-client-application/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/app-registration-entra/> ;
    schema:description "Entra IDを認証先とする場合、パブリッククライアントとしての構成は、Entra管理センターのアプリ登録側の「パブリック クライアント フローを許可する」などの設定を通じて行う。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity-platform/scenario-desktop-app-configuration> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ropc/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/public-client-application/> ;
    schema:description "パブリッククライアント向けのROPCはセキュリティリスクを理由に公式に廃止(deprecated)と明記され、新規実装での採用は推奨されない。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity-platform/scenario-desktop-acquire-token-username-password> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ropc/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/conditional-access/> ;
    schema:description "ROPCはMFA・条件付きアクセスと非互換であり、これらが必須化されたユーザーはROPCではサインインできない。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity-platform/v2-oauth-ropc> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/msal-dotnet/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/acquiretokensilent-pattern/> ;
    schema:description "MSAL.NETでの実装は、まずAcquireTokenSilentを呼び、MsalUiRequiredExceptionを受けたときだけAcquireTokenInteractiveへフォールバックするパターンが唯一の基本形とされる。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/acquire-token-silently> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/acquiretokensilent-pattern/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/token-cache-persistence/> ;
    schema:description "アプリの再起動をまたいでAcquireTokenSilentが対話なしでトークンを返し続けるには、永続化されたトークンキャッシュが前提になる。永続化しないとプロセス再起動のたびに対話認証へ落ちる。プロセスを再起動しない一連の実行中は、既定のメモリ内キャッシュのままでも対話なしで成功する。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/how-to/token-cache-serialization> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/token-cache-persistence/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dpapi/> ;
    schema:description "Windowsでのトークンキャッシュの暗号化保存には、ユーザースコープのDPAPI(ProtectedData)が使われる。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/how-to/token-cache-serialization> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wam-broker/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/windows-hello/> ;
    schema:description "テナントや利用者がWindows Helloを使う構成になっている場合、WAMブローカー経由の認証は生体・PIN認証を追加コードなしで利用できる。WAM自体はパスワードやフェデレーションによるサインインでも成立し、Windows Helloは必須ではない。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wam-broker/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/fido2/> ;
    schema:description "利用者がFIDOキーでサインインする構成の場合、WAMブローカー経由の認証は追加コードなしでそれに対応する。WAM自体はFIDO2を必須としない。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wam-broker/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/entra-id/> ;
    schema:description "Windows上でEntra IDに対して認証するデスクトップアプリでは、本記事はWAMブローカー経由の認証を推奨している。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wam-broker/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/token-cache-persistence/> ;
    schema:description "プロセスを再起動しても無人でサイレントにトークンを取り直したい場合、WAMを使っていてもMSALはIDトークンとアカウントのメタデータを自分のキャッシュに持つため、トークンキャッシュの永続化が必要になる。1回のプロセス内で完結する使い方では永続化なしでもトークンは取得できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity-platform/scenario-desktop-acquire-token-wam> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wam-broker/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/redirect-uri/> ;
    schema:description "WAMブローカーを使うには、ms-appx-web://microsoft.aad.brokerplugin/{クライアントID}形式のリダイレクトURIをアプリ登録側に登録しておく必要がある。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wam-broker/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/task-scheduler/> ;
    schema:description "タスクスケジューラでユーザーのログオンを伴わない無人実行を行う場合、WAMはUIを出せる対話的ユーザーセッションを前提とするため設計上エラーになる。「ユーザーがログオンしているときのみ実行する」設定であれば、そのユーザーの対話セッション内で動くのでWAMは利用できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wam-broker/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/windows-service/> ;
    schema:description "WAMはWindowsサービスのような対話的ユーザーセッション外の実行コンテキストとは両立しない。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/msal-dotnet/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/id-token/> ;
    schema:description "ログインだけの最小構成では、MSAL.NETが返すIDトークンの中のアカウント情報だけでサインインが成立する。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity-platform/id-tokens> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/msal-dotnet/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/access-token/> ;
    schema:description "Microsoft Graphや自社Web APIを呼ぶ構成では、MSAL.NETが取得するアクセストークンをAuthorizationヘッダーに載せて使う。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity-platform/access-tokens> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/microsoft-graph/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/access-token/> ;
    schema:description "Microsoft Graph APIを呼び出すには、対応するスコープを含むアクセストークンが前提になる。"@ja ;
    ks:evidence <https://learn.microsoft.com/graph/overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/home-account-id/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/silent-account-misselection/> ;
    schema:description "前回サインインしたアカウントのHomeAccountIdを保存して照合することで、キャッシュの列挙順に依存した誤ったアカウント選択を防ぐ。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/acquire-token-silently> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/acquiretokensilent-pattern/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/silent-account-misselection/> ;
    schema:description "複数アカウントがキャッシュに残っている状態でGetAccountsAsyncの結果をFirstOrDefaultなど列挙順で選んでAcquireTokenSilentに渡すと、画面に何も出ないまま別人のアカウントで暗黙にサインインしてしまうことがある。"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/msal/dotnet/acquiring-tokens/acquire-token-silently> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
