---
title: "sdk/windows"
description: "WebView2 인증, PKCE S256, 토큰 영속성을 위한 DPAPI 보호 IsolatedStorage를 사용하는 WinUI 3 애플리케이션용 C# / .NET SDK."
locale: "ko"
---

> Documentation Index
> Fetch the relevant documentation index at: https://vonvon.id/ko/sdks/llms.txt
> Use this file to discover all available pages before exploring further.

# sdk/windows

## 상태

Package 상태는 **구현 및 로컬 검증 완료**입니다. 크로스 플랫폼 .NET 단위 테스트 suite가 통과했습니다. WebView2, DPAPI, WinUI 3 및 실제 IdP round-trip을 검증하려면 여전히 Windows integration environment가 필요합니다. 이 페이지는 구현된 동작을 설명하며 production-ready 상태임을 주장하지 않습니다.

Registry 상태: UNPUBLISHED. 이 SDK는 저장소 소스 checkout에서만 설치하고 외부 package registry를 사용하지 마세요.

## 요구 사항

- .NET 8 및 Windows App SDK 1.6+
- WebView2 런타임(Evergreen — Microsoft Edge에 사전 설치됨)
- 프로젝트 파일에 &lt;UseWinUI&gt;true&lt;/UseWinUI&gt;를 설정해야 합니다

## 설치

애플리케이션 프로젝트 파일에 소스 checkout을 가리키는 ProjectReference를 추가하세요:

```xml
<ItemGroup>
  <ProjectReference Include="../vonvon/sdk/windows/Vonvon.Windows.csproj" />
</ItemGroup>
```

## 빠른 시작

```csharp
using Vonvon.Windows;

// 1. Configure in App.xaml.cs OnLaunched.
VonvonClient.Shared.Configure(new VonvonConfiguration
{
Issuer      = new Uri("https://vonvon.id"),
ClientId    = "your_client_id",
RedirectUri = "com.example.myapp://auth/callback",
// Scopes default: openid profile email. offline_access is rejected until DPoP is implemented.
});

// 2. Sign in (opens embedded WebView2 window)
VonvonSession session = await VonvonClient.Shared.SignInAsync();
Console.WriteLine($"Signed in: {session.User.Email}");

// 3. Get the current unexpired access token. Expiry requires reauthorization.
string? token = await VonvonClient.Shared.GetAccessToken();

// 4. Get the current unexpired session.
VonvonSession? current = await VonvonClient.Shared.GetSession();

// 5. Clear local state.
await VonvonClient.Shared.SignOut();
```

## 사용자 정의 URI 스킴 콜백(선택 사항)

WebView2 임베드 창 대신 사용자 정의 URI 스킴 리디렉션을 사용하는 경우 프로토콜 활성화 URI를 `HandleRedirectAsync`로 전달하세요:

```csharp
// App.xaml.cs
protected override void OnActivated(IActivatedEventArgs args)
{
if (args.Kind == ActivationKind.Protocol)
{
    var protocolArgs = (ProtocolActivatedEventArgs)args;
    await VonvonClient.Shared.HandleRedirectAsync(protocolArgs.Uri);
}
}
```

## 핵심 API

| 방법 | 설명 |
| --- | --- |
| `Configure(VonvonConfiguration)` | SDK를 초기화합니다. 애플리케이션 시작 시 한 번 호출하세요. |
| `SignInAsync(options?, ct)` | PKCE S256을 사용하여 임베드 WebView2 인증 창을 엽니다. 완료 시 VonvonSession을 반환합니다. |
| `HandleRedirectAsync(Uri, ct)` | 사용자 정의 URI 스킴 콜백을 처리하고 인증 코드를 교환합니다. |
| `GetSession(ct)` | 현재 만료되지 않은 session을 반환합니다. 만료된 로컬 state는 지우고 null을 반환합니다. |
| `GetAccessToken(options?, ct)` | 현재 만료되지 않은 access token을 반환합니다. ForceRefresh는 session을 지우고 재인증을 요구합니다. |
| `SignOut(ct)` | DPAPI 보호 IsolatedStorage에서 로컬 세션 토큰을 삭제합니다. |
| `SetTokenStorage(ITokenStorage)` | 기본 DpapiTokenStorage를 사용자 정의 ITokenStorage 구현으로 교체합니다. |

## 저장소 어댑터

기본 저장소는 DPAPI(CurrentUser 범위)로 토큰을 암호화하고 IsolatedStorage에 저장합니다. Windows Hello 또는 Credential Manager를 사용하려면 `ITokenStorage`를 구현하세요:

```csharp
public sealed class MyCustomStorage : ITokenStorage
{
public Task SaveAsync(StoredTokenSet tokens, CancellationToken ct = default) { ... }
public Task<StoredTokenSet?> LoadAsync(CancellationToken ct = default) { ... }
public Task ClearAsync(CancellationToken ct = default) { ... }
}
VonvonClient.Shared.SetTokenStorage(new MyCustomStorage());
```

## 의존성

| 패키지 | 버전 | 목적 |
| --- | --- | --- |
| `Microsoft.WindowsAppSDK` | 1.6.250228002 | WinUI 3 호스트 및 WebView2 임베딩 |
| `Microsoft.Web.WebView2` | 1.0.3065.39 | Chromium 기반 임베드 인증 창 |
| `System.Security.Cryptography.ProtectedData` | 8.0.0 | DPAPI 토큰 저장 암호화 |

## 보안

- 공개 클라이언트 — client secret이 저장되거나 전송되지 않습니다.
- PKCE S256만 사용합니다. 서버는 plain challenge 방식을 거부합니다.
- DPAPI(CurrentUser 범위)로 암호화되어 IsolatedStorage에 저장된 토큰. 다른 Windows 사용자 계정에서는 접근할 수 없습니다.
- 요청마다 생성되는 OAuth state; CSRF를 방지하기 위해 리디렉션 시 검증됩니다.

## 알려진 제한 사항

- WebView2 런타임이 있어야 합니다. 폴백으로 WebAuthenticationBroker 지원이 계획되어 있지만 아직 구현되지 않았습니다.
- JWKS 기반 ID token 검증과 end\_session sign-out은 구현되어 로컬 테스트를 통과했습니다. L4 지원 전에는 Windows WebView2, DPAPI, IdP 검증이 필요합니다.
- DpapiTokenStorage는 Windows 이외의 플랫폼에서 실행되지 않습니다. 크로스 컴파일 시 다른 ITokenStorage 구현을 사용하세요.

Source: https://vonvon.id/ko/sdks/windows/index.mdx
