Axowl.Sdk.Korean.Identity.Client 0.1.1

dotnet add package Axowl.Sdk.Korean.Identity.Client --version 0.1.1
                    
NuGet\Install-Package Axowl.Sdk.Korean.Identity.Client -Version 0.1.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Axowl.Sdk.Korean.Identity.Client" Version="0.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Axowl.Sdk.Korean.Identity.Client" Version="0.1.1" />
                    
Directory.Packages.props
<PackageReference Include="Axowl.Sdk.Korean.Identity.Client" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Axowl.Sdk.Korean.Identity.Client --version 0.1.1
                    
#r "nuget: Axowl.Sdk.Korean.Identity.Client, 0.1.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Axowl.Sdk.Korean.Identity.Client@0.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Axowl.Sdk.Korean.Identity.Client&version=0.1.1
                    
Install as a Cake Addin
#tool nuget:?package=Axowl.Sdk.Korean.Identity.Client&version=0.1.1
                    
Install as a Cake Tool

Axowl.Sdk.Korean.Identity.Client

Server-side SDK for checking 한국 본인인증 (PortOne CI/DI) status of EndUsers. The actual verification flow (PortOne popup) runs in the frontend via @axowl/sdk-core JS SDK — this .NET SDK is for backend gating and audit lookups.

Install

dotnet add package Axowl.Sdk.Identity.Client          # JwtBearer first
dotnet add package Axowl.Sdk.Korean.Identity.Client

Quickstart

using Axowl.Sdk.Identity.Client;
using Axowl.Sdk.Korean.Identity.Abstractions.Contracts;
using Axowl.Sdk.Korean.Identity.Client;

var builder = WebApplication.CreateBuilder(args);

// 1) JwtBearer + JWKS (Phase 1.2 SDK)
builder.Services.AddAxowlIdentity(opts =>
{
    opts.OrganizationSlug = "bullmark";
    opts.Audience         = "app_bullmark_main";
    opts.ApiKey           = builder.Configuration["Axowl:ApiKey"]!;
});

// 2) Korean Identity client (this package)
builder.Services.AddAxowlKoreanIdentity(opts =>
{
    opts.ApiKey    = builder.Configuration["Axowl:ApiKey"]!;
    opts.Transport = TransportMode.GrpcWithFallback;
    // These are the defaults — set them only to point somewhere else
    // opts.ServerAddress     = "https://testgrpc.axowl.com";
    // opts.RestServerAddress = "https://testapi.axowl.com";
});

builder.Services.AddAuthorization();
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();

// 본인인증 게이팅
app.MapPost("/shop/checkout",
    [RequireKoreanIdentity(Purpose = "shop-checkout")]
    () => Results.Ok("ordered"));

// 또는 programmatic check
app.MapGet("/me/identity-status", async (
    IAxowlKoreanIdentityClient korean,
    HttpContext ctx) =>
{
    var bearer = ctx.Request.Headers.Authorization.ToString();
    var token  = bearer.StartsWith("Bearer ") ? bearer[7..] : "";
    var status = await korean.GetStatusAsync(token);
    return Results.Ok(status);
});

app.Run();

API

public interface IAxowlKoreanIdentityClient
{
    Task<KoreanIdentityStatus> GetStatusAsync(
        string token, string? purpose = null, CancellationToken ct = default);

    Task<IReadOnlyList<KoreanIdentityRecord>> ListAsync(
        string token, CancellationToken ct = default);
}

public sealed record KoreanIdentityStatus(
    bool       Verified,
    Guid?      VerificationId,
    string?    Purpose,
    string?    Method,         // Sms / Card / KakaoCert / NaverCert / TelcoPass / GongdongCert
    bool       IsForeigner,
    DateTime?  VerifiedAt);

[RequireKoreanIdentity] attribute

Blocks the endpoint if the user has no active verification matching Purpose (null = any purpose).

Response when blocked:

HTTP 403
Axowl-Korean-Identity-Required: shop-checkout
{
  "error": "korean_identity_required",
  "purpose": "shop-checkout",
  "hint": "Trigger verification via axowl-sdk-core: client.korean.verifyIdentity({ purpose })"
}

Frontend reacts to the Axowl-Korean-Identity-Required header and calls client.korean.verifyIdentity({ purpose }) to launch the PortOne popup.

Verification flow (where does the actual popup happen?)

Step Where Tool
1. User clicks "Verify" Frontend Customer's UI
2. Initiate → PortOne credentials Frontend → Axowl /api/public/apps/{key}/identity/korean/initiate @axowl/sdk-core
3. PortOne popup (SMS / KakaoCert / etc) Browser PortOne V2 SDK
4. Finalize → CI/DI hash sealed Frontend → Axowl /api/public/apps/{key}/identity/korean/finalize @axowl/sdk-core
5. Customer backend checks status Customer backend → Axowl gRPC/REST this package

Step 5 = what this SDK does. Steps 1-4 = JS SDK (@axowl/sdk-core) + Axowl public endpoints (already live).

Configuration reference

public sealed class AxowlKoreanIdentityClientOptions
{
    public string ServerAddress     { get; set; } = "https://testgrpc.axowl.com";
    public string RestServerAddress { get; set; } = "https://testapi.axowl.com";
    public string ApiKey            { get; set; } = "";   // required
    public TransportMode Transport  { get; set; } = TransportMode.Grpc;
}
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.1 48 9/26/2026