无法获取WCF基本身份验证来对用户进行身份验证
本文关键字:身份验证 用户 获取 WCF | 更新日期: 2023-09-27 18:18:43
所以在这个阶段,在尝试让这个工作之后,我现在求助于问大家这个问题。
是的,我经历了一堆类似于我的堆栈溢出问题,但无济于事。
我想做的就是通过SSL添加基本身份验证。从我浏览的150万4千7个教程来看,这似乎真的是一项简单的任务。
我得到的只是一个弹出的对话框,要求我输入用户名和密码,但即使我传递了正确的凭据,它也会一次又一次地弹出。
我还在iis express中使用了配置设置。如果我禁用基本身份验证,我会得到一个错误,抱怨这没有打开。
我知道我是金发碧眼,但在我在屏幕上开个洞之前,这里是我的web.config
<标题> web . config h1> 证类namespace Booky
{
public class Authentication : System.IdentityModel.Selectors.UserNamePasswordValidator
{
public override void Validate(string UserName, string Password)
{
if (UserName == null || Password == null)
{
throw new ArgumentNullException("Username or Password is Incorrect");
}
if (!(UserName == "wickd" && Password == "OMIG2015"))
{
throw new Exception("Invalid Credentials");
}
}
}
}
<标题> Machine_SVC h1> IMachine_SVC h1> div class="answers"> 如果您在IIS中托管此服务,那么您将面临问题,因为自定义密码验证器不是为IIS托管构建的。它将与独立托管完美地工作。请注意,这只在自托管服务下支持。
您可以通过扩展"ServiceAuthorizationManager"类来实现它,而不是使用自定义验证器。
public class RestAuthorizationManager: ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
//Extract the Authorization header, and parse out the credentials converting the Base64 string:
var authHeader = WebOperationContext.Current.IncomingRequest.Headers["Authorization"];
if ((authHeader != null) && (authHeader != string.Empty))
{
var svcCredentials = System.Text.ASCIIEncoding.ASCII
.GetString(Convert.FromBase64String(authHeader.Substring(6)))
.Split(':');
var user = new { Name = svcCredentials[0], Password = svcCredentials[1] };
if ((user.Name == "user1" && user.Password == "test"))
{
//User is authrized and originating call will proceed
return true;
}
else
{
//not authorized
return false;
}
}
else
{
//No authorization header was provided, so challenge the client to provide before proceeding:
WebOperationContext.Current.OutgoingResponse.Headers.Add("WWW-Authenticate: Basic realm='"MyWCFService'"");
//Throw an exception with the associated HTTP status code equivalent to HTTP status 401
throw new WebFaultException("Please provide a username and password", HttpStatusCode.Unauthorized);
}
}
}
将RestAuthorizationManager
加入业务行为。
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceAuthorization
serviceAuthorizationManagerType
=" WcfWebHttpIISHostingSample.RestAuthorizationManager, WcfWebHttpIISHostingSample"/>
</behavior>
</serviceBehaviors>
这应该能让你继续。
我写了一个完整的指南来创建和保护WCF REST服务与SSL的基本身份验证。即使安全行为也是WCF REST和webhttp行为扩展库的一部分,您也可能想要浏览它。
标题>标题>