代码之家  ›  专栏  ›  技术社区  ›  MonkeyWrench

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

  •  2
  • MonkeyWrench  · 技术社区  · 16 年前

    这就是我要做的。

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

    如何从wcf pox服务调用这个?这里没有SOAP,只有HTTP GET/POST和XML响应。

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

      WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Redirect;
      WebOperationContext.Current.OutgoingResponse.Location = string.Format( authServiceURL, returnURL );
    

    这是可行的,但没有与任何WCF功能集成,并且需要我为一系列场景手动编码。有没有一种方法可以使用这些类实现这一点:

                    <serviceCredentials>
                        <issuedTokenAuthentication>
                        </issuedTokenAuthentication>
    

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

    我一直在阅读这样的网页: How to: Create a Custom Token 但我不知道它如何适用于我的需求。

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

    1 回复  |  直到 10 年前
        1
  •  1
  •   MonkeyWrench    15 年前

    我不想回答我自己的问题,但我会把我为这个做的事情贴出来。

    我们有一个可以重定向(HTTP301)客户机的身份验证服务,在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/头中。

    This article 帮我弄明白怎么把事情联系起来。这是最好的方法吗?不知道。但这对我的wcf/rest服务有效。它阻止所有未经身份验证的消息访问我的ServiceContract实现,将所有请求重定向到身份验证服务。

    推荐文章