WCF、ASP.NET 成员资格提供程序和身份验证服务

2023-11-22

我编写了一个与 WCF 服务 (BasicHttpBinding) 通信的 Silverlight 2 应用程序。托管 Silverlight 内容的站点使用 ASP.NET 成员资格提供程序进行保护。我可以使用 WCF 服务中的 HttpContext.Current.User.Identity.Name 访问当前用户,并且我已打开 AspNetCompatibilityRequirementsMode。

我现在想使用完全相同的 Web 服务编写一个 Windows 应用程序。为了处理身份验证,我启用了认证服务,并且可以调用“登录”来验证我的用户...好吧,一切都好...但是我到底如何在我的其他服务客户端上设置验证 cookie?

两种服务都托管在同一域上

  • MyDataService.svc
  • AuthenticationService.svc

我不想为 Windows 客户端创建新服务,或使用其他绑定...

客户端应用程序服务是另一种选择,但所有示例都仅限于展示如何获取用户、角色及其个人资料...但是一旦我们使用客户端应用程序服务进行身份验证,就应该有一种方法来获取该身份验证 cookie当回调到同一服务器时附加到我的服务客户端。

根据同事的意见,解决方案是添加一个 wsHttpBinding 端点,但我希望我可以解决这个问题......


我终于找到了一种方法来完成这项工作。为了进行身份验证,我使用“WCF 身份验证服务“。当对服务进行身份验证时,将尝试设置一个身份验证 cookie。我需要从响应中获取此 cookie,并将其添加到对同一台计算机上的其他 Web 服务发出的任何其他请求中。执行此操作的代码如下所示:

var authService = new AuthService.AuthenticationServiceClient();
var diveService = new DiveLogService.DiveLogServiceClient();

string cookieHeader = "";
using (OperationContextScope scope = new OperationContextScope(authService.InnerChannel))
{
    HttpRequestMessageProperty requestProperty = new HttpRequestMessageProperty();
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestProperty;
    bool isGood = authService.Login("jonas", "jonas", string.Empty, true);
    MessageProperties properties = OperationContext.Current.IncomingMessageProperties;
    HttpResponseMessageProperty responseProperty = (HttpResponseMessageProperty)properties[HttpResponseMessageProperty.Name];
    cookieHeader = responseProperty.Headers[HttpResponseHeader.SetCookie];                
}

using (OperationContextScope scope = new OperationContextScope(diveService.InnerChannel))
{
    HttpRequestMessageProperty httpRequest = new HttpRequestMessageProperty();
    OperationContext.Current.OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, httpRequest);
    httpRequest.Headers.Add(HttpRequestHeader.Cookie, cookieHeader);
    var res = diveService.GetDives();
}      

正如您所看到的,我有两个服务客户端,一个用于身份验证服务,另一个用于我实际要使用的服务。第一个块将调用 Login 方法,并从响应中获取身份验证 cookie。第二个块将在调用“GetDives”服务方法之前将标头添加到请求中。

我对这段代码根本不满意,我认为更好的选择可能是使用“Web 引用”而不是“服务引用”并使用 .NET 2.0 堆栈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF、ASP.NET 成员资格提供程序和身份验证服务 的相关文章

随机推荐

  • A* 算法:封闭列表包含太多元素/太大

    我目前正在 JavaScript 中实现 A 算法 但是 我遇到了一个问题 我的 closeList 似乎太大了 这是输出的屏幕截图 什么可能导致这个问题 我的启发式计算错误吗 Node prototype getHeuristic fun
  • SQL Server 在窗口函数子句中奇怪的不一致行为?

    一边问另一个问题 我发现 SQL Server 发生在 2005 年和 2008 年 在处理时似乎有奇怪的不一致行为CASE窗口函数子句中的语句 下面的代码给出了一个错误 declare t table SortColumn int ins
  • 当块的宽度改变时是否会调用一个事件?

    我想在我监听的块的宽度发生变化时调用我的代码 如何 onresize仅当窗口大小改变时调用 一个选项可以是使用调整大小观察者 观察所有宽度变化 JS var foo document getElementById foo var obser
  • 匹配单个单词,末尾可能有标点符号或复数形式(正则表达式)

    我在正则表达式方面做得越来越好 但我想出了一些超出我目前能力的事情 我想构建一个函数来测试 返回 true 或 false 来测试是否在字符串中找到单词 但如果这个单词是在另一个单词中找到的 我不想有一个积极的匹配 我还想建立检查复数的可能
  • 如何沿着现有道路在两点之间绘制一条路线?

    我想在我的 Android 应用程序中显示两个位置之间的驾驶路线 我只想在路段顶部绘制路线 关于堆栈溢出本身有几个答案 并且所有答案都使用相同的方法 使用 Google Directions API 获取从起点到目的地的路线 并在返回的点之
  • 在 PHP 中可以使用 array[key] 吗?

    是否可以使用不带单引号或双引号的数组 例如 array key 我认为这很糟糕 因为如果我不使用单引号或双引号 PHP 首先查找常量 我的一位同事告诉我 这并不重要 你们有什么感想 不被认为是OK 即使它在大多数情况下都有效 基本上 当 P
  • 如果我不在的情况下我的计算机进入睡眠模式/休眠模式,我正在执行的硒脚本会停止吗?我

    如果我不在的情况下我的计算机进入睡眠模式 休眠模式 我正在执行的 selenium 脚本是否会停止 如果是 那么摆脱这个问题的理想方法是什么 首先 睡眠或休眠将断开您的互联网服务 其次 Hibernate 还会中断或停止许多进程 在睡眠模式
  • Cypress:具有三个不同响应的同一路由的存根响应

    我的应用程序中有一个端点 我们为每个请求使用相同的 api 并在参数中使用不同的操作 URL application api 示例请求负载 1 action CARD TRANSACTION HISTORY data date from 2
  • python中什么时候需要使用global关键字

    好吧 所以我遇到了这个非常烦人的问题 其中一个变量在本地设置 但随后在该函数之外恢复到它的旧值 在本例中为 无 但同时我可以操纵其他变量 并且仍然可以不使用 全局 关键字 我无法提供真正的代码 但它是这样的 foo foo foo bar
  • 如何在SQL Server中预编译存储过程?

    有没有办法在 SQL Server 中预编译存储过程 我的要求是这样的 我有一些存储过程 编译时间比执行时间多 所以我想预编译所有存储过程 当数据库服务器启动并运行时预编译它们会很好 任何关于这方面的想法都会非常有帮助 使用 SET FMT
  • WebView 不调整大小

    我已经为 Firefox OS 开发了一个 Web 应用程序 但我想让它在 Android 中 本地 运行 我的应用程序由一个对话框组成div它在可见时填充整个页面 我使用 Firefox 响应式设计工具对其进行了测试 并且它确实可以正确调
  • SQLite 支持引用完整性吗?

    我有一个 Django Web 服务器配置为使用 SQLite 在多对多关系 带有额外字段 中 Django 强制我使用关系模型来建立两个对象之间的关系 但我能够在相关表中尚不存在的对象之间创建关系 例如 I have table1 and
  • Django 模板如何使用变量查找字典值

    mydict key1 value1 key2 value2 在 Django 模板中查找字典值的常规方法是 mydict key1 mydict key2 如果键是循环变量怎么办 IE for item in list where ite
  • jquery:选择文本事件

    当用户选择一些文本 非文本区域或输入 时 jquery 是否可以调用我的回调来让我知道选择了哪个 div 的文本 并且如果选择焦点丢失也调用我的回调 Thanks 有点令人惊讶的是 没有简单的方法可以做到这一点 IE 有一个select在所
  • 提交表单中的 Laravel 日期格式 (d-M-Y)

    在刀片模板的提交表单中 我有以下日期表单 它与默认日期一起正常工作 例如Y m d 但我想显示日期d M Y 我试图找到一个可用的解决方案 但运气不佳 以下是适用于默认日期的代码 这是模型 public static rules birth
  • R根据条件创建因子

    我需要根据数值高于或低于 10 将列从数字更改为因子 例如 有以下数据 age lt c 1 20 hight lt c 1 20 d frame lt data frame age hight 我尝试了以下方法 d frame hight
  • Android GridView 带分隔符

    GridView 的元素之间可以有分隔符吗 Thanks 您可能需要使用填充和背景颜色 将表的背景设置为一种颜色 并将表中每个视图的背景设置为另一种颜色 在表中的每个视图周围设置 1 或 2 像素的填充 并且之间应该有边框
  • 如何在 Apple 的时钟应用程序中实现 Apple 的“贪睡”功能?

    我正在深入研究 iOS 开发 并正在构建自己的闹钟应用程序以熟悉该平台和 SDK 我目前正在学习的 API 之一是本地通知 API 我认为它与 Apple 用于在时钟应用程序中实现闹钟的 API 相同 我不明白的是他们如何实现 贪睡 功能
  • Heroku 与 Postgres 上的 ConnectionTimeoutError

    我在 Heroku 上部署的应用程序遇到问题 它在本地环境上运行良好 但部署到 Heroku 时经常会出现应用程序错误 日志中的异常是 ActiveRecord ConnectionTimeoutError 无法在 5 000 秒内获取数据
  • WCF、ASP.NET 成员资格提供程序和身份验证服务

    我编写了一个与 WCF 服务 BasicHttpBinding 通信的 Silverlight 2 应用程序 托管 Silverlight 内容的站点使用 ASP NET 成员资格提供程序进行保护 我可以使用 WCF 服务中的 HttpCo