Korean Identity SDK
.NET — Axowl.Sdk.Korean.Identity.Client
Section titled “.NET — Axowl.Sdk.Korean.Identity.Client”The package answers one question on your server: has this signed-in user completed Korean real-name verification? The verification itself runs in the browser (see Server side).
dotnet add package Axowl.Sdk.Identity.Client # token validationdotnet add package Axowl.Sdk.Korean.Identity.Clientbuilder.Services.AddAxowlIdentity(opts => { /* see Identity SDK */ });builder.Services.AddAxowlKoreanIdentity(opts =>{ opts.ApiKey = builder.Configuration["Axowl:ApiKey"]!; // org API key (ah_live_...) opts.Transport = TransportMode.GrpcWithFallback;});AddAxowlKoreanIdentity does not validate tokens itself — register AddAxowlIdentity first.
Options: ApiKey (required), Transport (Grpc by default, GrpcWithFallback, RestOnly), ServerAddress
(https://grpc.axowl.com), RestServerAddress (https://api.axowl.com), CallTimeout (10 seconds).
[RequireKoreanIdentity]
Section titled “[RequireKoreanIdentity]”// Minimal APIapp.MapPost("/shop/checkout", [RequireKoreanIdentity(Purpose = "shop-checkout")] () => Results.Ok());app.MapPost("/age-gate", () => Results.Ok()).RequireKoreanIdentity("age-gate");
// MVC[HttpPost("/checkout"), RequireKoreanIdentity] // any purpose[HttpPost("/age-gate"), RequireKoreanIdentity(Purpose = "age-gate")] // one specific purpose- Works on minimal-API endpoints and on MVC controllers and actions. The app must call
app.UseAuthorization(). - No authenticated user answers
401. A user who has not verified answers403with the headerAxowl-Korean-Identity-Required: <purpose or "any">— read the header; the response has no body. - The check asks Axowl on every request and fails closed: a failed call is a
403.
IAxowlKoreanIdentityClient
Section titled “IAxowlKoreanIdentityClient”var status = await korean.GetStatusAsync(token, purpose: "age-gate", ct); // status.Verified, .Method, .VerifiedAtvar history = await korean.ListAsync(token, ct); // every verification recordtoken is the end user’s access token. GetStatusAsync returns the latest active verification for the purpose
(purpose: null = any purpose); Verified is false when there is none. The REST forms are
POST /v1/korean-identity/status and POST /v1/korean-identity/list.
Server side
Section titled “Server side”Verification is driven through PortOne — …/apps/{applicationKey}/identity/korean/initiate and …/finalize.
In the browser, @axowl/sdk-core runs the whole flow (initiate, the PortOne window, finalize) in one call:
await client.korean.verifyIdentity({ purpose: 'age-gate' }). A PortOne webhook is a safety net (see Webhooks).