Desktop application 从DesktopApp中的STS获取索赔(活动)

Desktop application 从DesktopApp中的STS获取索赔(活动),desktop-application,wif,claims,Desktop Application,Wif,Claims,如果您能帮助我理解如何在本地桌面应用程序中使用声明,我将不胜感激。下面是一个场景:我想显示一个选项卡f.e.,这取决于用户是否有类似“AnalysisAllowed:true”的声明。因此,我想在应用程序启动时获取声明,并在以后绑定它们 所有示例都在讨论如何让WCF使用Authorization-and AuthenticationManager对其他WCF服务进行基于声明的调用,但我只想联系sts(我该怎么做?WCF Fed Binding?),然后缓存使用它的内容。没有其他服务呼叫…:) 非

如果您能帮助我理解如何在本地桌面应用程序中使用声明,我将不胜感激。下面是一个场景:我想显示一个选项卡f.e.,这取决于用户是否有类似“AnalysisAllowed:true”的声明。因此,我想在应用程序启动时获取声明,并在以后绑定它们

所有示例都在讨论如何让WCF使用Authorization-and AuthenticationManager对其他WCF服务进行基于声明的调用,但我只想联系sts(我该怎么做?WCF Fed Binding?),然后缓存使用它的内容。没有其他服务呼叫…:)


非常感谢

我不确定您使用的是什么STS,但通常(例如,使用AD FS 2.0),您将使用WS-Trust连接到STS web服务。这是主动联合与被动联合


查看实验室4中的一些示例,了解如何执行此操作。

在默认配置(客户端&STS)中,您获得的令牌将被加密(除了签名之外)。如果您拥有整个东西(客户端和服务),那么您可以调整一些旋钮,以便令牌可以从客户端“读取”(因此,不加密)

这里有一些代码可以从ADFS中获得一个未加密的SAML令牌(关键是请求一个“承载”令牌,并在没有加密证书的情况下配置ADFS依赖方)

拥有令牌后,可以使用LINQ to XML或WIF从SecurityToken中获取ClaimSideEntity。确保在客户端和STS以及服务之间使用SSL

第二种选择是依靠服务返回索赔清单。这是另一个请求,但您将在用户登录的同时执行此操作,然后缓存这些声明,直到令牌过期

public IEnumerable<Claim> GetUserClaims() {
      // get Thread.CurrentPricinpal IClaimsIdentity and grab the claims
}
public IEnumerable GetUserClaims(){
//获取Thread.CurrentPricinpal iclaimIdentity并获取声明
}

谢谢您的回答。我知道STS(在我的例子中,首先是SelfSTS)提供了一个WS-Trust端点,但它不像调用一个简单的http WCF端点。这就是为什么我要求更多的指导。还有关于实验室:也许我在监督这项工作,但这更多的是关于如何使用WIF从应用程序到wcf服务进行对话,不是吗?。我要找的是在客户端内使用声明来启用/禁用控件。非常感谢您提供的详细代码。我知道其中有很多部分我还不太了解。但是你的代码对我的指导非常有帮助!:)这正是我想要的-从桌面应用程序获取给定用户名/密码的令牌。然而,当我运行这个程序时,我总是从服务器上得到一个“(405)方法notallowed”。有什么建议吗?
public IEnumerable<Claim> GetUserClaims() {
      // get Thread.CurrentPricinpal IClaimsIdentity and grab the claims
}