การใช้ App Password กับ Legacy app ใน Microsoft 365/Office 365 และใช้งาน SMTP Connector

Narisorn Limpaswadpaisarn
EchoO365
Published in
5 min readJan 5, 2023

ควรใช้ App password ในกรณีที่จำเป็นจริงๆเท่านั้น

อยากจะแนะนำให้องค์กรวางแนวทางที่จะเริ่ม refresh ตัวระบบให้เป็น Modern Authentication ทั้งหมดจะดีกว่าเนื่องจาก Microsoft ก็เริ่มจริงจังกับการใช้ Modern Authentication กับ application อย่าง Microsoft Office และ อื่นๆ จึงควรพิจารณา refresh ตัว application ใหม่ๆ เช่น Microsoft Office version ล่าสุด หรือ custom application ที่ support ตัว Modern Authentication เพื่อลดความเสี่ยงจากการถูกโจมตี เช่น password spray

และดูในส่วนหัวข้อ ข้อควรระวังด้วยนะครับ

ครั้งที่แล้ว เราพูดกันถึงเรื่องการใช้ Mail distribution service อย่าง Sengrid ในการส่ง email ไปให้ user ข้างนอก ที่ละหลายๆคน แต่ในบางครั้ง เราอยากจะใช้ user account กลางใน Microsoft 365 ทำการส่ง email ภายในที่ไม่ได้ส่งออกเยอะมากๆ

ในส่วนของ Application ในองค์กรต่างๆจะมี feature ที่ใช้ในการส่ง email อยู่ เช่น noreply@xxx.co.th ทำเป็นระบบส่งใน application ต่างๆ กรณีนี้ระบบจะต้องการพวกระบบ SMTP relay ขององค์กรมาใช้งาน ซึ่งจริงๆแล้วก็สามารถทำใน user ที่มี Microsoft 365/Office 365 ได้

ขณะเดียวกัน Application เหล่านี้อาจจะเป็น legacy application (ที่ส่วนใหญ่คือ non-browser app) ที่ไม่ได้เป็นระบบสมัยใหม่ที่รู้จัก Modern Authentication แบบที่นิยมพัฒนาในปัจจุบัน เพราะฉะนั้นถ้า Account ทำ Multi-factor Authentication (MFA) ก็จะทำให้ application นั้น ไม่สามารถ log in เข้าไปส่ง email ได้ เพราะไม่มีระบบรู้จัก (มีแต่ช่องให้ใส่ username กับ password)

ถึงตรงนี้ตัว Microsoft 365 เราก็สามารถจะมี workaround ได้โดยการทำสิ่งที่เรียกว่า “App Password” เพื่อให้สามารถส่ง email ได้

ในกรณีนี้เราอาจจะมี account กลางที่มี license จะทำการส่ง email และเราจะ enable ให้แค่ account ตัวนี้รองรับ Basic Authentication แค่สำหรับการใช้งาน app ที่เราจะส่งไป โดย user อื่นๆที่เป็นคน เราก็ให้ทาง admin ทำการ disabled และให้ใช้ Modern Authentication เพื่อความปลอดภัย

App password โดยตัวมันจะมีความ secure กว่า password ธรรมดา เนื่องจาก เป็นการ autogenerate จากระบบที่เดายากกว่า แต่อย่างที่บอกยังไงก็ไม่ 100% ถ้าไม่มีความจำเป็นต้องใช้ ก็ไม่ควรสร้างมันขึ้นมา

ตรงนี้จะเป็นการใช้ SMTP จาก Office 365 ที่ยังมีการ authentication ซึ่งยังมีการ limit ในส่วนของจำนวน email ที่ส่งได้ต่อ 1 วันของ account นั้นๆ คือ 10,000 recipients ต่อวัน และ ไม่เกิน ต่อ 30 message ต่อ นาที เพราะฉะนั้นถ้ามีการใช้งานในการส่ง internal เยอะๆก็อาจจะพิจารณาเป็นการตั้ง SMTP Server ใน network องค์กรก็น่าจะเหมาะกว่า

การทดลองใช้งาน

ก่อนอื่น Admin สร้าง user ชื่อ noreply มาก่อน (สร้างจากบน M365 เป็น Cloud user)ในกรณีนี้เป็นการส่ง email ก็อาจจะให้ license ที่เป็น Exchange Online อย่างเดียว ในกรณีผมซื้อเป็น Suite อย่าง M365 E5 ก็ยังสามารถ enable แต่ Exchange Online อย่างเดียวก็ได้

ในกรณีนี้ Global Administrator ได้ disable ตัว Security defaults ไว้ สามารถไปที่ https://aad.portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/Properties
จากหน้า Admin Center (https://admin.microsoft.com) สร้าง user ชื่อ noreply
Enable แค่ Exchange Online Service อย่างเดียว

จากนั้นเข้าไป check ตัว user เพื่อ Allow ตัว SMTP

Allow Authenticated SMTP

และ Check ระดับ Organization ในส่วนของ Allow access to basic Authentication (อาจจะ check box แค่ Authenticated SMTP อย่างเดียว ก็พอ

Authenticated SMTP

กลับมาเช็คที่

ในกรณีนี้ทดลองส่ง SMTP กับ Power Automate (สมมุติว่าเป็น Legacy App) โดยใช้ noreply account ก็สามารถส่งได้ โดยส่งค่าตามนี้

SMTP Server Address: smtp.office365.com

username/password: ตามที่สร้างมา ก็คือ sign in account ของ noreply

Port: 587 และ Enable SSL

SMTP อาจจะใช้ Port 25 ก็ได้แต่ส่วนใหญ่อาจจะโดน block port นี้ เลยใช้ 587 ที่ recommended

Power Automate: SMTP Connector
ทำการส่ง email ผ่าน connector นี้ได้

แต่ในกรณีถ้าเราจะ Set Up multifactor authentication ให้กับ Account นี้เราจะต้องทำ App Password เข้ามาด้วยก็จะทำไม่ได้

error ติด MFA

Admin ต้องมา Enable ก่อนโดยไปที่ Admin Center (https://admin.microsoft.com) แล้วไปที่ User -> Multi-factor Authentication

Multi-factor authentication

ตอนแรก ไปที่ service settings เรา make sure ว่า allow การ create ตัว app password ก่อน

Allow users to create app password

จากนั้นมาที่ users มา Enable และจากนั้นก็ Enforce การทำ MFA กับ noreply

จะต้องมีการทำ MFA ก่อน user นั้นๆถึงจะมีให้ เลือกให้ทำ App password

จากนั้นทดลอง sign in (เข้า Office 365 portal หรือ https://aka.ms/mfasetup) มาเป็น noreply user หลังจากใส่ password ระบบจะพาเราเข้ามาทำ MFA โดยวิธีใช้ App ชื่อ Microsoft Authenticator (ให้เราทำ second challenge ผ่าน app นี้) หรือ จะเลือก I want to set up a different method เป็น Phone (ส่ง SMS เป็น OTP) อันนี้ก็แล้วแต่ว่าจะ register ยังไง

เลือกระหว่าง Authenticator หรือ Phone

พอเสร็จ account นี้การ sign in ก็จะเป็น MFA เสมอ

คราวนี้เราจะมาเพิ่ม method ที่เป็น App password คือ ให้ noreply เข้าไปที่ https://mysignins.microsoft.com/security-info แล้วเข้าไป add method ที่เป็น app password

อาจจะต้องรอสักพักหลังจาก Registered ตัว MFA และ refresh หน้า webpage เพื่อให้ option นี้โผล่มา ไม่ก็กลับไปดูว่า Account นี้ได้ Enforced ทำ MFA หรือยัง

1 account สามารถสร้างได้สูงสุด 40 App password

****การ reset user’s password ไม่เกี่ยวกับ App password ซึ่งไม่ได้ reset ไปด้วย

การใช้ App password อาจจะทำให้ account นั้นไม่สามารถ authentication ผ่าน Windows PowerShell เพื่อไป set up งาน Admin ได้

add ตัว App password method
ตั้งชื่อ App password นี้

ระบบจะ Genernate ตัว password ให้ อันนี้ให้ note เก็บไว้เพราะจะโชว์แค่ครั้งเดียว

App password
สามารถ add ตัว App password ได้อีกสูงสุด 40 อัน

พอเราได้ password แล้วก็เอาไปแทน password เดิมในช่องก็จะสามารถส่งได้โดย user นี้ยังมี MFA settings อยู่

บางระบบอาจจะต้องใช้ทั้ง user password เพื่อ authenticated ฝั่ง On-premise และ App password ใช้งานเพื่อ authenticated ฝั่ง Azure AD

เอาไปแทนช่อง password ที่เหลือเหมือนเดิม
ส่งได้สำเร็จ

จากนั้นก็นำ connection ที่สร้างมาใช้กับการสร้าง canvas app ใน Power Apps ได้ด้วย กรณีนี้ถ้าแชร์ app ให้ user คนไหน คนๆนั้นก็สามารถใช้ connector นี้ส่ง email จากใน canvas app นี้ได้เช่นกัน

User ที่ได้รับการแชร์ app จะเป็นแบบ Implicit shared หมายความว่านอกจากนำไปใช้งานแล้ว จะเอา connection นี้ไปใช้เองเวลาสร้าง canvas app ของตัวเองด้ได้วย ถ้าเราไม่อยากให้ทำได้ จะต้องมีการสร้าง connection นี้ใน Power Platform Environment อื่นที่กำหนด role ว่ามีแค่บางคนเท่านั้นที่สามารถสร้าง canvas app ได้ ส่วนนอกนั้นใช้งานได้อย่างเดียว เนื่องจากถ้าไปทำใน Default Environment ทุกคนจะสร้าง canvas app ได้

Power Apps ก็ส่งได้เช่นกัน

ในการล้าง App password ทั้งหมด Admin สามารถสั่งลบได้ โดยไปที่ Multi-factor Authentication settings -> User -> Manage user settings แล้วก็ Delete all existing app password

ใช้ในกรณีที่จะ ล้าง app password ของ user นั้นๆ หรือ ถ้า account โดน compromised

สั่ง delete ตัว App password ทั้งหมดของ user นั้นๆ

ข้อควรระวัง

ในหน้า Multi-factor Authentication settings -> Service settings เรากลับไป Disable การสร้าง App password กับทุก user ได้ ซึ่งไม่กระทบอันที่เคยสร้างและใส่ในระบบไปแล้ว ในหน้า managed ตัว password ตัว App password จะหายไปไม่ให้เรา delete ได้

แล้วเราอาจจะเรียกมา delete ไม่ได้ เพราะฉะนั้นแก้โดยต้องสร้าง Conditional Access Policy กับ user นั้น ให้ Block ตัว Legacy application อย่างเดียว

เพราะฉะนั้นแนะนำให้ delete ทั้งหมดก่อนจะดีกว่า

Conditional Access Policy จะมีใน Plan อย่าง Microsoft 365 E3, E5, A3, A5 หรือ ซื้อ Azure AD Premium P1 หรือ P2

ปิดการสร้าง App password
App password ที่เคยสร้างจะหายไปแต่ app จะใช้งาน App password ที่เคยสร้างได้อยู่

ข้อควรระวังอื่นๆ

1 account สามารถสร้างได้สูงสุด 40 App password

การใช้ App password อาจจะทำให้ account นั้นไม่สามารถ authentication ผ่าน Windows PowerShell เพื่อไป set up งาน Admin ได้

การ reset user’s password ไม่เกี่ยวกับ App password ไม่ได้ reset ไปด้วย

Application ที่ cached password มาใช้ on premise อาจจะ failed ได้โดยวิธีนี้

--

--

Narisorn Limpaswadpaisarn
EchoO365

Office 365 and Modern Workplaces: Please follow my publication https://medium.com/echoo365 for Microsoft 365 & Power Platform Blog (In Thai)