2016-08-24 4 views
0

간단한 웹 서비스를 만들었으며 웹 서비스에서 아래 코드와 같은 간단한 메서드를 작성했습니다.IIS WebService 주체 사용 권한 요청이 실패했습니다.

[PrincipalPermission(SecurityAction.Demand, Role = @"KIANCOORP\SomethingElse Users U")] 
public string HelloWorld() 
{ 
    var msg = "Hello {0} from internal.".FormatWith(IdentityName); 

    _log.Info(msg); 

    return msg; 
} 

나는 도메인 사용자 KIANCOORP \의 webapppooluser로 설정하는 응용 프로그램 풀의 웹 서비스를 호스팅 한 나는 (액티브 디렉토리를 통해) "KIANCOORP \ SOMETHINGELSE 사용자 U"의 그룹에 사용자를 추가 한 .

인터넷 브라우저를 사용하여 웹 서비스를 탐색하면 다음과 같은 프롬프트가 표시되므로이 HelloWorld 웹 서비스의 응용 프로그램 풀 사용자로 설정했던 동일한 사용자로 로그인하려고합니다. 광산. 내가 올바른 자격 증명으로 로그인하려고하면

enter image description here

지금, 프롬프트가 다시

enter image description here

그것의 내가 자격 증명을 세 번 입력 할 필요가 좋아 온다,이 테스트 한 그리고 매번 로그인 대화 상자가 나타나면 3 번 시도해야하고 결국에는 다음 브라우저 화면이 나타납니다.

enter image description here

System.ServiceModel Warning: 131076 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Warning"><TraceIdentifier>http://msdn.microsoft.com/en-NZ/library/System.ServiceModel.Diagnostics.TraceHandledException.aspx</TraceIdentifier><Description>Handling an exception.</Description><AppDomain>/LM/W3SVC/3/ROOT-1-131164864670874625</AppDomain><Exception><ExceptionType>System.Security.SecurityException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Request for principal permission failed.</Message><StackTrace> at System.Security.Permissions.PrincipalPermission.ThrowSecurityException() 
    at System.Security.Permissions.PrincipalPermission.Demand() 
    at System.Security.PermissionSet.DemandNonCAS() 
    at KianService.HelloWorld() in C:\vso\SandBox\KianService.cs:line 81 
    at SyncInvokeHelloWorld(Object , Object[] , Object[]) 
    at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp;amp; outputs)</StackTrace><ExceptionString>System.Security.SecurityException: Request for principal permission failed. 
    at System.Security.Permissions.PrincipalPermission.ThrowSecurityException() 
    at System.Security.Permissions.PrincipalPermission.Demand() 
    at System.Security.PermissionSet.DemandNonCAS() 
    at KianService.HelloWorld() in C:\vso\SandBox\KianService.cs:line 81 
    at SyncInvokeHelloWorld(Object , Object[] , Object[]) 
    at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp;amp; outputs) 
The action that failed was: 
Demand 
The type of the first permission that failed was: 
System.Security.Permissions.PrincipalPermission 
The first permission that failed was: 
&amp;lt;IPermission class="System.Security.Permissions.PrincipalPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
version="1"&amp;gt; 
&amp;lt;Identity Authenticated="true" 
Role="KIANCOORP\SomethingElse Users U"/&amp;gt; 
&amp;lt;/IPermission&amp;gt; 

The demand was for: 
&amp;lt;IPermission class="System.Security.Permissions.PrincipalPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
version="1"&amp;gt; 
&amp;lt;Identity Authenticated="true" 
Role="KIANCOORP\SomethingElse Users U"/&amp;gt; 
&amp;lt;/IPermission&amp;gt; 

The assembly or AppDomain that failed was: 
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionString></Exception></TraceRecord> 
System.ServiceModel Error: 131075 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Error"><TraceIdentifier>http://msdn.microsoft.com/en-NZ/library/System.ServiceModel.Diagnostics.ThrowingException.aspx</TraceIdentifier><Description>Throwing an exception.</Description><AppDomain>/LM/W3SVC/3/ROOT-1-131164864670874625</AppDomain><Exception><ExceptionType>System.ServiceModel.FaultException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Access is denied.</Message><StackTrace> at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp;amp; outputs) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp;amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp;amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp;amp; rpc) 
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) 
    at System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request, Boolean cleanThread, OperationContext currentOperationContext) 
    at System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext currentOperationContext) 
    at System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result) 
    at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) 
    at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) 
    at System.Runtime.InputQueue`1.AsyncQueueReader.Set(Item item) 
    at System.Runtime.InputQueue`1.EnqueueAndDispatch(Item item, Boolean canDispatchOnThisThread) 
    at System.Runtime.InputQueue`1.EnqueueAndDispatch(T item, Action dequeuedCallback, Boolean canDispatchOnThisThread) 
    at System.ServiceModel.Channels.SingletonChannelAcceptor`3.Enqueue(QueueItemType item, Action dequeuedCallback, Boolean canDispatchOnThisThread) 
    at System.ServiceModel.Channels.HttpChannelListener.HttpContextReceived(HttpRequestContext context, Action callback) 
    at System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult result) 
    at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest() 
    at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest() 
    at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(Object state) 
    at System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) 
    at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped) 
    at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 
</StackTrace><ExceptionString>System.ServiceModel.FaultException: Access is denied.</ExceptionString></Exception></TraceRecord> 
System.ServiceModel Information: 131076 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information"><TraceIdentifier>http://msdn.microsoft.com/en-NZ/library/System.ServiceModel.Diagnostics.TraceHandledException.aspx</TraceIdentifier><Description>Handling an exception.</Description><AppDomain>/LM/W3SVC/3/ROOT-1-131164864670874625</AppDomain><Exception><ExceptionType>System.ServiceModel.FaultException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Access is denied.</Message><StackTrace> at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp;amp; outputs) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp;amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp;amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp;amp; rpc) 
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace><ExceptionString>System.ServiceModel.FaultException: Access is denied. 
    at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp;amp; outputs) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp;amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp;amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp;amp; rpc) 
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</ExceptionString></Exception></TraceRecord> 

내가 나에게 문제가 촬영이 오류 도울 수있는 게 도움이 온라인을 찾을 수 없습니다

.

답변

0

이 문제는 매우 이상한 문제입니다. Active Directory에서 동일한 사용자 그룹을 찾았습니다. Active Directory에서 동일한 일치하는 그룹을 검색하기 위해 IIS 로그의 사용자 그룹 문자열 리터럴을 사용하지만 찾을 수 없습니다.

역할 = "KIANCOORP \ SomethingElse Users U"/ & gt;

활성 디렉토리에서 찾은 사용자 그룹을 찾으면 내 IIS 로그의 usergroup 문자열 리터럴을 활성 디렉토리에있는 사용자 그룹 이름 텍스트 상자에 복사하고 붙여 넣습니다.

그런 다음 IIS를 다시 시작하고 인터넷 탐색기를 사용하여 웹 서비스를 다시 검색하면 IIS가 로그인하여 적절한 적절한 사용자 그룹과 일치시킬 수있는 사용자의 액세스 권한을 확인할 수 있습니다. 내 C# 코드 "[PrincipalPermission (SecurityAction.Demand, Role = @"KIANCOORP \ SomethingElse Users U ")]" ")로 작성하여 헬로우 월드 응답을받을 수 있습니다.

관련 문제