|
|
1
1
我不想回答我自己的问题,但我会把我为这个做的事情贴出来。 我们有一个可以重定向(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实现,将所有请求重定向到身份验证服务。 |