如何使用WCF满足IIS基本身份验证

时间:2014-06-06 18:09:34

标签: c# wcf authentication iis

我正在尝试使用WCF在IIS上进行基本身份验证。

我开发了一个RESTFul Web服务并启用了SSL。我通过user namepassword通过

HttpContext.Current.Request.Headers["Authorization"],

我使用这些信息将HttpContext.Current.User设置为新的genericPrincipal()

最终属性HttpContext.Current.User.Identity.IsAuthenticated保持“真实” 但是,我收到的回复是"401 Unauthorized"。所以我的问题是,我如何满足IIS基本身份验证?

的Web.Config

<?xml version="1.0" encoding="UTF-8"?>
            <system.serviceModel>
               <services>
                  <service name="Agfa.ChannelServiceRest.PrivateServices" behaviorConfiguration="PrivateBehaviors">
                     <endpoint contract="Agfa.ChannelServiceRest.IPrivateServices" 
                               binding="webHttpBinding" 
                               bindingConfiguration="Secure" 
                               behaviorConfiguration="Web" 
                               name="PrivateBehaviors" />
                  </service>
               </services>
               <bindings>
                  <webHttpBinding>
                     <binding name="Secure">
                        <security mode="Transport">
                           <transport clientCredentialType="Basic" />
                        </security>
                     </binding>
                  </webHttpBinding>
               </bindings>
               <behaviors>
                  <endpointBehaviors>
                     <behavior name="Web">
                        <webHttp />
                     </behavior>
                  </endpointBehaviors>
                  <serviceBehaviors>
                     <behavior name="PrivateBehaviors">
                        <serviceMetadata httpsGetEnabled="true" />
                        <serviceDebug includeExceptionDetailInFaults="false" />
                     </behavior>
                  </serviceBehaviors>
               </behaviors>
               <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
            </system.serviceModel>`

2 个答案:

答案 0 :(得分:0)

您是否以适当的基本身份验证格式传递凭据?

授权基本-base64(用户名:密码)

 string credentials = string.Format("{0}:{1}", _username, _password);
 requestProperty.Headers["Authorization"] = string.Format("Basic {0}", Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(credentials)));

这样link描述了类似的问题。

答案 1 :(得分:0)

我发现了这个问题! IIS仅允许Active Directory用户。 因此,要在IIS上使用基本身份验证,您需要添加您希望授予Microsoft Active Directory访问权限的用户。