[K2 Five] – New Identity Service for K2 5.2

สวัสดีครับช่วงนี้มากันบ่อยหน่อย เพราะมีของออกใหม่เยอะ คราวนี้เป็นคิวของ Identity Service ใหม่ที่ออกมาใช้กับ K2 5.2 กันบ้าง โดย Identity Service จะเป็น service ที่ K2 เชื่อมต่อไปยัง Identity Providers (IdP) ต่างๆ เพื่อดึงข้อมูล user ที่ใช้งานมาเก็บเป็น cache ไว้ใน K2

ทำไมถึงต้องเปลี่ยนเป็นแบบใหม่

  • ในการเข้า K2 ครั้งแรก มีโอกาสที่จะเข้าใช้ได้ช้ามาก ถ้า profile ของ user นั้นยังไม่ได้ sync
  • ในบางกรณีข้อมูล identity ไม่ได้มีการ update อย่างที่ควรจะเป็น เช่น มีการเปลี่ยนข้อมูลบางอย่าง แต่บน K2 ยังเป็นของเดิม ในกรณีนี้เราต้องไปรัน script refresh identity cache และ restart K2 service
  • version เดิมมีการทำงานที่ไม่จำเป็น เช่น ไม่ได้มีการเปลี่ยนข้อมูล profile แต่ก็ยังต้อง sync มาใหม่

Concept ของแบบใหม่

  • เพิ่มการ queries แบบ Differential
  • มี logic ในการ sync ข้อมูลที่ดีขึ้น
  • backward compatibility กับ UM SmartObjects เดิม

ขั้นตอนในการใช้งาน

  • Install หรือ Update เป็น K2 5.2
  • ลง Fix Pack ล่าสุดเท่าที่ทำได้ (ณ ตอนเขียนเป็น FP03)
  • ลง New Identity Service ถ้าเป็น server farm ให้ลงที่เครื่องเดียวก็พอ เครื่องอื่นๆ ใน farm แค่ restart K2 service หลังจากลงเรียบร้อยแล้ว

Enable New Identity Service.png

  • เมื่อลงแล้ว เราจะได้ SmartObject มา 1 ชุดที่เกี่ยวกับการทำ identity service สามารถหาได้โดย search คำว่า sync ในเมนู Integration

Sync SMO

  • ให้เราเลือกที่ “Provider Instance” method “List Provider Instances”

Provider Instance

  • SmartObject จะแสดงข้อมูลออกมาให้ดูว่า เรามีการเชื่อมต่อไปยัง IdP อะไรบ้าง อย่างในตัวอย่างเครื่องผมมีแค่ต่อกับ domain DENALLIX อย่างเดียว

Provider Instance List

  • จากนั้นให้ไปเลือกที่ SmartObject “Operation” method “Start Sync” ใส่ Provider Name เป็น K2 กับ Provider Instance Name เป็น DENALLIX

Operation Start Sync

  •  หลังจากรันแล้วจะได้หน้า result ตามด้านล่าง

Operation Start Sync Result

  • ให้เราไปลองดูใน SmartObject “Run History” method “Get Run History Entries By Date Range” ลองใส่ข้อมูลเพื่อดูว่า เรารันแล้ว sync มาได้กี่ object จะเห็นว่า ได้มา 126 objects

Run History1

Run History Result1

  • จากนั้นให้ลองไปดึงข้อมูลจาก SmartObject “UMUser” ดูรายละเอียดของ user

Get UMUser1Get UMUser Result1

  • ขั้นต่อไป เราจะลองดูว่า ถ้าเรามีการ update ข้อมูลใน AD เราต้องทำอย่างไรบ้าง อย่างแรกคือ ไป update ใน AD ก่อน

AD Update.png

  • จากนั้นเราก็ไปรัน SmartObject “Operation” method “Start Sync” และลองดูผลผ่าน “Run History” อีกรอบ จะเห็นว่า รอบที่สองมีการ sync มาแค่ 1 object ที่มีการ update

Run History2

  • มาลองดูผลผ่าน “UMUser” อีกรอบ จะเห็นว่า ข้อมูล update เรียบร้อยแล้ว

Get UMUser Result2

สิ่งที่ควรรู้เกี่ยวกับแบบใหม่

  • User ที่จะเข้าใช้งาน K2 ได้ ต้องถูก cache ไว้ก่อน โดย K2 จะไม่ได้เก็บ password ของ user ไว้ แต่จะเอา cache ไว้ตรวจสอบตัวตนของ user ถ้ามีตัวตนถึงจะทำการ call ไปหา AD เพื่อลดความช้าของการเข้าใช้งานครั้งแรก
  • ในกรณีที่ไม่ต้องการทำ sync แบบ manual เราสามารถสั่งให้ทำ recurring sync job ผ่าน SmartObject “Operation” method “Set Provider Schedule” ได้ แนะนำว่า ควรทำไว้ด้วย

Set Recurring

  • Support all K2 Five user managers (AD, AAD, SharePoint – on prem and online, LDAP, ADFS, SQLUM, custom UM)
  • มีแค่ AD, AAD และ SharePoint – on prem and online ที่ support Differential queries ถ้าเป็นอย่างอื่นจะทำ Full queries ทั้งหมด ดังนั้นถ้าเราจะทำ schedule อันที่ไม่ support Differential ให้ set เวลานานกว่า provider ที่ทำ Differential ได้
  • ใน version K2 5.2 เราต้องทำ Full Sync ครั้งแรก และตั้ง schedule สำหรับทำ Differential เอง แต่ใน K2 5.3 จะมีทำ Full sync และตั้ง schedule ไว้ให้ตอนลง
  • การทำงานอะไรบ้างที่ใช้ cache ที่เรา sync ไว้
    • UM SmartObjects
    • User connections
    • Designer and Management user browsing
    • WF destination group resolving
    • Worklist
    • Roles
    • Autorization
  • การทำงานอะไรบ้างที่ดึงข้อมูลจาก IdP โดยตรง
    • AD & AAD SmartObjects
    • SharePoint Management SmartObjects
    • People picker control using AD, AAD and SP SmartObjects

ใครที่ upgrade ไปเป็น K2 5.2 แล้ว ก็ลองลงกันดูได้นะครับ โดยส่วนตัวชอบตรงที่เราไม่ต้องรอเวลาให้ K2 sync เอง สามารถสั่ง sync ผ่าน SmartObject ได้เลย โดยไม่ต้อง restart service กับมี log ให้ดูว่า sync ไปเมื่อไหร่ และได้กี่อัน ถ้าเทียบกับอันเดิมที่ดูค่อนข้างยาก (เพราะต้องไปดูเป็นราย record) ถือว่า ดีกว่าเดิมเยอะทีเดียว 🙂

Advertisements

[Management] – Search Role in K2 [EN Version]

Today we’ll take about role in K2. We know that K2 Role use to manage group of user when we didn’t use AD group. We can create and manage role using Management console in workspace (K2 version prior to K2 Five) or using K2 Management site (K2 version 4.7 and K2 Five). But the thing that still missing is search function.

Imagine that if we have more than 100 roles in system and want to add/remove user in role or want to know which user belong to which role? How can we solve this problem? Today I got a tool for you. Please follow below step

  • Create stored procedure using script below in any database that can reach K2. You can also create in K2 database but please be aware. Because when we upgrade version or patch the stored procedure may be disappear.

CREATE PROCEDURE [dbo].[sp_FindRoleByUser] (

@pUserName NVARCHAR(447)

) AS

BEGIN

SELECT i.[Name]

FROM   [K2].[Identity].[Identity] i

INNER JOIN    [K2].[Identity].[RoleItem] r

ON     i.ID = r.IdentityID

WHERE  i.[Type] = 2

AND    r.[FQN] = @pUserName

END

After deploy you can use form at {url}/Runtime/Runtime/Form/UserRole.Form/

Hope this can help you when working with role 🙂

[Management] – Search Role ใน K2 [TH Version]

สวัสดีครับ ไม่ได้มา update blog ซะนาน วันนี้มาด้วยเรื่องของ role ใน K2 หลายๆ คนคงทราบอยู่แล้วว่า Role ไว้ใช้เวลาที่เราอยากส่งงานไปหาคนหลายๆ คน แต่เราไม่มี group บน AD ก็เลยมาใช้ระบบจัดการใน K2 แทน วิธีใช้งานก็ไม่ยาก สามารถเข้าไปเพิ่ม Role ผ่านหน้า workspace (ก่อน K2 Five) หรือผ่านหน้า Management (K2 4.7 และ K2 Five) ได้เลย แต่สิ่งที่หายไปสำหรับ Role ใน K2 นี้ก็คือ ไม่มี function ในการ search นั่นเอง

ลองนึกถึงเวลาที่เรามี Role เยอะๆ มากกว่า  100 ขึ้นไป (จริงๆ แค่ประมาณสิบปลายๆ ก็แย่แล้ว) แล้วต้องการเข้าไปแก้ไขคนใน role หรืออยากจะรู้ว่า user นี้อยู่ใน Role ไหนบ้าง จะทำยังไงดี?? วันนี้เรามี tool มีนำเสนอ โดยทำตาม step ด้านล่าง

  • สร้าง stored procedure ตาม script ด้านล่างใน database ที่เห็น database K2 จะสร้างไว้ใน database K2 ก็ได้ แต่ว่า ถ้ามีการ upgrade version หรือ patch stored procedure นี้อาจจะหายไปได้

CREATE PROCEDURE [dbo].[sp_FindRoleByUser] (

@pUserName NVARCHAR(447)

) AS

BEGIN

SELECT i.[Name]

FROM   [K2].[Identity].[Identity] i

INNER JOIN    [K2].[Identity].[RoleItem] r

ON     i.ID = r.IdentityID

WHERE  i.[Type] = 2

AND    r.[FQN] = @pUserName

END

เมื่อ deploy แล้วสามารถใช้งาน form ได้ที่ {url}/Runtime/Runtime/Form/UserRole.Form/

หวังว่า จะช่วยทำให้ชีวิตในการใช้ Role ของทุกคนง่ายขึ้นนะครับ 🙂