Runtime: Windows์šฉ System.DirectoryServices ์ง€์›

์— ๋งŒ๋“  2015๋…„ 06์›” 18์ผ  ยท  199์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dotnet/runtime

์‹คํ–‰ ๊ณ„ํš:

  • [x] 1. @ianhays ๊ฐ€ CoreFX ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ - ์†Œ์Šค ์ฝ”๋“œ ์ถ”๊ฐ€, ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ• ์˜ˆ์‹œ, ๋นŒ๋“œ ์„ค์ • ์กฐ์–ธ, ํŒจํ‚ค์ง•, ํ–ฅํ›„ Linux/Mac ํฌํŠธ์šฉ ํ”„๋กœ์ ํŠธ ์ค€๋น„ ๋“ฑ).
  • [x] 2. Windows์—์„œ ์ฝ”๋“œ ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    • CC @tquerec @ianhays @karelz on PR

    • ์ฐธ๊ณ : .NET Core์—์„œ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ด ์‹œ์ ์—์„œ ๊ตฌํ˜„, ์•„ํ‚คํ…์ฒ˜ ๋˜๋Š” API ํ‘œ๋ฉด์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์  ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ๊ทธ๋Ÿฌํ•œ ์‚ฌ๋ก€๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ์ฆ‰์‹œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ์•Œ๋ ค์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

    • [x] 2.1. ์‹œ์Šคํ…œ.๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค. ํ”„๋กœํ† ์ฝœ (wldpap32.dll ์œ„)

    • [x] 2.2. ์ฒด๊ณ„. DirectoryServices (adsi.dll ์œ„)

    • [x] 2.3. ์‹œ์Šคํ…œ.๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค. AccountManagement (System.DirectoryServices ๋ฐ SystemDirectoryServices.Protocols ์ƒ๋‹จ)

    • [x] 2.4. ์‹œ์Šคํ…œ.๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค. ActiveDirectory (Win32 API ์ƒ๋‹จ - https://github.com/dotnet/corefx/issues/2089#issuecomment-261063131 ์ฐธ์กฐ)

  • [x] 3. ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ - dotnet/corefx#20669์—์„œ ์ง„ํ–‰ ์ƒํ™ฉ ์ถ”์ 
  • .4. Linux/Mac ํฌํŠธ.

    • 4.1. ์‹œ์Šคํ…œ.๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค. ํ”„๋กœํ† ์ฝœ (๋จผ์ € ์‚ฌ์šฉํ•  x-plat LDAP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•จ) - dotnet/corefx#24843์—์„œ ์ถ”์ 

    • 4.2. ๊ธฐํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๋Œ€๋ถ€๋ถ„์˜ ๊ตฌํ˜„์ด ๋Œ€๋ถ€๋ถ„ Windows์˜ ์ผ๋ถ€์ด๋ฏ€๋กœ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ) - ํ•„์š”ํ•  ๋•Œ ๋ณ„๋„์˜ ๋ฌธ์ œ๋กœ ์ถ”์ 

  • .5. DirectoryServices์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ฐœ์„  ์‚ฌํ•ญ ๋ฐ ๋ฒ„๊ทธ ์ˆ˜์ • - ๋ณ„๋„์˜ ๋ฌธ์ œ๋กœ ์ถ”์  ๊ฐ€๋Šฅ(์ด๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ƒ์„ฑ)

    • [4]์™€ ์ž ์žฌ์ ์œผ๋กœ ๋ณ‘๋ ฌ

  • [x] 6. DirectoryServices ํŒจํ‚ค์ง€ ๊ฒŒ์‹œ

    • [x] 6.1. ๋ฏธ๋ฆฌ ๋ณด๊ธฐ DirectoryServices ํŒจํ‚ค์ง€ ๊ฒŒ์‹œ - dotnet/corefx#18090์—์„œ ์ถ”์ 

    • [ ] 6.2. ์ตœ์ข… DirectoryServices ํŒจํ‚ค์ง€ ๊ฒŒ์‹œ - dotnet/corefx#24909์˜ ์ผ๋ถ€๋กœ ์ถ”์ ๋จ

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์–ด๋–ค ๋‹จ๊ณ„์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ ์ค‘๋ณต ์ž‘์—…์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์— ์–ธ๊ธ‰ํ•˜๊ณ  ์กฐ์ •ํ•˜์‹ญ์‹œ์˜ค. @karelz ๋„ ๋ฌธ์ œ๋ฅผ ๊ณต๋™ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.


์›๋ž˜ ์ œ์•ˆ

์•ˆ๋…•ํ•˜์„ธ์š”, CoreCLR์—์„œ System.DirectoryServices์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์—์„œ Linux์—์„œ GAL ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•˜๊ณ  ์ด ์ž‘์—…์— Mono๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์ž‘๋™ํ•˜๊ณ  IsUserInGroup์ด ์‹คํŒจํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์—…ํ•˜๋ ค๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. http://stackoverflow.com/questions/2188954/see-if-user-is-part-of-active-directory-group-in-c-sharp-asp -๊ทธ๋ฌผ

๊ทธ๋ž˜์„œ ์ €๋Š” ์ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ CoreCLR์— ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ์šฐ๋ฆฌ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค!

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

area-System.DirectoryServices enhancement up-for-grabs

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

System.DirectoryServices๋ฅผ v1.1.0์šฉ .NET Core๋กœ ์ด์‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค(https://github.com/dotnet/corefx/milestones).

๋ชจ๋“  199 ๋Œ“๊ธ€

@vibronet

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ €๋„ ์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ํšŒ์‚ฌ์—์„œ LDAP๋ฅผ ํ†ตํ•ด Active Directory๋ฅผ ์ฟผ๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์ƒˆ ์•ฑ์„ ๋นŒ๋“œํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๊ณ„ํš๋œ ์ง€์›์ด ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๊ฒƒ์„ ์œ„ํ•ด ์‚ญ์ œ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์–ด๋””์—๋„ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ์ด๋ฏธ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

.NET CoreFX์—์„œ LDAP ๋ฐ Active Directory ์ง€์› ๊ตฌํ˜„์— ๋Œ€ํ•œ ์ƒˆ๋กญ๊ณ  ์‹ ์„ ํ•œ ๊ด€์ ์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

.NET Core์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Active Directory/LDAP ์†”๋ฃจ์…˜์ด ์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํด๋ฆฐ ์‹œํŠธ ๊ตฌํ˜„์ด๋“  System.DirectoryServices์˜ ํฌํŠธ์ด๋“  ์ €์—๊ฒŒ๋Š” ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. AD ์ธ์ฆ์ด ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์ค‘์‹ฌ Windows ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋งŽ์ด ์žˆ์œผ๋ฉฐ, LDAP ์ธ์ฆ์€ ํ”Œ๋žซํผ ๊ฐ„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ ๊ธ€๋จธ๋ฆฌ ๊ธฐํ˜ธ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์œ„์˜ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋Š” ์ฐธ๊ณ  ์‚ฌํ•ญ์— ๋™์˜ - ์ง์ ‘ ํฌํŠธ๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Active Directory ๋˜๋Š” ๋ชจ๋“  LDAP ๊ณต๊ธ‰์ž์— ๋Œ€ํ•ด ์ธ์ฆ์— ์•ก์„ธ์Šค(๋ฐ ๊ธฐํƒ€ ์ž‘์—… ์ˆ˜ํ–‰: ๊ฒ€์ƒ‰, ์ž ๊ธˆ ํ•ด์ œ, ์‚ญ์ œ ๋“ฑ)ํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. .

@NickCraver

์ง์ ‘ ํฌํŠธ๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Active Directory์— ๋Œ€ํ•ด ์ธ์ฆ [...]์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์•Œ์•„๋‘์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ์ ์šฉํ•œ ํฌํŠธ ๋Œ€ ์ฝ”์–ด ๋ ˆ์ด๋ธ”์„ ๋„ˆ๋ฌด ๋งŽ์ด ์ฝ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ท€ํ•˜์™€ ๊ฐ™์€ ๊ณ ๊ฐ์ด ์•ฑ์„ .NET Core๋กœ ์ด์‹ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ .NET Core ์ œํ’ˆ์˜ ๊ฒฉ์ฐจ๋ฅผ ์ถ”์ ํ•˜๋Š” ์ œ ๋ฐฉ์‹์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

@terrajobst ๊ฐ“์ฑ  . ๋ชจ๋“ˆ์„ฑ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๋ฐ˜๋“œ์‹œ 1.0 ํ•ญ๋ชฉ์ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ(์–ด์จŒ๋“  RTM ์ดํ›„๋กœ ์˜ˆ์ •๋œ ๊ฒƒ์ฒ˜๋Ÿผ _์†Œ๋ฆฌ_), ์ €๋Š” ๊ทธ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด Opserver๋ฅผ ์ด์‹ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋  ๊ฒƒ์ด๋ฏ€๋กœ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด API ํ† ๋ก ์— ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. sysadmin ์ธก์—์„œ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฉด ํ•‘(ping)ํ•˜์‹ญ์‹œ์˜ค.

๋ง์— ๋˜ ๋‹ค๋ฅธ ๋ชจ์ž๋ฅผ ๋˜์ง€๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ๋„ ๋‚จ์€ ๊ฐ€์žฅ ํฐ ์ฐจ๋‹จ๊ธฐ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์ธ์ฆํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ง€๊ธˆ์€ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ์ง€์›ํ•  ๊ณ„ํš์ด ์ „ํ˜€ ์—†๋‹ค๋ฉด ์ด์— ๋Œ€ํ•œ ๊ณ„ํš์— ๋Œ€ํ•ด ๊ฐœ๋ฐœํŒ€์˜ ๋ˆ„๊ตฐ๊ฐ€๋กœ๋ถ€ํ„ฐ ๊ณต์‹ ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ง์ ‘ ํฌํŠธ๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”ํ•˜๋‹ค๊ณ  ๋Š๋ผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค

์™œ์š”? ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. DRY ์›์น™์— ๋”ฐ๋ผ ๋ชจ๋‘์—๊ฒŒ ๊ฐ€์žฅ ์‰ฌ์šด ์†”๋ฃจ์…˜์ด ์•„๋‹๊นŒ์š”?
๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ „์ฒด API๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด์ „ API(๋™์ผํ•œ ๋ฉ”์„œ๋“œ ์„œ๋ช…)์™€์˜ ์ผ๋ถ€ ์ผ๊ด€์„ฑ์ด ์†Œ๋น„์ž์—๊ฒŒ ๋œ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jasonwilliams200OK ๋ถ„๋ช…ํžˆ ๋ง์”€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ตฌ์ฒด์ ์œผ๋กœ DirectoryServices.ActiveDirectory ๋ฅผ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ƒ๊ฐ์— ์ธ์ฆ๊ณผ ๊ทธ ์ฃผ๋ณ€์˜ ๊ฒƒ๋“ค: ์˜ˆ๋ฅผ ๋“ค์–ด ๊ทธ๋ฃน ๋ฉค๋ฒ„์‹ญ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ 95-99% ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” _that_์˜ ์ง์ ‘ ์„œ๋ช… ํฌํŠธ๊ฐ€ ๊ฝค ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ์˜์žฅ์ด ์–ด๋–ค ์ด์œ ๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๊ฝค ๊ดœ์ฐฎ๊ณ  ๋‚˜์ค‘์— ์˜ค๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฐฉํ•ด๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฆ์€ ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๋ฌธ์„ ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Active Directory ์‚ฌ์šฉ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ASP.NET 5๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ • ์—ญํ• ๊ณผ ๋งคํ•‘ํ•˜๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ํ†ตํ•ฉํ•˜๋ฉด ASP.NET ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— Windows ์ธ์ฆ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํŠธ๋ผ๋„ท ์‚ฌ์ดํŠธ์—์„œ ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์šฐ๋ฆฌ์—๊ฒŒ๋„ ๋ฐฉํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ldap ์„œ๋ฒ„์— ๋Œ€ํ•ด ์ธ์ฆ, ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน ์ฟผ๋ฆฌ, ์ƒˆ ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน ์ƒ์„ฑ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋˜ํ•œ ๋‚˜๋ฅผ ์œ„ํ•œ ์ฐจ๋‹จ๊ธฐ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋ฅผ ์ฟผ๋ฆฌํ•˜๊ณ  ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

.NET Core rc1 ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Active Directory์— ๋Œ€ํ•ด ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•œ ์†”๋ฃจ์…˜์„ ์ƒ๊ฐํ•ด ๋ƒˆ์Šต๋‹ˆ๋‹ค. UserManager ํด๋ž˜์Šค์—์„œ CheckPasswordAsync ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๋ฌด์Šจ ์ƒ๊ฐ์„ํ•˜๋Š”์ง€ ์ œ๊ฒŒ ์•Œ๋ ค์ฃผ์„ธ์š”.

๋จผ์ € ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฉ”์ผ ์ฃผ์†Œ์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋Œ€์‹  AD ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋“ฑ๋ก ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์‚ฌ์šฉ์ž ์ด๋ฆ„์€ ๊ฐœ๋ณ„ ์‚ฌ์šฉ์ž ๊ณ„์ • ์ธ์ฆ์„ ์„ ํƒํ•  ๋•Œ ASP.NET 5 ํ…œํ”Œ๋ฆฟ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ApplicationUser ํด๋ž˜์Šค์˜ UserName ์†์„ฑ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋˜ํ•œ Password ์†์„ฑ์„ IdentityUser ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ธฐ๋ณธ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๋“ฑ๋ก ํŽ˜์ด์ง€ ์ปจํŠธ๋กค๋Ÿฌ๋Š” AD์—์„œ ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ฐพ๊ณ  ํ•ด๋‹น ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ AD ์ •๋ณด๋ฅผ ๋ณด์œ ํ•˜๋Š” JSON์„ ๋ฐ˜ํ™˜ํ•˜๋Š” Web API 2 ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. AD ์ •๋ณด๋ฅผ ๋ณด์œ ํ•˜๊ธฐ ์œ„ํ•ด ApplicationUser ํด๋ž˜์Šค์— ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฃผ์— ๋‚ด ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๋ฅผ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ Services ํด๋”์— ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ด๋ฆ„์„ ApplicationUserManager.cs๋กœ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํด๋ž˜์Šค ํŒŒ์ผ์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Identity;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.OptionsModel;
using [YourApp].Models;

namespace [YourApp].Services
{
    public class ApplicationUserManager : UserManager<ApplicationUser>
    {
        public ApplicationUserManager(IUserStore<ApplicationUser> store, IOptions<IdentityOptions> optionsAccessor, IPasswordHasher<ApplicationUser> passwordHasher,
                                      IEnumerable<IUserValidator<ApplicationUser>> userValidators, IEnumerable<IPasswordValidator<ApplicationUser>> passwordValidators,
                                      ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services, ILogger<UserManager<ApplicationUser>> logger,
                                      IHttpContextAccessor contextAccessor)
        : base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger, contextAccessor)
        {

        }

        public override async Task<bool> CheckPasswordAsync(ApplicationUser user, string password)
        {
            //Pass user.UserName and password to an ASP.NET Web API 2 method that 
            //does the Active Directory authentication and returns a bool.
        }
    }
}

๊ทธ๋Ÿฐ ๋‹ค์Œ Startup.cs ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค. .AddUserManager ์ถ”๊ฐ€() ์•„๋ž˜์™€ ๊ฐ™์ด ConfigureServices ๋ฉ”์„œ๋“œ์˜ AddIdentity ํ˜ธ์ถœ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

services.AddIdentity<ApplicationUser, IdentityRole>()
       .AddEntityFrameworkStores<ApplicationDbContext>()
       .AddUserManager<ApplicationUserManager>()
       .AddDefaultTokenProviders();

์ด๋ฅผ ํ†ตํ•ด ์ตœ์†Œํ•œ DirectoryServices ์ง€์›์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ์ •์ฑ…/ํด๋ ˆ์ž„ ๊ธฐ๋ฐ˜ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๋„์„œ๊ด€์— ์˜์กดํ•œ๋‹ค. ์ง€๊ธˆ์€ ์ด์‹ํ•  ์ˆ˜ ์—†์–ด ์•„์‰ฝ์Šต๋‹ˆ๋‹ค.

@ClintBailiff ์—ฌ๊ธฐ์—์„œ ์ฐจ์ž„์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ ์„ ์„ ํ†ตํ•ด ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋‹ค์‹œ ์‚ฌ์šฉ์ž์˜ ์•”ํ˜ธ๋ฅผ ๋ฆด๋ ˆ์ดํ•˜๋Š” ๊ฒƒ์€ _์ •๋ง๋กœ_ ๋‚˜์œ ์ƒ๊ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋ณด์•ˆ ๊ตฌ๋ฉ์ž…๋‹ˆ๋‹ค.

@terrajobst ์ด๊ฒƒ์€ Opserver์™€ ๊ฐ™์€ ๋” ํฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํฌํŒ… ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@NickCraver ์ž๊ฒฉ ์ฆ๋ช…์„ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ์ œ์•ˆํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์Šน์ธ๋œ ์‚ฌ์šฉ์ž๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“  ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ/์„œ๋น„์Šค์— SSL์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž๊ฒฉ ์ฆ๋ช…์„ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ๋ณด๋‚ด์ง€ ์•Š์œผ๋ ค๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ๋ถ„๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ตœ์†Œํ•œ System.DirectoryServices.Protocols ์˜ ํฌํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ์ง€์ง€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. System.DirectoryServices.ActiveDirectory ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” AD ์„œ๋ฒ„์™€๋งŒ ํ†ต์‹ ํ•˜๊ธฐ๋ฅผ ์ข‹์•„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๊ทผ์— LDAP ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์ด ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋” ๋„“์€ ๋ฒ”์œ„์˜ LDAP ์„œ๋ฒ„๋ฅผ ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ œ ์ƒ๊ฐ์—๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ด๋Ÿฌํ•œ ์ง€์›์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํ”„๋ ˆ์ž„์›Œํฌ์— ์ด๋ฏธ ์กด์žฌํ•˜๋ฏ€๋กœ ํฌํŠธ๊ฐ€ ๋” ๊ฐ„๋‹จํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค.

WTF asp ํŒ€์€ ์ด ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์ •๋ง ์ฐจ๋‹จ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค :(

CoreCLR์—์„œ LDAP ์ง€์›์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. AD ์„œ๋ฒ„์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•ด์•ผ ํ•˜๋Š” ASP.NET Core๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

System.DirectoryServices๋ฅผ v1.1.0์šฉ .NET Core๋กœ ์ด์‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค(https://github.com/dotnet/corefx/milestones).

@joshfree
๋˜ํ•œ ADLDS์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. System.DirectoryServices.AccountManagement๋„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

๋ช‡ ๋…„ ์ „์— ๋‚ด๊ฐ€ ์ผํ–ˆ๋˜ ํšŒ์‚ฌ๋Š” Novell(๋ชจ๋…ธ) LDAP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์šฐ๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Active Directory, OpenLDAP ๋ฐ Oracle ์‹œ์Šคํ…œ๊ณผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์œผ๋ฉฐ ํŽ˜์ด์ง• ์ปจํŠธ๋กค์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ผ๋ถ€ TLS ์ˆ˜์ • ์‚ฌํ•ญ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Linux์—์„œ ์‹คํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋œ PR์ด ์†Œ์œ ์ž์—๊ฒŒ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ CoreCLR์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ RC2๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์€ https://github.com/VQComms/CsharpLDAP/pull/1 ์—์„œ ์‹œ์ž‘๋˜์—ˆ์œผ๋ฉฐ ์ฃผ์†Œ ์ง€์ •์ด ํ•„์š”ํ•œ 17๊ฐœ์˜ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ค๋ฅ˜๊ฐ€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ Thread.Abort , ThreadInterruptedException ์ด๋ฉฐ Mono์—์„œ CoreCLR๋กœ TLS ์ŠคํŠธ๋ฆผ์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. SslStream ๊ด€์‹ฌ์ด ์žˆ๊ณ  CoreCLR์— ๋Œ€ํ•œ LDAP ์ง€์›์ด ํ•„์š”ํ•œ ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋„์™€์ฃผ์„ธ์š”.

ASP.NET Core ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(.NET Framework) RC2 ํ”„๋กœ์ ํŠธ๊ฐ€ System.DirectoryServices.AccountManagement๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ชจ๋‘ VS 2015 ์—…๋ฐ์ดํŠธ 2๋กœ ์ƒ์„ฑ๋˜๊ณ  ๋‘˜ ๋‹ค .NET Framework 4.6.1์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ๊ฐ์ •์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” LDAP ๋“ฑ์„ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๋ฌผ ์ด์‹์—์„œ ์ฃฝ์—ˆ์Šต๋‹ˆ๋‹ค.

@h3smith
๋‚ด ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. RC2 ๋ฆด๋ฆฌ์Šค๋กœ ์ด์ œ System.DirectoryServices.AccountManagement ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ท์Šคํƒ ๋‹ค๋“œ์—๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์ž‘๋™์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋ผ๊ฑด๋Œ€
์•ฝ 2-3์ฃผ ์•ˆ์— ๋ญ”๊ฐ€

2016๋…„ 6์›” 17์ผ ๊ธˆ์š”์ผ์— Clinton Bailiff [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@h3smith https://github.com/h3smith
๋‚ด ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. RC2๊ฐ€ ์ถœ์‹œ๋˜๋ฉด์„œ ์ด์ œ ๋‹ค์Œ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
_System.DirectoryServices.AccountManagement_๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/dotnet/corefx/issues/2089#issuecomment -226837679 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe/AAGapiY8HNzdakVdStwCFqvReT6kfSTcks5qMt_wgaJpZM4FF2fx
.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์‚ฌ์šฉ์ž๊ฐ€ LAN์—์„œ ๊ฐ๋„ ์›น ์•ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  AD์— ๋กœ๊ทธ์ธํ•˜๊ณ  aspnet core RC2์—์„œ WebAPI ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ(์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์•”ํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ )๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ˜ธ์ถœ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ? ๊ณง ๊ฐ€๋Šฅ?

์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ์˜ http ์š”์ฒญ์—์„œ withCredentials๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ User.Identity๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด์™€ ํด๋ ˆ์ž„์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ie ๋ฐ chrome์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ Firefox๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ Windows ์‚ฌ์šฉ์ž์™€ ์•”ํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋„๋ก ํŒ์—…์ด ์ž๋™์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์•ฝ ๋‘ ๋‹ฌ ์ „์— ๋™์ผํ•œ ๋ฌธ์ œ(์˜ˆ: LDAP ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉ์ž ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•จ)์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค. Novell LDAP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(https://www.novell.com/developer/ndk/ldap_libraries_for_c_sharp.html)๋ฅผ .net core(์—ฌ๊ธฐ https://github.com/dsbenghe/Novell ์ฐธ์กฐ)๋กœ ์ด์‹ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ์†”๋ฃจ์…˜์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ.Ldap.NETStandard). ๋„ˆ๊ฒŸ ํŒจํ‚ค์ง€๊ฐ€ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” OpenDJ LDAP ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๋ชจ๋“  LDAP ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ด์•ผ ํ•จ) - 1.5๊ฐœ์›” ์‚ฌ์šฉ์— ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@dsbenghe ์šฐ๋ฆฌ๋Š” Netstandard์—์„œ Novell LDAP lib ์ปดํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์šฐ๋ฆฌ ๊ฒƒ๋„ ํŽ˜์ด์ง•์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ @igorshmukler ๊ฐ€ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น„๊ตํ•˜๊ณ  ํ˜‘์—…ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์—์„œ WIP์ž…๋‹ˆ๋‹ค. https://github.com/VQComms/CsharpLDAP/tree/coreclrPort

@dsbenghe .NET Core ๊ตฌํ˜„์— ๋Œ€ํ•œ ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
nuget ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ ์‚ฌ์šฉ์ž์˜ ActiveDirectory ์•”ํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

using Novell.Directory.Ldap;

private async Task<JsonResult> LoginActiveDirectory(LoginModel model)
{
    var user = await _userManager.FindByNameAsync(model.Username);
    if (user != null)
    {
        var result = AuthenticateWithActiveDirectory(model.Username, model.Password);
        if(result == string.Empty)
        {
            await _signInManager.SignInAsync(user, false);
            return Json(new LoginResult {Success = true});
        }
        return Json(new LoginResult { Success = false, Message = result });
    }

    return Json(new LoginResult { Success = false, Message = "User not found in local database" });
}

AuthenticateWithActiveDirectory๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

private string AuthenticateActiveDirectory(string username, string password)
{
    const int ldapVersion = LdapConnection.Ldap_V3;
    var conn = new LdapConnection();

    try
    {
        conn.Connect(_loginSettings.LdapHost, _loginSettings.LdapPort);
        conn.Bind(ldapVersion, $"{_loginSettings.LdapDomain}\\{username}", password);
        conn.Disconnect();
    }
    catch (LdapException e)
    {
        return e.Message;
    }
    catch (System.IO.IOException e)
    {
        return e.Message;
    }

    return string.Empty;
}

๊ฐ„๋‹จํ•œ ๋„์šฐ๋ฏธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Angular ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ง„ํ–‰ ์ƒํ™ฉ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

public class LoginResult
{
    public bool Success { get; set; }
    public string Message { get; set; }
}

UWP์˜ ๊ฒฝ์šฐ UserVoice์—์„œ ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์š”์ฒญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. https://wpdev.uservoice.com/forums/110705/suggestions/12556779

cc @tquerec @jimuphaus ๋Š” .NET Core์— ๋Œ€ํ•œ System.DirectoryServices ์ง€์›์— ๋Œ€ํ•ด ์ž‘์—…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†์–ด! ์˜ˆ์ƒ ์‹œ๊ฐ„? ๋””์ž์ธ ์ŠคํŽ™?

๋งˆ์นจ๋‚ด ์ด์‹๋˜๋ฉด ๋‹ค์Œ ํ•ญ๋ชฉ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

using(var context = new PrincipalContext(ContextType.Domain, "Domain"))
     return context.ValidateCredentials("user", "password");

ํ•ด๋‹น ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์— ์‚ฌ์†Œํ•œ ๊ฒฐํ•จ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฝค ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

@GArrigotti ํ…Œ์ŠคํŠธ์—์„œ LdapDirectoryIdentifier๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ PrincipalContext๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค .

using System.DirectoryServices.Protocols;
/////////
try
{
    using (LdapConnection conn = new LdapConnection(new LdapDirectoryIdentifier(domain)))
    {
        conn.Bind(new System.Net.NetworkCredential(username, password, domain));
        return true;
    }
}
catch (LdapException e)
{
    return false;  
}

ETA๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๋‹ฌ๋ง์— ์™„๋ฃŒ๋  ์˜ˆ์ •์ธ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ...

@johnkwaters ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— AD ์ฝ”๋“œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค(์ € ํฌํ•จ)์€ ASP.NET Core ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ ˆ๊ฑฐ์‹œ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ VS 2015 ์—…๋ฐ์ดํŠธ 3์—์„œ ์›น ์•ฑ ๋ฐ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์›น ์•ฑ ๋ฐ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ .NET Framework 4.61์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— AD ์ฝ”๋“œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์žˆ๋‚˜์š”?

.NET Core TxM์šฉ project.json์—์„œ PCL ๋‹ค์Œ์— "imports": "portable-net45+win8" ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” Mono PCL Reference Assemblies๊ฐ€ Unix์—์„œ ์ž๊ธ‰์ž์กฑ์„ ํ—ˆ์šฉํ•˜๋Š” "์ˆœ์ˆ˜ ๋„๋„ท ์ฝ”์–ด" ์†”๋ฃจ์…˜์ด ์•„๋‹ˆ๋ผ Unix์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์นจ๋ฌต์‹œํ‚ค๋Š” ๊ฒƒ์€ ์ข‹์€ ํ•ดํ‚น์ด์ง€๋งŒ CoreFX BCL์— ํ•ด๋‹น ๊ตฌํ˜„์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ netcoreapp/netstandard1.x์— ๋Œ€ํ•ด "imports" ๊ฐ€ ์—†๋Š” project.json์ด ํ•ญ์ƒ ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ˆ: https://github.com/dsbenghe/Novell.Directory.Ldap.NETStandard/blob/ace2706/Novell.Directory.Ldap.NETStandard/project.json#L11

ETA์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ์ด ์žˆ๋Š” ์…€ํ”„ ์„œ๋น„์Šค๋Š” ์–ด๋””๋กœ ๊ฐ€์•ผ ํ•˜๋‚˜์š”?

_์ •๋ง_ ์ด ๊ธฐ๋Šฅ์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค!

์ด ๊ธฐ๋Šฅ๋„ ์ •๋ง ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค!!

์ด ๊ธฐ๋Šฅ๋„ ์ •๋ง ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค!!

์ €๋„ ์ด ๊ธฐ๋Šฅ์ด ์ ˆ์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

์–˜๋“ค์•„, ๋‹น์‹ ์€ ๋ชจ๋‘ ๋ฉ”์ธ ๊ฒŒ์‹œ๋ฌผ์— ๋ฐ˜์‘์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜๋Š” 2๋ช…์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋„ˆ๊ฒŸ์— ์˜ฌ๋ ค๋†“์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๊ฒƒ์˜
๋ชจ๋“  OSS. ํŒจํ‚ค์ง€๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์œผ๋ฉด PR์„ ๋ณด๋‚ด์‹ญ์‹œ์˜ค.

2016๋…„ 9์›” 8์ผ 12:19 Mikhail Orlov ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

์–˜๋“ค์•„, ๋‹น์‹ ์€ ๋ชจ๋‘ ๋ฉ”์ธ ๊ฒŒ์‹œ๋ฌผ์— ๋ฐ˜์‘์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/dotnet/corefx/issues/2089#issuecomment -245567328 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe-auth/AAGappY2sfk1GWkY7w1IcuAJSa_uKFHwks5qn-8qgaJpZM4FF2fx
.

@jchannon Novell LDAP์˜ ๊ฒฝ์šฐ +1์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๊ณ  LDAP ๊ตฌํ˜„์— ๊ฑฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ถ”์ƒํ™”ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค ;)

์˜ˆ, @jchannon Novell LDAP๋„ ์‚ฌ์šฉํ•˜๊ฒŒ

๋‚ด๊ฐ€ ์ „์— ๊ทธ๋ ‡๊ฒŒ ๋งํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, https://github.com/VQComms/CsharpLDAP/commits/coreclrPort ์— ๋ชจ๋“  ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์šฐ๋ฆฌ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค ...

@h3smith @johnkwaters ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜์„ธ์š” ๐Ÿ˜„

Novell๋กœ ์‹œ๋„ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒ˜ํ”Œ์€ ์ถฉ๋ถ„ํžˆ ์ข‹์•„ ๋ณด์ด์ง€๋งŒ Novell LDAP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฃน์—์„œ ์‚ฌ์šฉ์ž ๊ตฌ์„ฑ์›์„ ์ถ”๋ฐฉ(์ œ๊ฑฐ)ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
userPassword๋ฅผ ๋ณผ ์ˆ˜ ์—†๊ณ  LDAP ์„œ๋ฒ„์— ์„ค์ •๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— MSAD LDAP์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฑด ์ •๋ง ํ•„์š”ํ•ด!

@joshfree ๋˜๋Š” ์•„๋Š” ์‚ฌ๋žŒ...
ActiveDirectoryServices.AccountManagement์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ, ํฌํŠธ๊ฐ€ 1.1 ๋˜๋Š” 1.2๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ 1.1์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค(๊ณง ๋งˆ๋ฌด๋ฆฌ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค). @tquerec , ์—ฌ๊ธฐ์— ๋‹น์‹ ์˜ ๊ณ„ํš์— ๋Œ€ํ•ด ์˜๊ฒฌ์„ ๋ง์”€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ฐธ์กฐ: @danmosemsft

1.1์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ณ„ํš์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ํฐ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ Microsoft๋Š” ์ด๋Ÿฌํ•œ ํ†ตํ•ฉ์„ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ ํ•œ ํ‘œ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ .NET Core์—์„œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ํˆฌ์ž๋ฅผ ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์†Œ์„ค ํ”„๋กœ์ ํŠธ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ์Šค๋„ˆํ”„๊นŒ์ง€๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

๋˜ ํ•œ ํ‘œ. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ชจ๋“  ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด๋ผ๋Š” ๋™์ผํ•œ ์ง„์ˆ ์„ ๋ฐ˜๋ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@nevcoBpalacio ๋‚˜๋Š” ๊ทธ๋“ค์ด ์šฐ๋ฆฌ์—๊ฒŒ azure Active Directory๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค๊ฐ€ ์ง‘์— ๋‚จ์•„ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ธฐ์—… ๊ณ„์•ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๊ฒฐ์ฝ” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ์—ฐ๋ฐฉ ๋ฐ ํ˜„์žฌ ์ง€์—ญ ์นด์šดํ‹ฐ์˜ ์ •๋ถ€ ๊ธฐ๊ด€์—์„œ ์ผํ•ด ์™”์œผ๋ฉฐ ์–ด๋Š ์ชฝ์ด๋“  ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๋˜๋Š” ์˜จํ”„๋ ˆ๋ฏธ์Šค์˜ ์ผ๋ถ€ ๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค์— ํ†ตํ•ฉํ•˜๋ ค๋ฉด ์—ฌ์ „ํžˆ ์ผ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค ๋˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹ญ์–ต ๋‹ฌ๋Ÿฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ณต๋™ ๊ฐœ๋ฐœํ–ˆ์œผ๋ฉฐ ํ•ญ์ƒ ๋””๋ ‰ํ„ฐ๋ฆฌ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋‹ค๋ฅธ ํˆฌํ‘œ ์ด์ƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ๋‹น์‹ ์ด ๋ฌด์—‡์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ง„์ˆ ์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๊ฒƒ์ด ์›๋ž˜ ์ด์ „ .NET ๋ฆด๋ฆฌ์Šค์—์„œ ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ด์—ˆ๋‹ค๋Š” ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. CORE์˜ ๋ณด๋‹ค ๊ฐœ๋ฐฉ์ ์ธ ๊ตฌ์กฐ๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ถ”์ง„๋ ฅ์„ ์–ป์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Microsoft๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ๋กœ ์„ ํƒํ•œ ๊ฒƒ์ด๋ผ๋ฉด, ์•„๋งˆ๋„ ๊ทธ๋“ค์ด ์ด๊ฒƒ์„ ๋งํ•˜๊ณ  ์ œ๊ฐ€ ๋†“์ณค๋‹ค๋ฉด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ฃผ๋„์ ์œผ๋กœ ์‹œ๊ฐ„์„ ํˆฌ์žํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, .NET Core์— System.DirectoryServices๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค!

์šฐ๋ฆฌ๋Š” ๋‚ด๋…„ ์•ˆ์— System.DirectoryServices.Protocols๋ฅผ ์ด์‹ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ๋” ํ™•์‹คํ•œ ๋‚ ์งœ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. System.DirectoryServices ๋˜๋Š” System.DirectoryServices.AccountManagement๋ฅผ ์ด์‹ํ•  ๊ณ„ํš์€ ์•„์ง ์—†์ง€๋งŒ ๊ด€์‹ฌ์„ ์ธก์ •ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๊ธฐ๋Šฅ์ด ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@tquere ์ €๋Š” ํ”„๋กœํ† ์ฝœ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณ„์ • ์ž ๊ธˆ ํ•ด์ œ ๋ฐ ๊ณ„์ • ์•”ํ˜ธ ์žฌ์„ค์ •์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Active Directory ์…€ํ”„ ์„œ๋น„์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ UserPrincipal์„ ์‚ฌ์šฉํ•˜๊ณ  FindByIdentity, UnlockAccount, SetPassword, ExpirePasswordNow์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ํ”„๋กœํ† ์ฝœ์—์„œ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ํ”„๋กœํ† ์ฝœ์ด ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๊ตฌํ˜„์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. AccountManagement๋Š” ActiveDirectory ์ž‘์—…์„ ์œ„ํ•œ ๋” ๋‚˜์€ ์ถ”์ƒํ™”์ž…๋‹ˆ๋‹ค.
๊ฐ์‚ฌ ํ•ด์š”
๋ก๋งˆ์ด์Šคํ„ฐ

@nevcoBpalacio ๋Š” ๋‚ด๊ฐ€ ๋™์˜ํ•˜๋Š” ํ•œ ํ‘œ ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋” ์šฐ์„ ์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@CalebMacdonaldBlack ์‚ฌ์šฉ ํŒจํ„ด๊ณผ ์™œ ํ•„์š”ํ•œ์ง€์— ๋Œ€ํ•œ @tquerec ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์—†๋Š” ๋” ๋งŽ์€ ์ฐฌ์„ฑ ๋˜๋Š” "๋™์˜ํ•ฉ๋‹ˆ๋‹ค/์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค"๋Š” ํ˜„์žฌ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋†’์ด๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค... ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์šฐ๋ฆฌ์˜ ์šฉ๋„๋Š” LDAP ์Šค์บ”/๊ฒ€์ƒ‰, ์ž๊ฒฉ ์ฆ๋ช… ํ™•์ธ์„ ์œ„ํ•œ BIND ์ˆ˜ํ–‰, LDAP ๊ฐœ์ฒด(์‚ฌ์šฉ์ž, ๊ทธ๋ฃน) ์ถ”๊ฐ€/์ œ๊ฑฐ, ๊ทธ๋ฃน์˜ ๊ตฌ์„ฑ์› ์ˆ˜์ • ๋“ฑ์ž…๋‹ˆ๋‹ค.

@tquere ์ €๋Š” System.DirectoryServices.AccountManagement๊ฐ€ ์ •๋ง ํ•„์š”ํ•˜๋ฏ€๋กœ Active Directory์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๊ณ  ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ทธ๋ฃน์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

h3smith์— ํ™•์‹คํžˆ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” v1์— ์ด๊ฒƒ์„ ํ•„์š”๋กœ ํ–ˆ๊ณ  ๋Œ€์‹ ์— ์šฐ๋ฆฌ๊ฐ€ ํ•จ๊ป˜ ํ˜ธ๋ฒจ๋งํ•œ(ํŠนํžˆ ๋ณต์ œ ๋น„ํŠธ) ์ƒˆ๋กœ์šด ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•ด์•ผ ํ–ˆ์œผ๋ฉฐ ์œ ์ง€ ๊ด€๋ฆฌ ๋“ฑ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ธํ•ด ์Šฌํ””์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ .NETCore๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€์ž‘์šฉ์œผ๋กœ ์•ˆ์ข‹์•„๋ณด์ž„..

@liquidboy

์šฐ๋ฆฌ๋Š” v1์— ์ด๊ฒƒ์„ ํ•„์š”๋กœํ–ˆ์Šต๋‹ˆ๋‹ค

.NET Core v1์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? -- ์™„๋ฃŒ๋˜์–ด ๋ฐฐ์†ก๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ 1.2์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๋œป์ด์—ˆ๋‚˜์š”?

๋Œ€์‹  ์†Œ์„ค์˜ ๊ธธ์„ ๊ฐ€์•ผ ํ•œ๋‹ค

๋ฌด์Šจ ๋œป์ธ๊ฐ€์š”? (DirectoryServices์— ๋Œ€ํ•œ ์ปจํ…์ŠคํŠธ๊ฐ€ ์—†์–ด ์ฃ„์†กํ•˜์ง€๋งŒ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ๊ด€์ ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์„ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.)

@karelz ๋Š” ์ด ์Šค๋ ˆ๋“œ์—์„œ "novel"์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋ฌด์Šจ ๋ง์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํŒ€์˜ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž(dsbenge)๋Š” ์šฐ๋ฆฌ๊ฐ€ ์†Œ์„ค์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ๊ฒฉ์ฐจ์— ๋Œ€ํ•ด (๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜) ๋…ผํ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. [์œ„ ๋Œ“๊ธ€ ๋งํฌ https://github.com/dotnet/corefx/issues/2089#issuecomment -228043297]

๊ทธ๋ฆฌ๊ณ  ๋„ค, ์ด๋ฏธ ์ถœ์‹œ๋œ .NET Core v1์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” 1๋…„ ๋„˜๊ฒŒ ์†”๋ฃจ์…˜์„ ๊ฐœ๋ฐœํ•ด ์™”์œผ๋ฉฐ ๋‹น์‹œ์—๋Š” ์ข‹์€ DirectoryServices ์†”๋ฃจ์…˜์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. .

@liquidboy ๋งํฌ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. Mono์— ์žˆ๋Š” ๊ฒฝ์šฐ .NET Core AFAIK์—์„œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @tquerec ๊ด€์‹ฌ์„ ๊ฐ์•ˆํ•  ๋•Œ ํŒ€์—์„œ ๊ณ ๋ คํ•  ์‚ฌํ•ญ์ž…๋‹ˆ๊นŒ?

@tquerec : ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
System.DirectoryServices, System.DirectoryServices.AccountManagement, System.DirectoryServices.ActiveDirectory ๋ฐ System.DirectoryServices.Protocols.

์œ„์˜ ๋‹ต๋ณ€์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Active Directory(๋ฐ ๊ธฐํƒ€ LDAP ์„œ๋ฒ„) ์‚ฌ์šฉ์ž, ๊ทธ๋ฃน, ์†์„ฑ์— ์—ฐ๊ฒฐํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์—๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. .Net Core์—์„œ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ActiveDirectory์— ๋Œ€ํ•ด ์ธ์ฆํ•˜๋Š” ๋ชจ๋“  ์•ฑ์„ .NET Core๋กœ ์ด์‹ํ•˜๋ ค๋ฉด ์ด๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งค์šฐ ๊ธฐ๋ณธ์ ์ด๋ฉฐ ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ๋ฆด๋ฆฌ์Šค๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ์„ ํฌํŒ… ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€๋ฉ๋‹ˆ๋‹ค.

.NET Core ๋กœ๋“œ๋งต ํŽ˜์ด์ง€(https://github.com/dotnet/core/blob/master/roadmap.md)์—๋Š” .NET Core 1.2์— ๋Œ€ํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์œ ํ˜•์˜ ๋Œ€๊ทœ๋ชจ ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค."

System.DirectoryServices๋ฅผ ์ด์‹ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ ๊ณ„ํš์— ์•„์ฃผ ์ž˜ ๋ถ€ํ•ฉํ•˜๋ฉฐ ์‹ค์ œ๋กœ 1.2 ๋ฆด๋ฆฌ์Šค์˜ ์ผ๋ถ€์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด 5(์œ ๋กœ) ์„ผํŠธ๋งŒ :)

๋ช…ํ™•ํžˆ ํ•˜์ž๋ฉด: 1.2์—์„œ ํฌํŒ…๋œ API๋Š” ์‚ฌ์šฉ ๋ฐ์ดํ„ฐ(๊ทธ๋ฆฌ๊ณ  ๋“œ๋ฌผ๊ฒŒ ๋ณต์žก์„ฑ)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. @weshaggard @danmosemsft ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ๋ ค ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? System.DirectoryServices๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์€ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ผ์น˜ํ•˜๋„๋ก ์„ ํƒํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ชฉ๋ก์€ ์—ฌ๊ธฐ ์— ์žˆ์Šต๋‹ˆ๋‹ค. @weshaggard ๋Š” ๊ทธ๊ฐ€ ๊ทธ ๋ชฉ๋ก์„ ์–ด๋–ป๊ฒŒ ์„ ํƒํ–ˆ๋Š”์ง€ ๋‚˜์—๊ฒŒ ์ƒ๊ธฐ์‹œ์ผœ์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (Mono์—๋Š” S.DirectoryServices๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค)

System.DirectoryServices.Protocols๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ActiveDirectory(๋ฐ ๊ธฐํƒ€ ldap ์„œ๋ฒ„)์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด S.DS.Protocols๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” MS๊ฐ€ S.DS.Protocols๋ฅผ ํฌํŒ…ํ•˜๊ณ  MS ๋˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์„ ํ˜ธํ•˜์—ฌ ์ด๊ฒƒ ์œ„์— ์‚ฌ์šฉ์ž/๊ทธ๋ฃน ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ผ์น˜์‹œํ‚ค๊ธฐ๋กœ ์„ ํƒํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ชฉ๋ก์€ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. @weshaggard ๋Š” ๊ทธ๊ฐ€ ๊ทธ ๋ชฉ๋ก์„ ์–ด๋–ป๊ฒŒ ์„ ํƒํ–ˆ๋Š”์ง€ ๋‚˜์—๊ฒŒ ์ƒ๊ธฐ์‹œ์ผœ์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (Mono์—๋Š” S.DirectoryServices๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค)

์ดˆ๊ธฐ ์‹œ๋”ฉ์€ Xamarin ํ”„๋กœํ•„์„ .NET Framework์™€ ๊ต์ฐจํ•˜์—ฌ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋…ธ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์ธ Xamarain ํ”„๋กœํ•„์€ DirectoryServices๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๊ฒƒ์ด ๊ต์ฐจ์ ์— ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? Microsoft ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ธ์ฆ ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์•ฝ๊ฐ„์˜ ๋ฐฉํ•ด ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ Azure์™€ AAD์— ์ค‘์ ์„ ๋‘๋‚˜์š”? ์•„๋‹ˆ๋ฉด ์ด๋ฅผ ํ”Œ๋žซํผ ๊ฐ„์— ์ด์‹ํ•˜๋Š” ๊ฒƒ์ด ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•ด ๋” ํฐ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ์ฐจ๋‹จ๊ธฐ์ž…๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์„œ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? 2.0์€ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๊ณ  _๋ชจ๋“  ๊ฒƒ์ด_ ์ž‘๋™ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ •๋ง ๋ถˆํ–‰ํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งŽ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ€์ƒ ํ˜„๊ด€์ž…๋‹ˆ๋‹ค. IMO๋Š” ์šฐ์„ ์ˆœ์œ„ ๋ฉด์—์„œ ๋ถ€๋ถ„ ์ฐจ๋‹จ์ด ์•„๋‹ˆ๋ผ ๋ณธ์งˆ์ ์œผ๋กœ ์ „์ฒด ์ฐจ๋‹จ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

.NET Standard์˜ ์ผ๋ถ€๊ฐ€ ๋˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ .NET Core์—์„œ ์ด๊ฒƒ์„ ์ง€์›ํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ๋ฐ์—๋Š” ์ด๊ฒฌ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ์–ธ์ œ์˜ ๋ฌธ์ œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. @tquerec ๊ฐ€ ์ด ์ง€์—ญ์„ ์†Œ์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ์‚ฌ๋žŒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

.NET Foundation์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฌผ์—ˆ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌ์ฒด์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
System.DirectoryServices, System.DirectoryServices.Protocols, System.DirectoryServices.AccountManagement

๊ทธ๋ ‡๋‹ค๋ฉด @tquerec , .NET Core 1.2์— ๋Œ€ํ•ด System.DirectoryServices์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ตœ์†Œํ•œ System.DirectoryServices.Protocols. ๊ทธ๊ฒŒ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

[@tquerec์˜ ์ถ”๊ฐ€ ์ •๋ณด๋กœ ์—…๋ฐ์ดํŠธ๋จ]
์›”์š”์ผ์— @tquerec๋‹˜ ์„ ๋งŒ๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ชจ๋‘์—๊ฒŒ ์“ธ ๋นš์„ ์ง€๊ณ  ์žˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ:

  • ์ฒด๊ณ„. DirectoryServices ๋Š” Linux/Mac์—์„œ ์™„์ „ํžˆ ์•Œ๋ ค์ง€์ง€ ์•Š์€ Windows ์ „์šฉ(๋ชจ๋“  ๊ตฌํ˜„์ด ์žˆ๋Š” Windows DLL์„ ํ˜ธ์ถœํ•จ)์—์„œ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹œ์Šคํ…œ.๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค. AccountManagement ๊ฐ€ ๊ทธ ์œ„์— ์žˆ์œผ๋ฏ€๋กœ Windows์—์„œ๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ณ  Linux/Mac์—์„œ๋Š” ์•Œ๋ ค์ง€์ง€ ์•Š์Œ
  • ์‹œ์Šคํ…œ.๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค. ActiveDirectory ๋Š” Windows์—์„œ๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅ(๋งŽ์€ Windows ์ „์šฉ API๋ฅผ ํ˜ธ์ถœํ•จ)
  • ์‹œ์Šคํ…œ.๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค. ํ”„๋กœํ† ์ฝœ ์€ Windows์˜ ๊ฒฝ์šฐ ์ƒ๋‹นํžˆ ๋‹จ์ˆœํ•ด์•ผ ํ•˜๊ณ  Linux์˜ ๊ฒฝ์šฐ ๋” ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์‚ฌ์šฉํ•  LDAP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„์•ผ ํ•จ).
    ์šฐ๋ฆฌ๋Š” @tquerec ์™€ ํ•จ๊ป˜ ์ž‘์—… ์ž๊ธˆ์„ ์กฐ๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” 1.2์— ์ ํ•ฉํ•˜์ง€๋งŒ ์•„์ง ์•ฝ์†์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฐ์ •์€ ์ตœ์†Œ 2์ฃผ๊ฐ€ ์†Œ์š”๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋‘์—๊ฒŒ ์งˆ๋ฌธ :

  • ์œ„์˜ Windows ์ „์šฉ ๋ฒ”์œ„๊ฐ€ ์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€์— ํ—ˆ์šฉ๋ฉ๋‹ˆ๊นŒ? (Sys.DirSer ๋ฐ Sys.DirSer.AccountManagement ๋ฐ Sys.DirSer.ActiveDirectory)
  • Sys.DirSer.Protocols Linux๊ฐ€ 1.2 ์ดํ›„์— ์ถœ์‹œ๋˜๊ฑฐ๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ์—ฌ์— ์˜์กดํ•œ๋‹ค๋ฉด ์ด๊ฒƒ์ด ์ฃผ์š” ์ฐจ๋‹จ ์š”์†Œ๊ฐ€ ๋ ๊นŒ์š”?

@karelz System.DirectoryServices.ActiveDirectory๋Š” ๋‹ค์ˆ˜์˜ Windows ์ „์šฉ API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฏ€๋กœ S.DS ๋ฐ S.DS.AM๊ณผ ๋™์ผํ•œ ๋ฒ„ํ‚ท์— ์†ํ•ฉ๋‹ˆ๋‹ค.

@karelz 1.2์— ๋Œ€ํ•œ Windows ์ „์šฉ ์†”๋ฃจ์…˜์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ž‘๋™ํ•˜๋Š” Windows ์ „์šฉ ์†”๋ฃจ์…˜์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

"frameworks": {
    "net452": {
      "frameworkAssemblies": {
        "System.DirectoryServices": "4.0.0.0",
        "System.DirectoryServices.AccountManagement": "4.0.0.0"
      }
    }
  },

@rock-meister .NET Core๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์–ธ๊ธ‰ํ•œ ๊ฒƒ์€ "์ „์ฒด" .NET 4.5.2 ์ด์ƒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, Windows ์ „์šฉ ์ง€์›์€ ์šฐ๋ฆฌ์—๊ฒŒ ์—„์ฒญ๋‚œ ์ฐจ๋‹จ ํ•ด์ œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. .NET Core ์ด์‹์„ ์œ„ํ•œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ ๋น„ํŠธ๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ ๋‚˜์ค‘์— "๋ฌด๋ฃŒ๋กœ" ํ”Œ๋žซํผ ์ง€์›์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌํŠธ์— _starting_ํ•˜๋Š” ๊ฒƒ์กฐ์ฐจ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์€ ํฐ ์Šน๋ฆฌ์ž…๋‹ˆ๋‹ค.

Windows ์ƒ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ๋„ ํฐ ์Šน๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ๋Œ€๊ธฐ์—…๋“ค์ด ์ด๊ฒƒ์„ ์—„์ฒญ๋‚œ ์Šน๋ฆฌ๋กœ ์—ฌ๊ธธ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์ตœ์‹  ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ ๊ณ„์† ์•Œ๋ ค์ค˜. ๊ฐ์‚ฌ ํ•ด์š”.

@karelz ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, 1.2์— ๋Œ€ํ•œ Windows ์ „์šฉ ๋ฒ”์œ„ ์ง€์ •์ด ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
๋ก๋งˆ์ด์Šคํ„ฐ

Linux /LDAP๋ฅผ ์ง€์›ํ•˜๋Š” System.DirectoryServices.Protocols๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์˜ ์ตœ์šฐ์„  ์ˆœ์œ„์ž…๋‹ˆ๋‹ค.

ps windows ์ „์šฉ ๋ฒ”์œ„ ์ง€์ •์€ .netcore / .netstandard์˜ ๋ชฉํ‘œ์— ๋ฐ˜๋Œ€๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋น„ AD LDAP ์„œ๋ฒ„๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ์–ผ๋งˆ ์ „์— System.DirectoryServices ์—์„œ System.DirectoryServices.Protocols ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. Protocols ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์•ก์„ธ์Šคํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ .NET Core๋กœ ์ด์‹ํ•˜๋Š” ๋ฐ ํ•œ ๊ฑธ์Œ ๋” ๋‹ค๊ฐ€๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋ฉด ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. .NET Core๋กœ ์ด๋™ํ•˜๋ ค๋Š” ์ฃผ์š” ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜๋Š” ํ”Œ๋žซํผ ์ด์‹์„ฑ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

.NET Core์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์€ Docker๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์™„์ „ํžˆ ํ”Œ๋žซํผ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Windows ์ „์šฉ LDAP ์ง€์›์„ ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒƒ์€ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ ๋…ผ์˜ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํˆฌํ‘œ๋Š” ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ธ ๊ฒฝ๋กœ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค ๐Ÿฆƒ

ํ”Œ๋žซํผ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ์˜๊ฒฌ์— ๋™์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹ฌ์„ฑ๋  ๋•Œ๊นŒ์ง€ ์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋งˆ์Œ์ด ์•„ํ”„๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋” ๋†’์€ ์ฐจ์›์—์„œ ๊ฒ€ํ† ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋…์˜ ๋ณต์žก์„ฑ์ž…๋‹ˆ๊นŒ? AD, Novell ๋“ฑ์˜ ์—ฌ๋Ÿฌ ๋””๋ ‰ํ† ๋ฆฌ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ(๋ถˆ๊ฐ€๋ถ„ํ•œ) ์ธํ„ฐํŽ˜์ด์Šค ์†”๋ฃจ์…˜์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค... ์ฆ๊ฑฐ์šด ํœด์ผ ๋ณด๋‚ด์„ธ์š”!

๊ฐœ์ธ์ ์œผ๋กœ Windows ์ „์šฉ ๋ฒ”์œ„๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ์‚ด ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ œ ์ƒ๊ฐ์—๋Š” ์ด๊ฒƒ์€ .NET Core ๋ฐ ์ด์‹์„ฑ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค.
ํ”Œ๋žซํผ์— ๋…๋ฆฝ์ ์ธ ์†”๋ฃจ์…˜์ด ์ดˆ์ ์„ ๋งž์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. .NET Core๋Š” ํ”Œ๋žซํผ ๊ฐ„์ด์–ด์•ผ ํ•˜๊ณ  ๊ธฐ๋Šฅ/API๋Š” ์ง€์›๋˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!
๋”ฐ๋ผ์„œ System.DirectoryServices.Protocols๊ฐ€ ๋จผ์ € ์ด์‹/๊ตฌํ˜„๋  ์˜ˆ์ •์ด๋ผ๋ฉด Linux์—์„œ๋„ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ๋Š” ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ธ ์†”๋ฃจ์…˜์ด ๋ชฉํ‘œ์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. Windows์— ์•„์ง ์„ค์น˜ํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ์ €์™€ ๊ฐ™์€ ๊ธฐ์—…(AD) ํ™˜๊ฒฝ์—์„œ ํ”Œ๋žซํผ์„ ์‹คํ—˜ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ๋งŽ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฐฉํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‹น๋ถ„๊ฐ„ Windows ์ „์šฉ ์†”๋ฃจ์…˜์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ๊ฐ„ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€๋Š” Windows ์ „์šฉ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ๋‹ค๊ณ  ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Active Directory์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ 99.9%๊ฐ€ Windows ์ƒ์ž์—์„œ ๊ฐœ๋ฐœ ์ค‘์ธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ ์ธก์—์„œ ์ž๊ธˆ ์กฐ๋‹ฌ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(~2์ฃผ ํ›„ ์—…๋ฐ์ดํŠธ ์˜ˆ์ƒ). ์ด๊ฒƒ์€ ํ˜„์žฌ ์•„์ง .NET Standard 2.0์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ API์˜ ์ตœ์šฐ์„  ์ˆœ์œ„์ž…๋‹ˆ๋‹ค.

Windows ๊ตฌํ˜„ ๋ฐ/๋˜๋Š” Linux ๊ตฌํ˜„์— ๊ธฐ๊บผ์ด ๋„์›€์„ ์ค„ ์‚ฌ๋žŒ์ด ์ฃผ๋ณ€์— ์žˆ์Šต๋‹ˆ๊นŒ? (Desktop์—์„œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋นŒ๋“œ + ์ผ๋ถ€ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ถ”๊ฐ€ ๋งˆ์‚ฌ์ง€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.)

@karelz ์ €๋Š” Linux ์ธก๋ฉด์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Windows ๋ฐ ๋น„ Windows ์ธ์ฆ(์˜จํ”„๋ ˆ๋ฏธ์Šค) ๋ชจ๋‘์— ๋Œ€ํ•ด ์ด ์ง€์›์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฐจ๋‹จ๊ธฐ์ด๋ฉฐ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด .NET ์ฝ”์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค(์ด์ „์—๋Š” Linux ์ธก์—์„œ๋Š” Mono, Windows ์ธก์—์„œ๋Š” .NET).

์˜์‹ฌ์˜ ์—ฌ์ง€์—†์ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ๊ณณ์—์„œ ๋•๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋„์™€๋“œ๋ฆฌ๊ณ  ์‹ถ์ง€๋งŒ ์—ฌ๋Ÿฌ๋ถ„์ด ์ €๋ณด๋‹ค ํ›จ์”ฌ ๊ฒฝํ—˜์ด ๋งŽ์œผ๋ฉฐ ์ €๋Š” ์•„๋ฌด ์†Œ์šฉ์ด ์—†์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

@karelz @tquerec ๊ธฐ๊บผ์ด Windows ๋ฐ Linux์—์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌ๋…ํ–ˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์— ํšŒ์‹ ํ•˜๊ฑฐ๋‚˜ ๋‚˜๋ฅผ ์–ธ๊ธ‰ํ•˜์—ฌ ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•ด์•ผ ํ•  ๋•Œ ์—ฐ๋ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋žซ๋™์•ˆ ๊ธฐ๋‹ค๋ ค ์™”์œผ๋ฉฐ ์ฆ๋ถ„์‹์ด๋ผ ํ•˜๋”๋ผ๋„ .NET Core๋ฅผ ์ถ”๊ฐ€๋กœ ์ฑ„ํƒํ•˜๋Š” ์ข‹์€ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

"ํ™•์žฅ๋œ Windows"๋Š” ์ฒ˜์Œ์—๋Š” ์ข‹์€ ๋Œ€์ƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. "ํ™•์žฅ๋œ"์€ NanoServer ๋ฐ ์ปจํ…Œ์ด๋„ˆ(์ฆ‰, ์ „์ฒด .NET CLR์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๋„๋ฉ”์ธ์— ๊ฐ€์ž…๋˜์ง€ ์•Š์€ ์‹œ์Šคํ…œ)์—์„œ ์ž‘๋™ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ๋น ๋ฅธ ์Šน๋ฆฌ์™€ ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ๊พธ๋กœ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•œ ์ถœ๋ฐœ์ ์„ ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด ์ž‘์—…์„ ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์ฐจ๋‹จ ํ•ด์ œํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ ์œ„ํ•ด @tquerec ๋ฐ ๊ด€๋ฆฌ ์ฒด์ธ๊ณผ ํ˜‘๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ 1์›” ๋ง ์ด์ „์—๋Š” ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์—†์œผ๋ฏ€๋กœ ์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค์™€ ์šฐ๋ฆฌ ์ธก์˜ ์ž์› ๋ด‰์‚ฌ ํ™œ๋™( @ianhays @tquerec ๋ฐ @karelz)์œผ๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ์—ฌ ์ฐจ๋‹จ์„ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํ•  ๊ณ„ํš์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
@ianhays ๋Š” CoreFX ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค(์ผ๋ถ€ ์†Œ์Šค ์ฝ”๋“œ ์ถ”๊ฐ€, ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ• ์˜ˆ์ œ ํ‘œ์‹œ, ๋นŒ๋“œ ์„ค์ • ์กฐ์–ธ, ํŒจํ‚ค์ง•, ํ–ฅํ›„ Linux/Mac ํฌํŠธ์šฉ ํ”„๋กœ์ ํŠธ ์ค€๋น„ ๋“ฑ).
์šฐ๋ฆฌ๋Š” Windows ์ „์šฉ ๊ตฌํ˜„์œผ๋กœ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๊ธฐ๋ถ€ ํ™˜์˜). .NET Core๋กœ์˜ ํฌํŠธ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ด ์‹œ์ ์—์„œ ๊ตฌํ˜„ ๋˜๋Š” API ํ‘œ๋ฉด์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ(์ž ์žฌ์ ์œผ๋กœ ๋ณ‘๋ ฌ) ๋‹จ๊ณ„๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์žˆ๊ฑฐ๋‚˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด(๋น„๊ณต๊ฐœ ์†Œ์Šค .NET Framework) ํ…Œ์ŠคํŠธ ๋””์ž์ธ์— ๋Œ€ํ•ด @tquerec ์™€ ๋…ผ์˜๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‚˜์ค‘์— Linux/Mac ํฌํŠธ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@gortok @h3smith @CalebMacdonaldBlack @SOM-fermonte ๋ฐ ๊ด€์‹ฌ ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์€ @ianhays ํ‚ฅ์ด ๋…ธ๋ ฅ์„ ์‹œ์ž‘ํ•˜๋ฉด ๊ธฐ๊บผ์ด ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ธฐ์—ฌ๋ฅผ ๋ฐ›์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(ETA: ๋‹ค์Œ ์ฃผ ์ค‘๋ฐ˜์œผ๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). ์งˆ๋ฌธ์ด๋‚˜ ์ œ์•ˆ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

์ด ์ž‘์—…์„ ํ†ตํ•ด SqlClient์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ Linux์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ Windows ์ธ์ฆ์ด ํ•„์š”ํ•œ SQL Server์— ์—ฐ๊ฒฐํ•  ๋•Œ Windows ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๋Š” Linux์—์„œ ์‹คํ–‰๋˜๋Š” .NET Core๋กœ ํ•ญ๋ชฉ์„ ์ด์‹ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ ์žฅ์• ๊ฐ€ ๋˜๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Microsoft SQL ์„œ๋ฒ„๋Š” AD์— ์žˆ๋Š” ์„œ๋น„์Šค ID(๋น„๋Œ€ํ™”ํ˜•)๋ฅผ ํ†ตํ•œ ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ธ”์— ๋ณด์ด. ๊ท€ํ•˜์˜ ๋ฌธ์ œ๋Š” ์ƒˆ๋กœ์šด ์ œ์•ˆ๋œ ๋ชจ๋ธ๊ณผ์˜ ์ง„์ •ํ•œ ๊ต์ฐจ ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด "๊ฒ€ํ† "ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ท€ํ•˜์˜ ํ™˜๊ฒฝ์€ ์ƒํ™ฉ์ด ์–ด๋–ป๊ฒŒ ๊ต์ฐจํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ข‹์€ ์˜ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ Core์˜ AD ๋ถ€๋ถ„์—์„œ ๊ฒช๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ๋‚˜์—ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ๋‚ด๊ฐ€ ์ฐพ์€ ๋ชจ๋“  ๊ฒƒ์„ ๊ณต์œ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„ค๋ช…๋œ ๋Œ€๋กœ ๋ณด์•ˆ์ด ์—„๊ฒฉํ•œ SQL ํŒœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์—…์—๊ฒŒ ์ด๊ฒƒ์€ ๊ฝค ํฐ ์‡ผ ์Šคํ† ํผ๋ผ๋Š” ๊ฒƒ์„ ๋ชจ๋‘์—๊ฒŒ ์•Œ๋ฆฌ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ถ๊ทน์ ์œผ๋กœ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” EF Core์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์‡ผ ์Šคํ† ํผ์ž…๋‹ˆ๋‹ค.

System.DirectoryServices๊ฐ€ ์ด์ œ CoreFX์— ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” .NET Core - Windows์šฉ์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ณ ๋งˆ์›Œ ์ด์•ˆ. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค!

๊ณ ๋งˆ์›Œ ์ด์•ˆ!

์—…๋ฐ์ดํŠธ๋œ ์‹คํ–‰ ๊ณ„ํš: ํŽธ์ง‘: ๋” ๋‚˜์€ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ์„ฑ์„ ์œ„ํ•ด ์ด ๋ฌธ์ œ์˜ ์ตœ์ƒ์œ„ ๊ฒŒ์‹œ๋ฌผ ๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์–ด๋–ค ๋‹จ๊ณ„์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ ์ค‘๋ณต ์ž‘์—…์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์— ์–ธ๊ธ‰ํ•˜๊ณ  ์กฐ์ •ํ•˜์‹ญ์‹œ์˜ค. ๋ฌธ์ œ๋„ ํ•จ๊ป˜ ํ• ๋‹นํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

System.DirectoryServices ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—๋Š” ์˜จ-ํ”„๋ ˆ๋ฏธ์Šค ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Windows ์•ฑ์„ ์œ„ํ•œ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ข‹์€ ์ผ์„ ๊ณ„์†ํ•˜์‹ญ์‹œ์˜ค.

์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ๊ณ  ์ด์ œ System.DirectoryServices๊ฐ€ ๊ตฌ์ถ• ์ค‘์ž…๋‹ˆ๋‹ค. ๋นจ๋ฆฌ PR์„ ๋ณด๋‚ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ผ์šด๋“œ์— ์ฐธ์—ฌํ•ด ์ฃผ์‹  @tquerec๋‹˜๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!
๋‚˜๋จธ์ง€ 2๊ฐœ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋„์™€์ค„ ์ž์›๋ด‰์‚ฌ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ( @gortok @h3smith @CalebMacdonaldBlack @SOM-fermonte)

@jay98014 ๋Š” ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ณ  Protocols/AccountManagement ๊ตฌ์ถ•์„ ์œ„ํ•œ PR์ด ์žˆ์Šต๋‹ˆ๋‹ค .

๊ทธ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๊ทผ์— System.DirectoryServices.Protocols๋ฅผ ์‹คํ—˜ํ•ด ๋ณด์•˜๊ณ  ๋งŽ์€ ๊ฐ„๋‹จํ•œ System.DirectoryServices ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ System.DirecotryServices.Protocols๋ฅผ ์‚ฌ์šฉ ํ•˜์—ฌ ๋ชจ๋ฐฉํ•˜๊ธฐ ์–ด๋ ต์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ S.DS ๋ฐ S.DS.AM์„ ๊ต์ฐจ ํ”Œ๋žซํผ์—์„œ ์ž‘๋™์‹œํ‚ค๋Š” ๊ฒƒ์€ ํ”Œ๋žซํผ ๊ฐ„ System.DirectoryServices.Protocols๊ฐ€ ๋งŽ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„œ๋น„์Šค ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ด๋Š” System.DirectoryServices.Protocols๊ฐ€ ํ”Œ๋žซํผ ๊ฐ„ LDAP ์†”๋ฃจ์…˜์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์œ ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ฝ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์ด ๋ฉฐ์น  ์ „์— ์Šน์ธ๋œ ๊ฒƒ ๊ฐ™์œผ๋‹ˆ ์†Œ์Šค์—์„œ ๋นŒ๋“œํ•˜๋ฉด ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, ๋ชจ๋“  DirectoryServices ๋นŒ๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ…Œ์ŠคํŠธ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํŒจํ‚ค์ง€๋ฅผ ์•ˆ์ •์ ์ธ ์ƒํƒœ๋กœ ๋ฐฐ์†กํ•˜๊ณ  ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ๊ฐœ์„ (๋ฒ„๊ทธ ์ˆ˜์ •, ๊ฐœ์„  ๋“ฑ)์„ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค.
์†Œ์Šค์—์„œ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ (๋˜๋Š” ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€)์ด ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ Linux ํฌํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ํ›จ์”ฌ ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

์šฐ๋ฆฌ๋Š” 100% ์šฐ๋ฆฌ ๋„๋ฉ”์ธ ๋‚ด๋ถ€์— ์žˆ์œผ๋ฏ€๋กœ Active Directory ์ง€์›์ด ํ•„์š”ํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ƒํƒœ์™€ ๋‹ค์Œ ํ•ต์‹ฌ ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ๊ธฐ๋Œ€์น˜๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” GitHub ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ฒ˜์Œ์ด๋ผ ๋‹ค์–‘ํ•œ ์šฉ์–ด์™€ ์ƒํƒœ ์ •๋ณด๋ฅผ ์•„์ง ๋ชจ๋‘ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๋„ ์œ ๋ฐœํ•˜๋Š” ์™„์ „ํžˆ ๋ณ„๋„์˜ ID ๋ชจ๋ธ ๋Œ€์‹  Active Directory๋ฅผ ๋ฉค๋ฒ„์‹ญ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

@karelz ๊ฐ€ ๊ทธ ์งˆ๋ฌธ์— ๋‹ตํ–ˆ์ง€๋งŒ, ๋‚˜๋Š” ์ด๊ฒƒ์ด ํ˜„์žฌ ์˜ˆ์ •๋œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— 2.0 ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ์ด๊ฒƒ์ด ์˜ˆ์ƒ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. 2.0 ๋ฆด๋ฆฌ์Šค๋ฅผ _in_ ๋ฐฐ์†กํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, ๋ฐฐ์†ก ์ค€๋น„๊ฐ€ ๋˜๋ฉด ์–ธ์ œ๋“ ์ง€ NuGet์—์„œ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™„๋ฒฝํ•œ! ๋‹น์‹ ์€ ๋‚ด ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”.

@nevcoBpalacio ๊ธฐ๋ถ€ ์— ๊ด€์‹ฌ์ด ์žˆ์œผ์‹ญ๋‹ˆ๊นŒ?

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์†”๋ฃจ์…˜์˜ ํ•ต์‹ฌ์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠนํžˆ ์ด ์ฃผ์ œ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ  ํ•˜๋ฃจ ์ค‘(์•„์ด๋“ค๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ์ €๋…) ์‹œ๊ฐ„์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. GitHub์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ์ง‘์—์„œ ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋ฌผ์–ด๋ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๊ฐ์‚ฌ ํ•ด์š”.

Nevcobpalacio, vs17์„ ์‚ฌ์šฉํ•˜๊ณ  ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ „์ฒด .net ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ํ•ต์‹ฌ ์›น ์•ฑ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ตฌ์‹ ๋ฐฉ์‹์œผ๋กœ system.directoryservices.accountmanagement dll์„ ์ฐธ์กฐํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฒƒ์— ์กฐ๊ธˆ ๋” ๊ฐ€๊นŒ์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋™์•ˆ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๋‚ด๊ฐ€ ๋ณธ ๋ฐ”๋กœ๋Š” ๋„ˆ๊ฒŸ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ref๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ  ๋™์ผํ•œ ์ฝ”๋“œ๊ฐ€ .net ์ฝ”์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ด์›”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ •๋ณด๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆœ์กฐ๋กญ๊ฒŒ ์ง„ํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@los93sol ๊ทธ ์ œ์•ˆ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๋…ผ์˜๋Š” ํ•ด๋‹น ์ œ์•ˆ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋นŒ๋“œํ•˜๊ณ  ๋‚˜์ค‘์— Nuget์— ์žˆ๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์œผ๋กœ "์ปท์˜ค๋ฒ„"ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋“ค์›จ์–ด ๋ชจ๋“ˆ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌด๋ฆฌ ๊ฐ์‚ฌ!

๋‚˜๋Š” ์ด ์ œ์•ˆ์— ๋Œ€ํ•ด ๋…ผํ‰ํ•˜๊ณ  ๋‹น์‹ ์„ ์นญ์ฐฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฒ˜์Œ์— ์ด๋Ÿฌํ•œ ์ฝ”์–ด ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ํšŒ์˜์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ปค๋ฎค๋‹ˆํ‹ฐ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด์™€ ๊ฐ™์€ ํ† ๋ก ์ด ๋น›์„ ๋ฐœํ•˜๊ณ  ์ด๋Ÿฌํ•œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”.

ํ˜„์žฌ ๋ˆ„๋ฝ๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ System.DirectoryServices.Protocols๋ฅผ Linux/Mac์œผ๋กœ ์ด์‹ํ•˜๋Š” ์ž‘์—…์„ ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@pasikarkkainen AFAIK ํ˜„์žฌ Microsoft ํŒ€์˜ ์ ๊ทน์ ์ธ ๋…ธ๋ ฅ์€ ์—†์Šต๋‹ˆ๋‹ค(๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ). ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋Š” ์‚ฌ๋žŒ๋„ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.
๊ธฐ์—ฌ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ƒํƒœ๊ฐ€ ๊ถ๊ธˆํ•˜์‹ญ๋‹ˆ๊นŒ?

@karelz ์˜ฌ ์—ฌ๋ฆ„ .NET Core 2.0 ๋ฆด๋ฆฌ์Šค์šฉ DirectoryServices๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@shanselman ์˜ ์ธ์šฉ๋ฌธ

AD โ€“ ์™„์ „ํžˆ, ์ด๊ฒƒ์€ LDAP๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๊ณต๋ฐฑ์ž…๋‹ˆ๋‹ค. Windows Auth NOW์— ๋Œ€ํ•ด ํ™•์‹คํžˆ ์ธ์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ๋ฆ„ ๊ธฐ๊ฐ„ ๋™์•ˆ Core 2.0์„ ์œ„ํ•œ DirectoryServices ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํŠน๋ณ„ํžˆ ๊ฐ€์งˆ ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

=> https://github.com/aspnet/Home/issues/2022#issuecomment -299536123

๋„ค, ์ œ๊ฐ€ ๋“ค์€ ๋ณต๋„ ํ† ๋ก ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ณต๊ฐœ ์ •๋ณด์ธ์ง€, ์–ผ๋งˆ๋‚˜ (๊ทธ๋ฆฌ๊ณ  ๋ˆ„๊ฐ€) ๊ทธ๊ฒƒ์— ์ „๋…ํ–ˆ๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ณ ๋ ค๋˜๊ณ  ์žˆ๊ณ  ์ผ์–ด๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @shanselman & DirectoryServices ์†Œ์œ ์ž๊ฐ€ ํƒ€์ž„๋ผ์ธ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

@karelz : ์—…๋ฐ์ดํŠธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” ์ฃผ๋กœ ์ƒํƒœ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์ง€๋ฉด ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ํ™•์‹คํžˆ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@pasikarkkainen ๋˜ํ•œ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์‹ ๋‹ค๋ฉด ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์•ฑ/์ฝ”๋“œ์—์„œ ํŒจํ‚ค์ง€๋ฅผ "๊ทธ๋ƒฅ" ํ…Œ์ŠคํŠธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์˜ค๋Š˜ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ myget์—์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋กœ ๊ฒŒ์‹œํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค(์˜ค๋Š˜ ๊ฒŒ์‹œ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค).

@karelz ํŠน๋ณ„ํžˆ Mac ๊ตฌํ˜„์„ ๋„์™€์ฃผ๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ง€์‹์ด ๊ฑฐ์˜ ์—†์–ด์„œ ์–ผ๋งˆ๋‚˜ ์ž˜ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์กฐ์‚ฌํ–ˆ๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์ œ์•ˆํ•˜๋Š” ๊ฒƒ ๊ฐ™์€ ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์†Œ์„ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฃผ๋ณ€์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ตฌํ˜„์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. https://github.com/dsbenghe/Novell.Directory.Ldap.NETStandard

@carlowahlstedt ํŒจํ‚ค์ง€ ์ž‘์„ฑ์ž๊ฐ€ ์ด๋ฏธ ์—ฌ๊ธฐ์—์„œ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/dotnet/corefx/issues/2089#issuecomment -228043297

์ด๊ฒƒ์ด ์ฝ”์–ด 2.0์— ํฌํ•จ๋  ๊ฒƒ์ž…๋‹ˆ๊นŒ? ์ƒํƒœ๊ฐ€ ์ข€ ํ—ท๊ฐˆ๋ฆฝ๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, .NET Core 2.0์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ Build ์ปจํผ๋Ÿฐ์Šค์—์„œ ์—ฌ๋ฆ„ ๋™์•ˆ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์•ฝ์†ํ–ˆ์Šต๋‹ˆ๋‹ค. (Windows) ํŒจํ‚ค์ง€๋Š” .NET Core 2.0์ด ์ถœ์‹œ๋  ์ฆˆ์Œ์— .NET Core 2.0 ์œ„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜(#18090)์—์„œ ํŒจํ‚ค์ง€๋ฅผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์ž์‚ฐ์„ ๋ณ‘๋ ฌ๋กœ(#20669) ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต์œ  ๋Ÿฐํƒ€์ž„ ๋˜๋Š” ๋น„ Windows ๋Ÿฐํƒ€์ž„์„ ๋Œ€์ƒ์œผ๋กœ ํ•  ๋•Œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด PlatformNotSupported -trap์œผ๋กœ ๋๋‚ ๊นŒ์š”?

Windows ์ด์™ธ์˜ ์ž์‚ฐ์ด ์—†๋Š” ๋…๋ฆฝ ์‹คํ–‰ํ˜• ํŒจํ‚ค์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ์ด ์ค‘๋‹จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @ericstj ๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋Ÿฐํƒ€์ž„ "PlatformNotSupported" ์˜ˆ์™ธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์˜ค๋ž˜๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. .NET Standard ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ปดํŒŒ์ผ ํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ PlatformNotSupported ์˜ˆ์™ธ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๊นŒ? ... ์šด ์ข‹๊ฒŒ๋„ ์ค‘๊ฐ„ ์ง€์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ApiCompat ๋„๊ตฌ๋Š” ์–ด๋””์—๋‚˜ ์žˆ์ง€ ์•Š์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

netstandard 1.6 ํ”„๋กœ์ ํŠธ์—์„œ System.DirectoryServices ํŒจํ‚ค์ง€๋ฅผ ์‹œ๋„ํ•  ๋•Œ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Install-Package : ํŒจํ‚ค์ง€ System.DirectoryServices 4.0.0์€ netstandard1.6(.NETStandard,Version=v1.6)๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ System.DirectoryServices 4.0.0 ์ง€์›: net(.NETFramework,Version=v0.0)

์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋‚˜ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?
๋ฌธ์•ˆ ์ธ์‚ฌ,
๋ฐ”๋ฃฌ

image

@vrn11 ์ด ํŒจํ‚ค์ง€๋Š” ๋‹ค๋ฅธ ๊ณต๊ธ‰์—…์ฒด์˜ ๊ฒƒ์œผ๋กœ ์ „์ฒด ๋„คํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

image

์–ด์จŒ๋“  ์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ๋ฌป๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. myget์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์€ ๊ต‰์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค

@MarcusKohnert๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด https://dotnet.myget.org/F/dotnet-core/api/v3/index.json์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. System.DirectoryServices, System.DirectoryServices.AccountManagement ๋ฐ System.DirectoryServices.Protocols๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์—„์ฒญ๋‚œ! ๋งํฌ์— ๋Œ€ํ•ด @MarcusKohnert ์™€ @ericstj ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

myget์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

<PackageReference Include="System.DirectoryServices" Version="4.5.0-preview2-25701-02" /> <PackageReference Include="System.DirectoryServices.AccountManagement" Version="4.5.0-preview2-25701-02" />
MacOS 10.12.6์—์„œ ์‹คํ–‰ ์ค‘์ด๊ณ  ์‹คํ–‰ ์ค‘์ผ ๋•Œ:

using (var context = new PrincipalContext(ContextType.Domain, "DOMAIN"))

๋‚˜๋Š” ์–ป๊ณ ์žˆ๋‹ค :

System.PlatformNotSupportedException: Operation is not supported on this platform. at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name)

PrincipalContext๋Š” Mac์—์„œ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@bruno-garcia ํ˜„์žฌ Windows๋ฅผ ์ œ์™ธํ•˜๊ณ  DirectoryServices์— ๋Œ€ํ•œ CoreFX์˜ ๊ตฌํ˜„์ด ์—†์Šต๋‹ˆ๋‹ค. @karelz ๋Š” ๊ณ„ํš/์—ด๋ง์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

System.DirectoryServices.Protocol ๋งŒ ์ž ์žฌ์ ์œผ๋กœ x-plat์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์Œ). ์œ„์˜ ์ผ๋ถ€ ๋‹ต๋ณ€๊ณผ ๋งจ ์œ„ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

System.DirectoryServices.Protocols ํ”Œ๋žซํผ ๊ฐ„ ์ž‘๋™(Linux/Mac์—์„œ๋„ ๊ฐ€๋Šฅ)์„ ์–ป๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ฃผ์š” ๋ฌธ์ œ๋Š” System.DirectoryServices(Windows์—์„œ)์—์„œ ์‚ฌ์šฉํ•˜๋Š” LDAP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ Windows์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค๋ฉด System.DirectoryServices๋Š” Windows์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ADSI COM ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๋งŽ์€ ์ข…์†์„ฑ์œผ๋กœ ์ธํ•ด xplat์„ ๋งŒ๋“ค๊ธฐ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

System.DirectoryServices.Protocols๋Š” ์—ฌ์ „ํžˆ xplat์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ž์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์ฝ”๋“œ ์‹คํ–‰:
```c#
(var context = new PrincipalContext(ContextType.Domain, domain, $"OU=someou,DC=somedomain,DC=bla")) ์‚ฌ์šฉ
````

.NET Core 2.0์ด ํฌํ•จ๋œ Win7 x64์—์„œ ๋‹ค์Œ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

NullReferenceException: Object reference not set to an instance of an object.
System.DirectoryServices.Protocols.LdapConnection.ConstructEntry(IntPtr entryMessage)
System.DirectoryServices.Protocols.LdapConnection.ConstructResponse(int messageId, LdapOperation operation, ResultAll resultType, TimeSpan requestTimeOut, bool exceptionOnTimeOut)
System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout)
System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(string serverName, ref ServerProperties properties)
System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()
System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, string name, string container, ContextOptions options, string userName, string password)
System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, string name, string container)

์‚ฌ์šฉ๋œ ํŒจํ‚ค์ง€:

<PackageReference Include="System.DirectoryServices" Version="4.5.0-preview2-25701-02" />
<PackageReference Include="System.DirectoryServices.AccountManagement" Version="4.5.0-preview2-25701-02" />

[ํŽธ์ง‘] @karelz์— ์˜ํ•œ ๊ณ ์ • ํ˜ธ์ถœ ์Šคํƒ ๋ฐ xml/C# ์ฝ”๋“œ ๊ตฌ๋ฌธ ๊ฐ•์กฐ ํ‘œ์‹œ

@bruno-garcia๋Š” ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ํŠน์ • ๋ฒ„๊ทธ/์ฐจ์ด๊ฐ€ ์•„๋‹Œ ์ „์ฒด ํฌํŠธ ๋…ธ๋ ฅ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

https://github.com/dotnet/corefx/issues/23605 ์—์„œ ์ถ”์ ํ•˜๋Š” @bruno-garcia

๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋ฐ์Šคํฌํ†ฑ์„ ํ†ตํ•ด ๋””๋ฒ„๊ทธํ•˜๊ณ  ๋™์ž‘์ด ๋ถ„๊ธฐ๋˜๋Š” ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ์ž๋ฅผ ํ™•๋ณดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Windows ์„œ๋ฒ„์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ :( (Version="4.5.0-preview2-25701-02")

NullReferenceException: Object reference not set to an instance of an object.
System.DirectoryServices.Protocols.LdapConnection.ConstructEntry(IntPtr entryMessage)
System.DirectoryServices.Protocols.LdapConnection.ConstructResponse(int messageId, LdapOperation operation, ResultAll resultType, TimeSpan requestTimeOut, bool exceptionOnTimeOut)
System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout)
System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(string serverName, ref ServerProperties properties)
System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()
System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, string name, string container, ContextOptions options, string userName, string password)
System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, string name, string container)

์–ธ์ œ ํšจ๊ณผ๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Install-Package : Unable to find package System.IO.FileSystem.AccessControl with version (>= 4.5.0-preview2-25707-02)
  - Found 15 version(s) in nuget.org [ Nearest version: 4.4.0 ]
  - Found 0 version(s) in Microsoft Visual Studio Offline Packages
  - Found 0 version(s) in Package source
At line:1 char:2
+  Install-Package System.DirectoryServices -Version 4.4.0-preview2-257 ...
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

=================================================
๋ˆ„๊ตฌ๋“ ์ง€ ๋‚˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด .NET CLI๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

dotnet ํŒจํ‚ค์ง€ System.DirectoryServices ์ถ”๊ฐ€ --๋ฒ„์ „ 4.5.0-preview2-25707-02 --source https://dotnet.myget.org/F/dotnet-core/api/v3/index.json

@papamamadoii ์†Œ์Šค๋กœ https://dotnet.myget.org/F/dotnet-core/api/v3/index.json ์ด ๋ˆ„๋ฝ๋˜์—ˆ๊ณ  ๋ถ„๋ช…ํžˆ Install-Package๊ฐ€ ์ข…์†์„ฑ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ง€์ •๋œ ํ”ผ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŠน์ • ์žฌํ˜„ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ http://github.com/nuget/home ์— ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@karelz ๋‚ด๊ฐ€ ์ฃผ์„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ Linux ๊ธฐ๋ฐ˜ ๋ฐฐํฌ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@euclid47 System.DirectoryServices.*๋Š” ํ˜„์žฌ Linux์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ๋…ผ์˜ํ•œ ๋ฐ”์™€ ๊ฐ™์ด, ๊ทธ๊ฒƒ์˜ ์ผ๋ถ€๋Š” ์ถฉ๋ถ„ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ด€์‹ฌ/์ฐธ์—ฌ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค๋ฉด ์ž ์žฌ์ ์œผ๋กœ ์ด์‹๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@danmosemsft 2015๋…„ 10์›” ์ดํ›„ ์—ด๋ฆฐ ์ „์ฒด ์Šค๋ ˆ๋“œ๋ฅผ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ถฉ๋ถ„ํ•œ ๊ด€์‹ฌ์œผ๋กœ ๋ณผ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. LDAP ํ†ต์‹  ๊ณ„์ธต์ฒ˜๋Ÿผ ๋ณต์žกํ•œ ๊ฒƒ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ธฐ์ˆ ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด AD๊ฐ€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์˜ ํ•ต์‹ฌ ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ค‘ ํ•˜๋‚˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ ์ž‘์—…ํ•˜๊ณ  ์žˆ์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋Œ€๊ธฐ์—…์˜ ๊ฒฝ์šฐ Linux์—์„œ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋ง ๊ทธ๋Œ€๋กœ Core์˜ ๋ชฉ์ ์„ ๋ฌดํšจํ™”ํ•˜๊ณ  dotnet์˜ ์ฝ”์–ด ์ด์ „ ๋นŒ๋“œ๋ฅผ ๊ณ ์ˆ˜ํ•˜๋„๋ก ํ•˜์—ฌ ์†Œ์ค‘ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ œํ•œํ•œ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค.

@danmosemsft ๋˜ํ•œ ๋ง ๊ทธ๋Œ€๋กœ ์ด ์ž‘์—…์„ ํ•  ๊ณ„ํš์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ํ™•์‹คํžˆ ์•Œ๋ ค์„œ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ถ€๋ถ„์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์„ธ์š”.

@shairozan ์ง€๊ธˆ๊นŒ์ง€ Linux์˜ DirectoryServices๋ฅผ Windows๋ณด๋‹ค ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋กœ ๊ณ ๋ คํ•˜๋Š” 54๋ช… ์ค‘ 7๋ช…์˜ ํˆฌํ‘œ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/dotnet/corefx/issues/2089#issuecomment -261093217 ์ฐธ์กฐ
๊ฐœ๋ฐœ์ž๊ฐ€ .NET Core์—์„œ x-platform๋ณด๋‹ค ์–ป๋Š” ๋‹ค๋ฅธ ์ด์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค(x-plat์ด ๊ฐ€์žฅ ํฐ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋ผ๋Š” ์ ์—๋Š” ๋™์˜ํ•˜์ง€๋งŒ).

๋จผ์ € Windows ์ „์šฉ ํŒจํ‚ค์ง€์˜ ๋ฆด๋ฆฌ์Šค๋ฅผ ์™„๋ฃŒํ•œ ๋‹ค์Œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด Linux ํฌํŠธ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์„ ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋„์›€์„ ๊ตฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/dotnet/corefx/issues/2089#issuecomment -261681168์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  @hughbe ๋Š” DirectoryServices์— ๋Œ€ํ•œ ์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ๋ผ์šด๋“œ๋ฅผ ๋„์™”์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ , ์—ฌ๊ธฐ ๋ฐ ์—ฌ๊ธฐ ์—์„œ ๊ธฐ๋ก์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@karelz ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ํˆฌํ‘œ๋Š” ์–ด๋””์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๊นŒ? SELF / POSSCON ์ดํ›„์— ๊ด€์‹ฌ์ด ์ƒ๋‹นํžˆ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์žฅ๋‹ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@karelz ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํˆฌํ‘œ๋Š” ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” @shairozan ์˜ ํ•„์š”์„ฑ์— ์ ˆ๋Œ€์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ˜ธ์—๋Š” ๊ฐœ๋ฐœ ๋ฐ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์„ ์„ค๋ช…ํ•˜๋Š” ์„ค๋ช… ์ด ์žˆ์Šต๋‹ˆ๋‹ค. .Net Core ์ „๋„์‚ฌ๋“ค์ด ํ”Œ๋žซํผ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š”๋‹ค๊ณ  ์„ค๊ตํ•œ ์ดํ›„๋กœ ๊ตฌํ˜„์— ๋Œ€ํ•œ ์–ด๋– ํ•œ ์›€์ง์ž„๋„ ์—†์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ถฉ๊ฒฉ์ ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ์ค‘๊ฐ„์— ์žˆ๋Š” ๋Œ“๊ธ€๋ณด๋‹ค ๋” ์‰ฌ์šด ํˆฌํ‘œ๋ฅผ ์œ„ํ•ด Linux/Mac ํฌํŠธ dotnet/corefx#24843์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค(https://github.com/dotnet/corefx/issues/2089#issuecomment-261093217 ).

์ด ๋ฌธ์ œ์˜ ์ƒ๋‹จ ๊ฒŒ์‹œ๋ฌผ์—๋„ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

@euclid47 ์ง€๊ธˆ๊นŒ์ง€ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํˆฌํ‘œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ทธ๊ฒƒ์ด 7ํ‘œ(์›๋ณธ ์ œ์ถœ์ž์˜ ๊ฒฝ์šฐ +1)๋ฅผ ์–ป์€ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํŒ€์€ Linux์—์„œ LDAP๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ LDAP๋ฅผ ํ†ตํ•ด ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@balkarov ๊ฐ€๋Šฅ ํ•˜๋‹ค๋ฉด @karelz ๊ฐ€ ๋ฐฉ๊ธˆ ์ƒ์„ฑํ•œ ๋ฌธ์ œ์— ํˆฌํ‘œํ•˜์„ธ์š”( https://github.com/dotnet/corefx/issues/24843 ).

@balkarov @shairozan @euclid47 ์•„์ง ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ LDAP๋ฅผ ํ”„๋กœ์ ํŠธ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Novell.Directory.Ldap.NETStandard Nuget ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ณ ๊ธ‰ LDAP ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ž๊ฒฉ ์ฆ๋ช…์„ ํ™•์ธํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉํ•˜์ง€๋งŒ dotnet ์ฝ”์–ด ๋Ÿฐํƒ€์ž„ ๋„์ปค ์ด๋ฏธ์ง€์—์„œ ์‹คํ–‰๋˜๋Š” 1.0๊ณผ 2.0 ๋ชจ๋‘์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹์ ์ธ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ์ง€๋งŒ System.DirectoryServices ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํฌํŠธ๊ฐ€ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ž‘์—…์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

@OskarKlintrot ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋„๋ฉ”์ธ ์—†์ด ๋กœ๊ทธ์ธ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ด์Šˆ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค https://github.com/dsbenghe/Novell.Directory.Ldap.NETStandard/issues/43
์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ €๋Š” ๊ทธ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋‚˜ ๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž๋Š” ์•„๋‹ˆ์ง€๋งŒ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์„œ ๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค!

(์šฐ๋ฆฌ๋Š” ๋„๋ฉ”์ธ์œผ๋กœ ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)

@karelz ๊ฐ€ Unix์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ์ด ๋ฌธ์ œ์˜ ์ œ๋ชฉ์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

@danmosemsft ํ•˜์ง€๋งŒ ๋ฌธ์ œ์—๋Š” ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค
Linux/Mac ํฌํŠธ.

@balkarov ๋‹ค๋ฅธ ์ถ”์  ๋ฌธ์ œ์— ์—ฐ๊ฒฐํ•˜๋„๋ก ๊ณ„ํš์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ณ„๋„๋กœ ์ถ”์ (

System.DS ํฌํŠธ๊ฐ€ RODC ์„œ๋ฒ„(์ฝ๊ธฐ ์ „์šฉ ๋„๋ฉ”์ธ ์ปจํŠธ๋กค๋Ÿฌ)์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๊นŒ?

@PKGeorgiev ์ „์ฒด ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ System.DirectoryServices ์ง€์›์„ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Windows์šฉ DirectoryServices ์ž‘์—…์ด ์™„๋ฃŒ๋˜์–ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
๋ฉ”๋ชจ:

  • ์ตœ์ข… ํŒจํ‚ค์ง€ ๊ฒŒ์‹œ๋Š” dotnet/corefx#24909์—์„œ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
  • Linux/Mac ํฌํŠธ๋Š” dotnet/corefx#24843์—์„œ ๋ณ„๋„๋กœ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, UWP์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”, UWP์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, Windows ๋ฐ ์ „์ฒด ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‹คํ–‰๋˜๋Š” ๋„ท ์ฝ”์–ด ์•ฑ์—๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค. UWP ๋˜๋Š” Linux์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ PlatformNotSupported ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ Linux์—์„œ ์‹คํ–‰๋˜๋Š” AWS์˜ ๋žŒ๋‹ค ํ•จ์ˆ˜์—์„œ ์ด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. "System.DirectoryServices.AccountManagement๋Š” ์ด ํ”Œ๋žซํผ์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
์ฝ”์–ด 2.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 public static List<string> GetGroups(string userName, string domainString)
        {
            List<string> result = new List<string>();
            List<GroupPrincipal> gprList = new List<GroupPrincipal>();
            // establish domain context
            PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain, null, domainString);

            // find your user
            UserPrincipal user = UserPrincipal.FindByIdentity(yourDomain, userName);

            // if found - grab its groups
            if (user != null)
            {
                PrincipalSearchResult<Principal> groups = user.GetAuthorizationGroups();

                // iterate over all groups
                foreach (Principal p in groups)
                {
                    // make sure to add only group principals
                    if (p is GroupPrincipal)
                    {
                        gprList.Add((GroupPrincipal)p);
                    }
                }
            }

            foreach (var gp in gprList)
            {
                result.Add(gp.Name);
            }

            return result;
        }

@sscoleman ์˜ˆ, Linux์—์„œ๋Š” ์•„์ง ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Windows์—์„œ๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

@sscoleman ๋ฌธ์ œ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค( https://github.com/dotnet/corefx/issues/24843). ์ด ์งˆ๋ฌธ์ด ํ•ญ์ƒ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ด์— ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ด€์‹ฌ์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€๊ธˆ ๋‹น์‹ ์€ ์“ฐ๋ ˆ๊ธฐ ๊ฐ™์€ ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ธ ํ›„ Linux๊ฐ€ ์ง€์›๋˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ Windows ์ „์šฉ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๊ฒƒ์ด ํ”Œ๋žซํผ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ์„ ์ „๋˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ž๋ฌธํ•ด ๋ณด์‹ญ์‹œ์˜ค.

๋” ํฐ Microsoft ์ „๋žต์„ ๋ณด๋ฉด ๋งค์šฐ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. Microsoft๋Š” Active Directory๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ๊ฐœ๋ฐœ ๋ฆฌ์†Œ์Šค๋ฅผ Azure์— ํˆฌ์ž…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. "2016๋…„์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ"์„ ํ™•์ธํ•˜์„ธ์š”. ๋Œ€๋ถ€๋ถ„ AzureAD/ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํˆฌ์ž์ž…๋‹ˆ๋‹ค. https://docs.microsoft.com/en-us/windows-server/identity/whats-new-active-directory-domain-services.

Microsoft๋Š” ๋ชจ๋‘๊ฐ€ ๋Œ€์‹  Azure AD๋กœ ์ด๋™ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Linux์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํˆฌ์žํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์™œ ๊ณ ๊ฐ์ด ๋ฉ€์–ด์ง€๊ฒŒ ํ•˜๋ ค๋Š” ๋ฌด์–ธ๊ฐ€์— ํˆฌ์žํ•˜๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‹น์‹ ์€ ๋น„๊ต์  ๊ฐ„๋‹จํ•œ ์ผ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด LDAP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ AD ๋ฐ Linux์šฉ .NET Core์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ ์ž‘์—…์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•˜์ง€ ์•Š๊ณ  ๋งŽ์€ ์ƒ˜ํ”Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ ์€ ์‚ฌ์šฉ์ž DN๊ณผ ์•”ํ˜ธ๊ฐ€ ํ•„์š”ํ•œ ๋ฐ”์ธ๋”ฉ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

System.DirectoryServices ๋Š” ํ˜„์žฌ Windows ์ „์šฉ API์ด๋ฉฐ .NET Core์šฉ Windows ํ˜ธํ™˜์„ฑ ํŒฉ ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์›์น™์ ์œผ๋กœ System.DirectoryServices ์˜ ์ผ๋ถ€๋ฅผ Linux์—์„œ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์•„์ง ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. dotnet/corefx#24843์ด ์ด ์ž‘์—… ํ•ญ๋ชฉ์„ ์ถ”์  ์ค‘์ž…๋‹ˆ๋‹ค.

Linux์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋Œ€์•ˆ์€ API ํ‘œ๋ฉด์„ ๋ถ„๊ธฐํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ „์ฒด ์‹œ์Šคํ…œ์„ ์ฝ”๋”ฉํ•˜๊ธฐ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์šฐ๋ฆฌ์˜ ์„ ํƒ์—๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ํ”Œ๋žซํผ ๊ฐ„์— ์ž‘๋™ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฝ”๋”ฉํ•  ๋•Œ ์‹ค์‹œ๊ฐ„ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋Š” ํ˜ธํ™˜์„ฑ ๋ถ„์„๊ธฐ์˜ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Windows ํ˜ธํ™˜์„ฑ ํŒฉ๊ณผ ํ”Œ๋žซํผ ๊ฐ„ ๋ถ„์„๊ธฐ๊ฐ€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ๋น„๋””์˜ค๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

https://channel9.msdn.com/Events/Connect/2017/T123

@thedevopsmachine

Microsoft๋Š” ๋ชจ๋‘๊ฐ€ ๋Œ€์‹  Azure AD๋กœ ์ด๋™ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Linux์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํˆฌ์žํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๋ณด๊ธฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ง€์ ํ–ˆ๋“ฏ์ด ์šฐ๋ฆฌ๋Š” Azure๋ฅผ ํ†ตํ•ด ๋ˆ์„ ๋ฒŒ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Azure๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๊ณผ ์šด์˜ ์ฒด์ œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํด๋ผ์šฐ๋“œ์˜ Linux๋ณด๋‹ค ํด๋ผ์šฐ๋“œ์˜ Windows๋ฅผ ํ™๋ณดํ•˜๋Š” ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌผ๋ก  .NET์€ 15๋…„ ๋™์•ˆ Windows์—์„œ ๊ฐ•๋ ฅํ•œ ์กด์žฌ๊ฐ์„ ๊ณผ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์šด์˜ ์ฒด์ œ์—์„œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™์‹œํ‚ค๋Š” ๋ฐ๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€๋งŒ ์†”์งํžˆ ๋งํ•ด์„œ ์šฐ๋ฆฌ์˜ ์˜คํ”ˆ ์†Œ์Šค ๋…ธ๋ ฅ์„ ๋”ฐ๋ฅด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ์šฐ๋ฆฌ๊ฐ€ ์˜๋„์ ์œผ๋กœ Linux๋ฅผ ํ–„์ŠคํŠธ๋งํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๋ฟ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ผ๊ด€๋œ api x-plat ๋ฐ x-framework๋ฅผ ๊ฐ–๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์— ๋™์˜ํ•˜์ง€๋งŒ ๊ทธ ๋‘๋ ค์šด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์˜ํ˜ผ์ด ํŒŒ๊ดด๋ฉ๋‹ˆ๋‹ค .. ๋‚˜๋Š” @scoleman ์— ๋Œ€ํ•ด ๋Š๋‚๋‹ˆ๋‹ค ...

์ด DirectoryServices ํŒจํ‚ค์ง€๋Š” CentOS 7์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

์ด DirectoryServices ํŒจํ‚ค์ง€๋Š” CentOS 7์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ๋•Œ ํ”Œ๋žซํผ์ด ์ง€์›๋˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Linux์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ๋ ˆ์ด๋”์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ •๋ง ์ง€์› ๋ฆฌ๋ˆ…์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

CC @joperezr

@niemyjski dotnet /corefx#24843 ์ฐธ์กฐ

์ด๊ฒƒ์€ ์ •๋ง ์ง€์› ๋ฆฌ๋ˆ…์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

.. ํ”Œ๋Ÿฌ์Šค ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Imho Linux์—์„œ .NET Core 2+๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด์ „ Novell ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌํ˜„์œผ๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๊ณจ์น˜ ์•„ํ”ˆ ์ผ์ž…๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ์ž‘์—…ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? System.DirectoryServices.AccountManagement๋Š” ์—ฌ์ „ํžˆ Windows ์™ธ๋ถ€์˜ .NET Core์— ์—†์Šต๋‹ˆ๋‹ค.

# dotnet --list-runtimes
Microsoft.AspNetCore.All 2.2.6 [/usr/share/dotnet/shared/Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.2.6 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.2.6 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

๋‹ค์‹œ ์—ด๋‹ค 14734

@tarekgh ๋Š” ์—ฌ์ „ํžˆ ๋ ˆ์ด๋”์— ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค์‹œ ์—ด๋‹ค 14734

@JustinGrote ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด ์›ํ•˜๋Š” ์ •ํ™•ํ•œ ๊ธฐ๋Šฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? DirectoryServices๋Š” ๊ฑฐ๋Œ€ํ•˜๊ณ  ์ „์ฒด ๊ธฐ๋Šฅ์ด ๋‹จ ํ•˜๋‚˜์˜ ๋ฆด๋ฆฌ์Šค์—์„œ ์ง€์›๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค. ํŠน์ • ์š”์ฒญ์ด ์žˆ์œผ๋ฉด ์ „์ฒด DS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ง€์›๋˜๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .NET 5.0์—์„œ๋Š” https://github.com/dotnet/runtime/issues/23944 ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

CC @joperezr

@tarekgh
System.DirectoryServices.Protocols๊ฐ€ ์ด์‹๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ชฐ๋ž์ง€๋งŒ ์—ฌ์ „ํžˆ security.principal.windows์— ์ข…์†๋˜์–ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ธ์ฆ ๋“ฑ์„ ํ†ตํ•ด Linux์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๋ˆ„๋ฝ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์กฐ๋ฆฝ ์˜ค๋ฅ˜?

๋ชฉํ‘œ๋Š” ActiveDirectory Powershell ๋ชจ๋“ˆ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ xplat์œผ๋กœ ์žฌ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ๊ธฐ๋ณธ์ ์ธ ์ƒํ˜ธ ์ž‘์šฉ ์ง€์›์ด ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ทธ ๋ชฉ์ ์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด ldap ๋ชจ๋“ˆ์ด๋‚˜ ldap4net์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ActiveDirectory Powershell์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ํฐ ์‚ฌ์šฉ ์‚ฌ๋ก€์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1) ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š๋Š” ์†์„ฑ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— UserPrincipal์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” https://stackoverflow.com/questions/24798037/extend-userprincipal-class๋ฅผ ๋”ฐ๋ž๊ณ  ์ด๊ฒƒ์ด ์ด์ „ .NET ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ผ์ข…์˜ ํ‘œ์ค€์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ ์šฉํ•˜๋ฉด ๋” ๋งŽ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2) ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

`

        DirectoryEntry entry = new DirectoryEntry("LDAP://CN=some base address");
        String objectClass = "some object";
        String filter = "(objectClass=" + objectClass + ")";
        using (DirectorySearcher search = new DirectorySearcher(entry, filter,
             new string[] { "some attribute" },
             SearchScope.Subtree))
        {
            using (SearchResultCollection src = search.FindAll())
                foreach (SearchResult s in src)
                {
                    /* do something with */ s.Properties["some attribute"][0]);
                }
        }

`

์˜ค๋Š˜ ์ด๋ฏธ ์ง€์›๋˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ „ํ˜€ ๋‹จ์„œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ™•์ธํ•œ ๊ฒƒ์€ 2์›”์ด์—ˆ์Šต๋‹ˆ๋‹ค.
๊ณ ๋งˆ์›Œ์š”, ์š”์•„ํ‚ด

@jol64 ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

@jol64 ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

์•„๋งˆ๋„ ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Novell ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ํ•ญ๋ชฉ์„ ๋‹ค์‹œ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ์กด .NET ํ”„๋ ˆ์ž„์›Œํฌ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์žฌ์ž‘์„ฑ ๋ฐ ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ™•์‹คํžˆ ๋ชจ๋“  ์ฝ”๋“œ์˜ ์ฝ”๋“œ ๋ถ„ํ• ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ๊ทธ ์•„์ด๋””์–ด๋ฅผ ์‹ซ์–ดํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์ธ์ฆ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. Novell(๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ์ด์ „ ๋ฒ„์ „)์—์„œ๋Š” ์ž๊ฒฉ ์ฆ๋ช…์„ ์ง€์ •ํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ธฐ์กด ์ฝ”๋“œ์—์„œ๋Š” ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๊ณ ๋งˆ์›Œ์š”, ์š”์•„ํ‚ด

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰