[ASP.NET] NAS 영역 접근 identity impersonate 사용 한 사례
WebSite Behind Code [ aspx.cs ] 페이지에서 , NAS [ Network Access Strorage ] 에 접근이 필요 한 케이스 였고
NAS에 인증 부분은 UserID 와 , Password를 이용한 인증 방식 이었습니다.
WINAPI 함수를 이용하여 접근 시에 , NAS 영역에 정상적으로 Access가 되나 , NAS 영역에 디렉터리 생성 시에는 권한 관련 오류가 발생 하였습니다.
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct NETSOURCE
{
public uint dwScope;
public uint dwType;
public uint dwDisplayType;
public uint dwUsage;
public string IPLocalName;
public string IPRemoteName;
public string IPComment;
public string IPProvider;
}
[DllImport("mpr.dll", CharSet = CharSet.Auto)]
public static extern int WNetUseConnection
(
IntPtr hwndOwner,
[MarshalAs(UnmanagedType.Struct)] ref NETSOURCE IPNetResource,
string IPPassword,
string IPUserID,
uint dwFlags,
StringBuilder IPAccessName,
ref int IPBufferSize,
out uint IPResult
);
internal string setRemoteConnection(string strRemoteConnectString, string strRemoteUserID, string strRemotePWD)
{
int capacity = 64;
uint resultFlags = 0;
uint flags = 0;
try
{
if ((strRemoteConnectString != "" || strRemoteConnectString != string.Empty) &&
(strRemoteUserID != "" || strRemoteUserID != string.Empty) &&
(strRemotePWD != "" || strRemotePWD != string.Empty))
{
StringBuilder sb = new StringBuilder(capacity);
NETSOURCE ns = new NETSOURCE();
ns.dwType = 1; //공유디스크
ns.IPLocalName = null; //로컬 드라이브 지정하지 않음
ns.IPRemoteName = @strRemoteConnectString;
ns.IPProvider = null;
int result = WNetUseConnection(IntPtr.Zero, ref ns, strRemotePWD, strRemoteUserID, flags, sb, ref capacity, out resultFlags);
if (result == 0)
{
//Successfully connected to a network drive
return "네트워크 드라이브가 성공적으로 연결되었습니다.";
}
else
{
//Unable to connect to a network drive. Please check your connection information.
return "네트워크 드라이브를 연결할 수 없습니다.\n연결 정보를 확인하세요..";
}
}
else
{
//Network drive connection information is incorrect
return "네트워크 드라이브 연결 정보가 올바르지 않습니다.";
}
}
catch (Exception e)
{
return e.Message;
}
}
해당 함수를 호출 한 후에도 디렉터리를 생성 시에는 권한 관련 오류가 발생 하였으며 , IUSR_ [인터넷 정보 서비스 계정 ] 로 시작하는 계정으로 실제 NAS 영역에 접근이 되는 걸로 Exception 의 내용을 확인 할 수 있었습니다.
추가 조치 사항은 , 해당 IIS 운영중인 Windows Server에 NAS 에 Access 하는 동일한 Windows 계정을 생성 하였으며 , [패스워드 동일 하게 ]
Web.config에 System.web 노드의 하위 부분에 아래 사항을 추가 한 후 정상적으로 NAS 영역에 디렉터리 생성처리가 정상적으로 진행 되었습니다.
<system.web>
<identity impersonate="true" userName="userid" password="password" />
</system.web>
'ASP.NET' 카테고리의 다른 글
[ASP.NET] SessionState 최대 타임아웃 설정 (0) | 2015.03.13 |
---|---|
[asp.net] HttpException (0x80004005): 최대 요청 길이를 초과했습니다 해결방안 (0) | 2014.09.05 |
ObjectDataSource 운영시 PostBack 일어날 시 DataBind 도 같이 일어나는 현상 (0) | 2013.10.21 |
Calendar 컨트롤 간단히 특정 요일 글자 색상 변경 해보기 (0) | 2013.10.11 |
Html 형식의 Excel 변환시 OpenOffice에서 한글이 깨지는 현상 (0) | 2013.09.26 |