การดึงชื่อไคลเอนต์ใน IdentityServer4 และ ASP.NET Core

ตาราง dbo.Clients ในฐานข้อมูล IdentityServer มีทั้ง ClientId และ ClientName อย่างไรก็ตาม การขอโทเค็นข้อมูลประจำตัวไคลเอ็นต์จะไม่รวมชื่อไคลเอ็นต์ในโทเค็น

มีวิธีดึงข้อมูลลูกค้าจาก IdentityServer ที่กำหนดรหัสลูกค้าหรือขอให้เพิ่มชื่อลูกค้าลงในโทเค็นหรือไม่


person nullPainter    schedule 15.10.2019    source แหล่งที่มา


คำตอบ (2)


คุณสามารถเพิ่มแบบไดนามิกโดยใช้เครื่องมือตรวจสอบคำขอโทเค็นที่กำหนดเอง:

public class ClaimClientsUpdated : ICustomTokenRequestValidator
{
    public Task ValidateAsync(CustomTokenRequestValidationContext context)
    {
        context.Result.ValidatedRequest.Client.AlwaysSendClientClaims = true;
        context.Result.ValidatedRequest.ClientClaims.Add(new Claim("name", context.Result.ValidatedRequest.Client.ClientName));

       return Task.FromResult(0);
    }
}

ลงทะเบียนใน DI :

services.AddTransient<ICustomTokenRequestValidator, ClaimClientsUpdated>();

มันจะเพิ่มคำนำหน้า "client_" ให้กับการอ้างสิทธิ์แบบกำหนดเอง ดังนั้นการอ้างสิทธิ์จะเป็น "client_name": "value" ในโทเค็นการเข้าถึง

person Nan Yu    schedule 15.10.2019

คุณสามารถเพิ่มข้อมูลเกี่ยวกับไคลเอนต์โดยทั่วไปได้โดยเพิ่มการอ้างสิทธิ์ลงในตาราง ClientClaims เช่น. Type = Name, Value = MyCustomName

ซึ่งเพิ่มเป็นการอ้างสิทธิ์ (สมมติว่าคำนำหน้า client_):

"client_Name": "MyCustomName"

ซึ่งจะทำให้คุณสามารถเพิ่มข้อมูลเกี่ยวกับลูกค้าได้โดยไม่ต้องเพิ่มหรือเปลี่ยนรหัส

ข้อเสียเปรียบสำหรับชื่อลูกค้าคือ คุณจะต้องเพิ่มการอ้างสิทธิ์ที่มีข้อมูลที่ซ้ำซ้อน เนื่องจาก Clients.ClientName ไม่ใช่แหล่งที่มา ข้อดีคือเป็นการกำหนดค่าเท่านั้น

person Ruard van Elburg    schedule 15.10.2019
comment
ขอบคุณ! นี่เป็นแนวทางทั่วไปที่ทรงพลัง แต่ฉันคิดว่าฉันกำลังมุ่งหน้าสู่เครื่องมือตรวจสอบความถูกต้องของ @nan-yu เพียงเพื่อหลีกเลี่ยงแหล่งที่มาของความจริงสองแหล่ง - person nullPainter; 15.10.2019
comment
@nullPainter ไม่เป็นไร ฉันแค่อยากจะพูดถึงทางเลือกนี้เพื่อให้คุณทราบ ในทางกลับกัน คุณจะต้องตั้งค่าเพียงครั้งเดียวเท่านั้น ไม่น่าจะมีการเปลี่ยนแปลงค่าเนื่องจากใช้เป็นคีย์ - person Ruard van Elburg; 15.10.2019