gpt4 book ai didi

desktop-application - 从 DesktopApp 中的 STS 获取声明(事件)

转载 作者:行者123 更新时间:2023-12-04 08:05:07 25 4
gpt4 key购买 nike

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

所有示例都在讨论如何使 WCF 使用 Authorization- 和 AuthenticationManagers 对其他 WCF 服务进行基于声明的调用,但我只想联系 sts(我该怎么做?WCF-Fed 绑定(bind)?)和而不是缓存这些东西来使用它。没有其他服务电话... :)

非常感谢!

最佳答案

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

这里有一些代码可以从 ADFS 中为您提供未加密的 SAML token (关键是请求“持有者” token 并配置没有加密证书的 ADFS 依赖方)。

private static SecurityToken GetSamlToken(string realm, string stsEndpoint, ClientCredentials clientCredentials)
{
using (var factory = new WSTrustChannelFactory(
new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential),
new EndpointAddress(new Uri(stsEndpoint))))
{
factory.Credentials.UserName.UserName = clientCredentials.UserName.UserName;
factory.Credentials.UserName.Password = clientCredentials.UserName.Password;
factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
factory.TrustVersion = TrustVersion.WSTrust13;

WSTrustChannel channel = null;

try
{
var rst = new RequestSecurityToken
{
RequestType = WSTrust13Constants.RequestTypes.Issue,
AppliesTo = new EndpointAddress(realm),
KeyType = KeyTypes.Bearer,
};

channel = (WSTrustChannel)factory.CreateChannel();

return channel.Issue(rst);
}
finally
{
if (channel != null)
{
channel.Abort();
}

factory.Abort();
}
}

获得 token 后,您可以使用 LINQ to XML 或 WIF 从 SecurityToken 中获取 ClaimsIdentity。确保您在客户端与 STS 和服务之间使用 SSL。

您的第二个选择是依靠服务返回 claim 列表。这是另一个请求,但您将在用户登录的同时执行此请求,然后缓存这些声明直到 token 过期。

public IEnumerable<Claim> GetUserClaims() {
// get Thread.CurrentPricinpal IClaimsIdentity and grab the claims
}

关于desktop-application - 从 DesktopApp 中的 STS 获取声明(事件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11499594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com