Wcf 将登录凭据从客户端发送到OData服务

Wcf 将登录凭据从客户端发送到OData服务,wcf,authentication,odata,Wcf,Authentication,Odata,我正在尝试在我的OData WCF服务中实现一个自定义身份验证方案,在该方案中,客户端向服务器提交其登录凭据,并在经过身份验证后接收会话令牌 在OData服务中,我有一个登录方法: 我使用jQuery从客户端调用它: $.ajax{ 网址:loginUrl, 键入:“POST”, 数据:JSON.stringify{User:loginID,Password:loginPassword}, 数据类型:“json”, contentType:'application/json;charset=u

我正在尝试在我的OData WCF服务中实现一个自定义身份验证方案,在该方案中,客户端向服务器提交其登录凭据,并在经过身份验证后接收会话令牌

在OData服务中,我有一个登录方法:

我使用jQuery从客户端调用它:

$.ajax{ 网址:loginUrl, 键入:“POST”, 数据:JSON.stringify{User:loginID,Password:loginPassword}, 数据类型:“json”, contentType:'application/json;charset=utf-8' }; 在浏览器中,我可以看到用户和密码出现在帖子正文中

通过OData服务,登录方法被点击,但是用户和密码不存在——请求。表单完全为空

首先,搜索发现,POST内容类型需要设置为application/json,而不是application/x-www-form-urlencoded。然而,做出这一改变并没有解决问题

搜索发现很多关于OData或WCF POST请求为空的问题,但我最终发现,其中指出:

操作方法只能接受输入参数。数据服务无法访问消息正文中发送的数据

因此,根据这一点,无论发生什么情况,POST请求都不起作用。这似乎意味着我将不得不使用GET请求。但是,在GET请求中发送密码

我是否需要使用faux HTTP Basic身份验证,即在头中传递凭据,但仅用于登录调用,而不是每个请求

否则,从客户端获取OData服务的登录凭据的正确方法是什么

否则,从客户端获取OData服务的登录凭据的正确方法是什么

正确的方法是将身份验证与OData服务分开。基本上,您需要为您的服务创建一个端点,例如/基于OAuth的令牌,在post调用中将用户凭据传递给它

grant_type=password&username=... &password=... 
然后接收一个访问令牌,您随后将在OData调用的头中传递该令牌

Authorization: Bearer <access_token>
OData控制器本身不处理身份验证和令牌创建

Taiseer Joudeh有一系列非常好的教程,我建议您阅读:

Authorization: Bearer <access_token>