【问题标题】:Windows Identity Foundation ( WIF ) - Principal/Identity not coming back from serviceWindows Identity Foundation (WIF) - 主体/身份未从服务中返回
【发布时间】:2012-11-04 18:36:13
【问题描述】:

我有一个使用 WIF 的 ServiceStack 服务 - 内部一切正常 - 创建 ClaimsPrincipal 和 ClaimsIdentity 对象,从它们添加/读取声明完全没有问题。

但是,当我尝试从客户端(尝试使用 ServiceStack 客户端和 c# WebRequest)获取此对象时,它只返回对象的一部分 - 无论我是否在客户端上安装了 WIF 并尝试进行转换。如果我直接调用并得到 json 结果,这就是返回的全部内容:

{"Principal":{"__type":"Microsoft.IdentityModel.Claims.ClaimsPrincipal, Microsoft.IdentityModel","Identity":{"__type":"Microsoft.IdentityModel.Claims.ClaimsIdentity, Microsoft.IdentityModel","Name":"BoogeyFace","AuthenticationType":"","IsAuthenticated":true}}}

如何跨服务边界获取完整的 WIF ClaimsPrincipal?

谢谢 :-)

【问题讨论】:

  • 您确定要跨边界传递您的声明主体,而不是发布和使用 saml 令牌或 wif cookie 吗?实际情况如何?
  • 好问题 - 它是一个 SOA 应用程序和其他服务想要让 ClaimsPrincipal 询问并获取索赔信息 - 否则 ClaimsPrincipal 的真正意义是什么?我的意思是我可以像过去一样创建一个实现 IPrincipal 和 IIdentity 的自定义对象......也许我错过了什么?
  • 我不太明白,但仍然认为您应该通过 saml 或重用 cookie。如果您只想传递声明,请将 then 作为字符串字符串而不是主体对象传递。
  • 是的,这就是我必须做的。我猜 WIF 的这个声明只意味着来自后端服务的委托:身份委托。 WIF 使跨服务边界维护身份变得容易,以便开发人员可以实现身份委托场景。
  • 我知道 wif 是如何工作的,但从未听说过或做过自己传递声明主体对象的事情。它不打算跨越边界。

标签: c# wif servicestack


【解决方案1】:

要重用已发布的令牌,您必须配置服务以保存引导令牌。 这个接缝在 .net 4.5 中被称为 save bootstrap context。 这将使您可以访问IClaimsIdentity.BootstrapToken 属性中的令牌。详情请见here

在服务端拥有您的原始令牌允许您与另一个服务进行通信,就像您在客户端上一样。 例如,您可以使用 CreateChannelWithIssuedToken,描述为 here

【讨论】:

    猜你喜欢
    • 2011-10-04
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多