์คํ ๊ณํ:
๋๊ตฐ๊ฐ๊ฐ ์ด๋ค ๋จ๊ณ์์ ์์ ํ๋ ๊ฒฝ์ฐ ์ค๋ณต ์์ ์ ํผํ๊ธฐ ์ํด ์ฌ๊ธฐ์ ์ธ๊ธํ๊ณ ์กฐ์ ํ์ญ์์ค. @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์ ์ถ๊ฐํจ์ผ๋ก์จ ์ฐ๋ฆฌ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋์ต๋๋ค!
๊ฐ์ฌํฉ๋๋ค
@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 ์ถ๊ฐ
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๋ ์ ๋ง๋ฌ์ต๋๋ค. ๋๋ ๋ชจ๋์๊ฒ ์ธ ๋น์ ์ง๊ณ ์๋ค. ๊ฐ๋จํ ๋งํด์:
๋ชจ๋์๊ฒ ์ง๋ฌธ :
@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)
์ด์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ ์๋ฃจ์
์ด ์์ต๋๊น?
๋ฌธ์ ์ธ์ฌ,
๋ฐ๋ฃฌ
@vrn11 ์ด ํจํค์ง๋ ๋ค๋ฅธ ๊ณต๊ธ์ ์ฒด์ ๊ฒ์ผ๋ก ์ ์ฒด ๋คํธ ํ๋ ์์ํฌ๋ง ์ง์ํฉ๋๋ค.
์ด์จ๋ ์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์๋์ง ๋ฌป๊ณ ์ถ์์ต๋๋ค. 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 ์์
์ด ์๋ฃ๋์ด ๋ฌธ์ ๊ฐ ์ข
๋ฃ๋ฉ๋๋ค.
๋ฉ๋ชจ:
์๋ ํ์ธ์, 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 ํธํ์ฑ ํฉ๊ณผ ํ๋ซํผ ๊ฐ ๋ถ์๊ธฐ๊ฐ ํจ๊ป ์๋ํ๋ ๋ฐฉ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ด ๋น๋์ค๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
@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]
@tarekgh ๋ ์ฌ์ ํ ๋ ์ด๋์ ์์ต๋๊น?
@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(๋ด๊ฐ ์๋ํ ์ด์ ๋ฒ์ )์์๋ ์๊ฒฉ ์ฆ๋ช
์ ์ง์ ํด์ผ ํ์ง๋ง ๊ธฐ์กด ์ฝ๋์์๋ ๊ทธ๋ด ํ์๊ฐ ์์ต๋๋ค.
๊ณ ๋ง์์, ์์ํด
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
System.DirectoryServices๋ฅผ v1.1.0์ฉ .NET Core๋ก ์ด์ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค(https://github.com/dotnet/corefx/milestones).