Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml WCF-SSO身份验证令牌和POX接口_Xml_Wcf_Rest_Authentication_Single Sign On - Fatal编程技术网

Xml WCF-SSO身份验证令牌和POX接口

Xml WCF-SSO身份验证令牌和POX接口,xml,wcf,rest,authentication,single-sign-on,Xml,Wcf,Rest,Authentication,Single Sign On,这就是我要做的 我们有一个SSO身份验证服务,其他面向外部的网页和服务使用该服务对用户进行身份验证。用户尝试访问服务,如果未找到包含身份验证令牌的cookie,则会将其重定向到SingleSignOn身份验证服务。身份验证服务完成了它的工作,并将用户(HTTP 302)重定向到原始URL,并在URL中使用其加密的身份验证令牌。太好了 我如何从WCF POX服务调用它?这里没有SOAP,只有HTTP GET/POST和XML响应 我目前正在做的是,在每个服务方法实现方法中,检查cookie的头。如

这就是我要做的

我们有一个SSO身份验证服务,其他面向外部的网页和服务使用该服务对用户进行身份验证。用户尝试访问服务,如果未找到包含身份验证令牌的cookie,则会将其重定向到SingleSignOn身份验证服务。身份验证服务完成了它的工作,并将用户(HTTP 302)重定向到原始URL,并在URL中使用其加密的身份验证令牌。太好了

我如何从WCF POX服务调用它?这里没有SOAP,只有HTTP GET/POST和XML响应

我目前正在做的是,在每个服务方法实现方法中,检查cookie的头。如果cookie存在,请验证身份验证令牌并处理请求。如果cookie不存在或身份验证令牌已过期,则响应:

  WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Redirect;
  WebOperationContext.Current.OutgoingResponse.Location = string.Format( authServiceURL, returnURL );
这是可行的,但没有与任何WCF功能集成,需要我手动编写一整套场景的代码。有没有一种方法可以使用这些类来实现这一点:

                <serviceCredentials>
                    <issuedTokenAuthentication>
                    </issuedTokenAuthentication>

或者使用其他方法检查服务的每个请求

我一直在读:,但我不知道它如何适用于我的需要


如有任何建议,将不胜感激。我之所以研究这个问题,是因为在我的项目开始之前,我还有一些时间,我想正确地实施这个项目,并尽可能多地了解WCF。

我不想回答我自己的问题,但我将公布我为此做了些什么

我们有一个可以重定向(Http 301)客户端的身份验证服务,在url中添加身份验证令牌后,该服务会将客户端重定向回我们的服务。利用这一点,以下是我的服务所采取的步骤

我添加了System.ServiceModel.ServiceAuthorizationManager实现,并重写了CheckAccessCore方法来检查cookie/头或url中的身份验证令牌。如果找到,我会验证令牌是否有效。该方法只返回true或false,指示请求是否通过了身份验证。如果消息通过,我创建了一个IExtension对象来包含一些数据,并将其添加到OperationContext扩展中

我还添加了IDispathMessageInspector的实现。这有AfterReceiveRequest和BeforeSendReply方法。我使用BeforeSendReply方法劫持响应。如果消息未通过身份验证(OperationContext扩展中没有我的IExtension对象),我将WebOperationContext.Current.OutgoingResponse.StatusCode设置为重定向,并将位置设置为身份验证服务的url

如果它确实通过了身份验证,我确保auth令牌位于BeforeSendReply方法的响应消息cookie/头中


帮我弄清楚如何把事情联系起来。这是最好的方式吗?不知道。但这适用于我的WCF/REST服务。它阻止所有未经身份验证的消息,甚至阻止它们进入我的ServiceContract实现,将所有请求重定向到身份验证服务。

是否有人将SSO与WCF一起使用?如果是,您是如何实施的?